2 回答

TA貢獻1995條經(jīng)驗 獲得超2個贊
所以顯然你正在傳遞StringIO到detect_intent_stream:audio_file_path
with open(audio_file_path, 'rb') as audio_file:
您嘗試將其StringIO作為文件打開
但:
StringIO 實例已經(jīng)是一個打開的文件。另一方面,open 命令只接受文件名來返回一個打開的文件。StringIO 實例不適合作為文件名。關(guān)聯(lián)
所以request_generator函數(shù)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條經(jīng)驗 獲得超8個贊
您好,您的音頻文件或網(wǎng)絡(luò)連接可能有問題。您是否嘗試過發(fā)送一個簡單的文本或預(yù)先錄制的 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")
添加回答
舉報