- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个能够同时说话和倾听的聊天机器人。我正在使用 azure 认知服务,目前使用两个函数来听和说:
说话:
def speak(input,voice="en-US-ChristopherNeural"):
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
speech_config.speech_synthesis_voice_name=voice
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
speech_synthesis_result = speech_synthesizer.speak_text_async(input).get()
if speech_synthesis_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_synthesis_result.cancellation_details
print("Azure Speech synthesis canceled: {}".format(cancellation_details.reason))
return True
听力:
def listen(language):
speech_config.speech_recognition_language=language
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
print("Speak into your microphone.")
speech_recognition_result = speech_recognizer.recognize_once_async().get()
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(speech_recognition_result.text))
return speech_recognition_result.text
如果用户开始说话,我希望能够打断语音文本。这意味着我必须不断聆听麦克风输入以确定语音尝试。
我目前正在尝试多线程,但是我尝试的示例都被线路阻塞:
speech_synthesis_result = speech_synthesizer.speak_text_async(input).get()
这是我到目前为止所拥有的,但它什么也没说:
import asyncio
import os
import azure.cognitiveservices.speech as speechsdk
from azure.cognitiveservices.speech import SpeechConfig, SpeechSynthesisOutputFormat, SpeechSynthesizer
# Replace with your own subscription key and region identifier
speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), region=os.environ.get('SPEECH_REGION'))
# Set up the speech synthesizer
# Define the phrase to be spoken
phrase = "Hello, I'm a chatbot. How can I help you today? You can interrupt me whenever you want"
async def listen_for_user_input():
speech_config.speech_recognition_language="en-US-ChristopherNeural"
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
result = await speech_recognizer.start_continuous_recognition_async()
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(result.text))
await speech_recognizer.stop_continuous_recognition_async()
pass
async def speak_phrase(phrase):
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
# Speak the defined phrase
result = await synthesizer.speak_text_async(phrase)
if result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = result.cancellation_details
print("Azure Speech synthesis canceled: {}".format(cancellation_details.reason))
# Start the program
async def main():
task1 = asyncio.create_task(speak_phrase(phrase))
task2 = asyncio.create_task(listen_for_user_input())
done, pending = await asyncio.wait([task1, task2], return_when=asyncio.FIRST_COMPLETED)
for task in pending:
task.cancel()
最佳答案
截至目前,适用于 Python 的 Azure 语音 SDK(版本 1.x.x)不支持 asyncio/await 的异步方法,我们正在努力在下一个主要版本中提供该支持。请参阅下面并行运行语音到文本和文本到语音的示例中的替代方法和修改方法。
import threading
def listen_for_user_input():
print("Start listen_for_user_input")
transcription_done = threading.Event()
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
def recognized_cb(evt):
if evt.result.reason == speechsdk.ResultReason.RecognizedSpeech:
print('RECOGNIZED: {}'.format(evt))
elif evt is not None and evt.result.reason == speechsdk.ResultReason.NoMatch:
print('NOMATCH: {}'.format(evt))
transcription_done.set()
def canceled_cb(evt):
try:
if evt.result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = evt.result.cancellation_details
print('CANCELED: {}'.format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print('Error details: {}'.format(cancellation_details.error_details))
transcription_done.set()
except Exception as e:
print(e)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
speech_recognizer.recognized.connect(recognized_cb)
speech_recognizer.canceled.connect(canceled_cb)
speech_recognizer.start_continuous_recognition_async()
transcription_done.wait()
speech_recognizer.stop_continuous_recognition_async()
print("Stop listen_for_user_input")
def speak_phrase():
print("Start speak_phrase")
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
# Speak the defined phrase
result = synthesizer.speak_text_async(phrase).get()
if result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = result.cancellation_details
print("Azure Speech synthesis canceled: {}".format(cancellation_details.reason))
print("Stop speak_phrase")
if __name__ == "__main__":
print("Start main program")
# create threads for parallel execution
p1 = threading.Thread(target=speak_phrase)
p2 = threading.Thread(target=listen_for_user_input)
# start both threads
p1.start()
p2.start()
# wait for both threads to finish
p1.join()
p2.join()
print("Stop main program")
关于python - 如何使用 Azure 认知服务同时听和说,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75298275/
使用 Cognito 的 forgotPassword 函数时,如果我尝试运行忘记密码方法超过 5 次,我会收到“LimitExceededException”错误。 此时是否有关于此的进一步文档?
我正在尝试向 Azure 的认知文本分析提供一些简单的、Hello-Worldish 的 JSON 示例;使用此测试数据: { "documents": [ { "lan
我正在尝试向 Azure 的认知文本分析提供一些简单的、Hello-Worldish 的 JSON 示例;使用此测试数据: { "documents": [ { "lan
我无法获得我的 CognitoIdentity 的凭据。当用户通过身份验证成功后,他需要获得一个身份才能访问其他 AWS 服务。在我的例子中就是 AWS IoT。但不知何故,我无法获得任何凭证。 这是
我正在使用 aws lambdas、dynamodb 和 cognito 构建身份验证系统。 我一直在比较 getOpenIdTokenForDeveloperIdentity() 提供的 token
我在 Cognito 中单击了“重置密码”,现在登录时出现“PasswordResetRequiredException”,我该如何处理?我在文档中找不到任何内容告诉我应该怎么做? 最佳答案 检查这个
我正在使用 Azure 认知服务,更准确地说是“bing 图像搜索服务”。我发送请求以获取与特定关键字相关的图像。 为此,我向正确的 Azure 端点发出 HTTP REST 请求: 'https:/
我正在使用 Azure 认知服务,更准确地说是“bing 图像搜索服务”。我发送请求以获取与特定关键字相关的图像。 为此,我向正确的 Azure 端点发出 HTTP REST 请求: 'https:/
如果用户登录,我会检查用户是否有 IoT 所需的策略,如果没有,我会附加它。 如果我是第一次登录,这很好用。 现在,当我注销并尝试使用不同的用户登录时,由于某种原因缺少凭据,当我刷新页面时,它再次工作
我将使用 Express 制作的 API 与 API Gateway 封装在一起。我正在使用 Cognito Userpool 来验证 API Gateway。 当我使用 Angular2 http
目前,每次重新启动应用程序时,用户都必须登录。我希望应用程序能够记住用户,直到他们手动注销。以下是我认为可行的方法,但它只是完全绕过了登录 Activity 。 @Override protected
想知道,如何识别图像是否包含特定对象并且该对象完全可见(而不是部分可见)。 Cognitive Services Computer Vision API提供了一组标签和我发送的图像的描述,但是,没有信
用例如下 我们的系统中有面孔列表 用户将上传一张图片 我们希望显示与上传图像匹配的面孔列表,例如置信度 >0.8 现在查看how to ,我的理解如下 使用人脸检测API,我们需要首先上传所有图像,包
用例如下 我们的系统中有面孔列表 用户将上传一张图片 我们希望显示与上传图像匹配的面孔列表,例如置信度 >0.8 现在查看how to ,我的理解如下 使用人脸检测API,我们需要首先上传所有图像,包
上下文 我使用 booth Cognito 用户池和 Cognito 身份池来登录用户。 我想完成一个简单的任务,让用户在 iOS 应用程序(Swift 应用程序)上登录。 我的应用程序基于自定义版本
我在捕获 Cognito 注册错误时遇到困难。当 Cognito 返回“UsernameExistsException”、“message”:“User already exists”错误时,我试图提
我正在试验 Cognito,当我认为它开始没问题时,我遇到了 (Google) token 在 1 小时后过期的问题。 当我开始使用干净的设备时,我可以注册并使用该应用程序 1 小时,然后当我需要刷新
我正在使用 AWS Cognito ( http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-us
是否有办法防止云形成更新删除或重新创建 Cognito 用户池资源?我想消除这种情况发生的可能性。有办法吗? 最佳答案 我找到了答案。使用删除策略。适用于任何 Cloud Formation 资源:
我正在调用 Azure 认知 API 进行 OCR 文本识别,并且同时传递 10 个图像(因为下面的代码一次只接受一个图像 - 即 10 个独立的请求并行),从处理的角度来看,这对我来说效率不高,因为
我是一名优秀的程序员,十分优秀!