2 回答

TA贡献1995条经验 获得超2个赞
所以显然你正在传递StringIO到detect_intent_stream:audio_file_path
with open(audio_file_path, 'rb') as audio_file:
您尝试将其StringIO作为文件打开
但:
StringIO 实例已经是一个打开的文件。另一方面,open 命令只接受文件名来返回一个打开的文件。StringIO 实例不适合作为文件名。关联
所以request_generator函数detect_intent_stream需要看起来像:
def request_generator(audio_config, audio_file_path):
query_input = dialogflow.types.QueryInput(audio_config=audio_config)
yield dialogflow.types.StreamingDetectIntentRequest(
session=session_path, query_input=query_input)
while True:
chunk = audio_file_path.read(4096)
if not chunk:
break
yield dialogflow.types.StreamingDetectIntentRequest(
input_audio=chunk)

TA贡献1845条经验 获得超8个赞
您好,您的音频文件或网络连接可能有问题。您是否尝试过发送一个简单的文本或预先录制的 wav 文件作为 dialogflow 的输入?
这个脚本在我的辣椒上效果很好:(我的 wav 文件是 Mono,44100Hz,32Bit)
import os
import time
import sys
import uuid
import google
def printResponse(response):
print('=' * 20)
print('Query text: {}'.format(response.query_result.query_text.encode('utf-8')))
print('Detected intent: {} (confidence: {})'.format(
response.query_result.intent.display_name.encode('utf-8'),
response.query_result.intent_detection_confidence))
print('Fulfillment text: {}'.format(
response.query_result.fulfillment_text.encode('utf-8')))
def detect_intent_audio(project_id, session_id, audio_file_path,
language_code, sample_rate_hertz):
import dialogflow_v2 as dialogflow
session_client = dialogflow.SessionsClient()
# Note: hard coding audio_encoding and sample_rate_hertz for simplicity.
audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16
session = session_client.session_path(project_id, session_id)
with open(audio_file_path, 'rb') as audio_file:
input_audio = audio_file.read()
audio_config = dialogflow.types.InputAudioConfig(
audio_encoding=audio_encoding, language_code=language_code,
sample_rate_hertz=sample_rate_hertz)
query_input = dialogflow.types.QueryInput(audio_config=audio_config)
response = session_client.detect_intent(
session=session, query_input=query_input,
input_audio=input_audio)
printResponse(response)
def detect_intent_stream(project_id, session_id, audio_file_path,
language_code, sample_rate_hertz):
import dialogflow_v2 as dialogflow
session_client = dialogflow.SessionsClient()
# Note: hard coding audio_encoding and sample_rate_hertz for simplicity.
audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16
session_path = session_client.session_path(project_id, session_id)
def request_generator(audio_config, audio_file_path):
query_input = dialogflow.types.QueryInput(audio_config=audio_config)
# The first request contains the configuration.
yield dialogflow.types.StreamingDetectIntentRequest(
session=session_path, query_input=query_input)
# Here we are reading small chunks of audio data from a local
# audio file. In practice these chunks should come from
# an audio input device.
with open(audio_file_path, 'rb') as audio_file:
while True:
chunk = audio_file.read(4096)
if not chunk:
break
# The later requests contains audio data.
yield dialogflow.types.StreamingDetectIntentRequest(
input_audio=chunk)
audio_config = dialogflow.types.InputAudioConfig(
audio_encoding=audio_encoding, language_code=language_code,
sample_rate_hertz=sample_rate_hertz)
requests = request_generator(audio_config, audio_file_path)
responses = session_client.streaming_detect_intent(requests)
print('=' * 20)
for response in responses:
print('Intermediate transcript: "{}".'.format(
response.recognition_result.transcript.encode('utf-8')))
# Note: The result from the last response is the final transcript along
# with the detected content.
printResponse(response)
def detect_intent_texts(project_id, session_id, texts, language_code):
import dialogflow_v2 as dialogflow
session_client = dialogflow.SessionsClient()
session = session_client.session_path(project_id, session_id)
for text in texts:
text_input = dialogflow.types.TextInput(
text=text, language_code=language_code)
query_input = dialogflow.types.QueryInput(text=text_input)
response = session_client.detect_intent(
session=session, query_input=query_input)
printResponse(response)
project_id = 'my_project_id'
session_id = str(uuid.uuid4())
language_code = 'de'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.join('/home/me/', 'xyz.json')
wav_path = os.path.join('/home/me/', 'audio.wav')
try:
print ("detect_intent_texts:")
detect_intent_texts(project_id, session_id, ["Hallo"], language_code)
print('=' * 20)
print ("detect_intent_audio:")
detect_intent_audio(project_id, session_id, wav_path, language_code, 44100)
print('=' * 20)
print ("detect_intent_stream:")
detect_intent_stream(project_id, session_id, wav_path, language_code, 44100)
print('=' * 20)
except google.api_core.exceptions.ServiceUnavailable:
print("503 Connect Failed")
添加回答
举报