未知:无迭代请求的异常!尝试在Dialogflow中检测意图时



我正试图使用Dialogflow接收麦克风输入,以获得用户的意图,但每当我尝试运行它时,都不会收到音频提示,并且会收到一个错误,说明"无异常迭代请求!"。这是我得到的全部错误

---------------------------------------------------------------------------
_MultiThreadedRendezvous                  Traceback (most recent call last)
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coregrpc_helpers.py in error_remapped_callable(*args, **kwargs)
149             prefetch_first = getattr(callable_, "_prefetch_first_result_", True)
--> 150             return _StreamingResponseIterator(result, prefetch_first_result=prefetch_first)
151         except grpc.RpcError as exc:
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coregrpc_helpers.py in __init__(self, wrapped, prefetch_first_result)
72             if prefetch_first_result:
---> 73                 self._stored_first_result = six.next(self._wrapped)
74         except TypeError:
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgrpc_channel.py in __next__(self)
415     def __next__(self):
--> 416         return self._next()
417 
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgrpc_channel.py in _next(self)
705                 elif self._state.code is not None:
--> 706                     raise self
707 
_MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
status = StatusCode.UNKNOWN
details = "Exception iterating requests!"
debug_error_string = "None"
>
The above exception was the direct cause of the following exception:
Unknown                                   Traceback (most recent call last)
<ipython-input-43-08553cb9dc4e> in <module>
----> 1 prods = getResponseStream()
<ipython-input-42-54a2ce08e87f> in getResponseStream()
5     sess_id = '123456789'
6     lang = 'en-US'
----> 7     response = detect_intent_stream(p_id,sess_id,lang)
8 
9     related_prods = []
<ipython-input-41-84442e760865> in detect_intent_stream(project_id, session_id, language_code)
41 
42     requests = request_generator(audio_config)
---> 43     responses = session_client.streaming_detect_intent(requests)
44 
45     print('=' * 20)
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesdialogflow_v2gapicsessions_client.py in streaming_detect_intent(self, requests, retry, timeout, metadata)
402             )
403 
--> 404         return self._inner_api_calls["streaming_detect_intent"](
405             requests, retry=retry, timeout=timeout, metadata=metadata
406         )
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coregapic_v1method.py in __call__(self, *args, **kwargs)
143             kwargs["metadata"] = metadata
144 
--> 145         return wrapped_func(*args, **kwargs)
146 
147 
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coreretry.py in retry_wrapped_func(*args, **kwargs)
279                 self._initial, self._maximum, multiplier=self._multiplier
280             )
--> 281             return retry_target(
282                 target,
283                 self._predicate,
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coreretry.py in retry_target(target, predicate, sleep_generator, deadline, on_error)
182     for sleep in sleep_generator:
183         try:
--> 184             return target()
185 
186         # pylint: disable=broad-except
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coretimeout.py in func_with_timeout(*args, **kwargs)
212             """Wrapped function that adds timeout."""
213             kwargs["timeout"] = next(timeouts)
--> 214             return func(*args, **kwargs)
215 
216         return func_with_timeout
c:usersabalaappdatalocalprogramspythonpython38libsite-packagesgoogleapi_coregrpc_helpers.py in error_remapped_callable(*args, **kwargs)
150             return _StreamingResponseIterator(result, prefetch_first_result=prefetch_first)
151         except grpc.RpcError as exc:
--> 152             six.raise_from(exceptions.from_grpc_error(exc), exc)
153 
154     return error_remapped_callable
c:usersabalaappdatalocalprogramspythonpython38libsite-packagessix.py in raise_from(value, from_value)
Unknown: None Exception iterating requests!

这是我用来调用对话流api 的函数

def detect_intent_stream(project_id, session_id,
language_code):
"""Returns the result of detect intent with streaming audio as input.
Using the same `session_id` between requests allows continuation
of the conversation."""
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
sample_rate_hertz = 16000
session_path = session_client.session_path(project_id, session_id)
print('Session path: {}n'.format(session_path))
def request_generator(audio_config):
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.
r = sr.Recognizer()
speech = sr.Microphone(device_index=1)
with speech as source:
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)
responses = session_client.streaming_detect_intent(requests)
print('=' * 20)
for response in responses:
print('Intermediate transcript: "{}".'.format(
response.recognition_result.transcript))
# Note: The result from the last response is the final transcript along
# with the detected content.
query_result = response.query_result
print('=' * 20)
print('Query text: {}'.format(query_result.query_text))
print('Detected intent: {} (confidence: {})n'.format(
query_result.intent.display_name,
query_result.intent_detection_confidence))
print('Fulfillment text: {}n'.format(
query_result.fulfillment_text))

看起来错误来自request_generator函数,因为在对话框流提供的示例中,该函数管理两个参数audio_configaudio_file_path

如果您注意到,在这一部分中,需要通过小块读取本地音频文件中的音频数据。

...
r = sr.Recognizer()
speech = sr.Microphone(device_index=1)
# 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 speech as source:
while True:
chunk = audio_file.read(4096)
...

您正在传递麦克风实例,该实例表示计算机上的物理麦克风。也许这就是chunk = audio_file.read(4096)可能导致此错误的原因(如果您未定义audio_file变量(,请查看此帖子的响应。

此外,如果使用麦克风库,则可以使用麦克风库的录制方法创建输出音频文件。有关更好的方法,请参阅以下帖子。

  • 如何控制何时停止音频输入?提问
  • 我可以控制启动&我在python中使用语音识别的完成时间
  • 按键时停止语音识别

最新更新