- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建一个小型 Python 程序,它可以让我使用我的麦克风从 Watson 服务器实时获取文本,类似于它的工作方式 here .
这是我想出的代码,但它会在我完成录制后获取文本:
import pyaudio
import json
from watson_developer_cloud import SpeechToTextV1
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 10
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
data_feed = b''.join(frames)
speech_to_text = SpeechToTextV1(
username='secret',
password='secret too',
x_watson_learning_opt_out=False
)
result = speech_to_text.recognize(data_feed,
content_type="audio/l16;rate=44100;channels=2",
word_confidence=True,
max_alternatives=4,
word_alternatives_threshold=0.5,
model="en-US_BroadbandModel",
continuous=True)
j = json.dumps(result, indent=2)
print(j)
最佳答案
我继续从头开始创建一个程序,使用 websockets 连接到 Watson 服务器。它仍然没有完全按照我的预期进行,但它非常接近。
音频正在实时发送到服务器,但我在录制完成后收到转录本。
import asyncio
import websockets
import json
import requests
import pyaudio
import time
# Variables to use for recording audio
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 16000
p = pyaudio.PyAudio()
# This is the language model to use to transcribe the audio
model = "en-US_BroadbandModel"
# These are the urls we will be using to communicate with Watson
default_url = "https://stream.watsonplatform.net/speech-to-text/api"
token_url = "https://stream.watsonplatform.net/authorization/api/v1/token?" \
"url=https://stream.watsonplatform.net/speech-to-text/api"
url = "wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize?model=en-US_BroadbandModel"
# BlueMix app credentials
username = "" # Your Bluemix App username
password = "" # Your Bluemix App password
# Send a request to get an authorization key
r = requests.get(token_url, auth=(username, password))
auth_token = r.text
token_header = {"X-Watson-Authorization-Token": auth_token}
# Params to use for Watson API
params = {
"word_confidence": True,
"content_type": "audio/l16;rate=16000;channels=2",
"action": "start",
"interim_results": True
}
# Opens the stream to start recording from the default microphone
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=CHUNK)
async def send_audio(ws):
# Starts recording of microphone
print("* READY *")
start = time.time()
while True:
try:
print(".")
data = stream.read(CHUNK)
await ws.send(data)
if time.time() - start > 20: # Records for n seconds
await ws.send(json.dumps({'action': 'stop'}))
return False
except Exception as e:
print(e)
return False
# Stop the stream and terminate the recording
stream.stop_stream()
stream.close()
p.terminate()
async def speech_to_text():
async with websockets.connect(url, extra_headers=token_header) as conn:
# Send request to watson and waits for the listening response
send = await conn.send(json.dumps(params))
rec = await conn.recv()
print(rec)
asyncio.ensure_future(send_audio(conn))
# Keeps receiving transcript until we have the final transcript
while True:
try:
rec = await conn.recv()
parsed = json.loads(rec)
transcript = parsed["results"][0]["alternatives"][0]["transcript"]
print(transcript)
#print(parsed)
if "results" in parsed:
if len(parsed["results"]) > 0:
if "final" in parsed["results"][0]:
if parsed["results"][0]["final"]:
#conn.close()
#return False
pass
except KeyError:
conn.close()
return False
# Starts the application loop
loop = asyncio.get_event_loop()
loop.run_until_complete(speech_to_text())
loop.close()
所以我现在只想在通过麦克风录音的同时获得成绩单。
关于python - 使用 Watson for Python 进行连续实时语音转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46966787/
我正在使用 watson-developer-cloud npm 模块调用 IBM Watson 问答 API。我调用服务的代码如下: question_and_answer_healthcare.a
我正在使用我公司想要创建的可能对话来测试 Watson Conversation API。我们正在开发巴西葡萄牙语。鉴于葡萄牙语是一种丰富的语言,有时用户会犯错误,我们希望预测这些可能的错误,主要是使
我正在使用我公司想要创建的可能对话来测试 Watson Conversation API。我们正在开发巴西葡萄牙语。鉴于葡萄牙语是一种丰富的语言,有时用户会犯错误,我们希望预测这些可能的错误,主要是使
有什么方法可以告诉沃森他应该重置对话“在这一点之后,每次询问都会像对话开始一样”? tks 最佳答案 Watson 对话是无状态的。因此,如果没有上下文对象,它对您在对话中的位置一无所知。 要重置对话
我只熟悉Watson Assistant因为我已经用它做了一些工作,但我从未使用过 Watson Assistant Solutions。 它是基于 Watson Assistant 的新 API 还
在许多情况下,将已知信息(例如用户的姓名以呈现个性化问候语)传递到新的 Watson Dialog 对话中可能会有所帮助,以避免向用户询问多余或不必要的问题。在查看 API 文档时,我没有看到这样做的
在我的 Watson Assistant 应用程序中,我想捕获上下文中的多个实体,并且还有一个槽来向用户提问。这是一个例子: 用户:我想从多伦多飞往波士顿 Watson 正确检测到: intent:
嗨,我可以创建一个 watson 对话机器人吗,我有一个上下文变量,可以在某些情况下控制流程...... 我需要测试当时是否已经定义了(存在)上下文变量……有人知道该怎么做吗? 我已经试过了: $in
有没有人有嵌套 Intent 的好例子,尤其是在 #yes 和 #no 是子节点的情况下。我得到的情况是 API 返回的是 Intent 值,但输出文本来自“Anything else”! 最佳答案
在网络研讨会中,它提到了使用多个对话工作区来处理项目的不同主题(例如功能性对话与离题)。我们应该如何实现这个设计? 假设我们有两个工作区,一个是功能主题,另一个是非主题。如何确定请求应该进入哪些工作空
我知道您在创建自然语言分类器时必须提供训练数据(在 csv 文件中)。 如果我想在这些数据可用时为分类器添加更多训练数据,我应该如何进行?我应该用原始数据+新数据重新创建分类器吗?有没有办法将额外的数
从昨天开始,对话服务有时不回复回复。它识别意图和实体,但响应中没有文本。这是我使用 CURL 时得到的结果: {"input":{"text":"soporte"},"context":{"conve
我知道您可以转到 Watson Conversation 界面,右键单击工作区,然后下载工作区的 JSON,其中包含意图,如下所示:Is there any way to export intents
例如:如果用户在 Watson Conversation Service 中写入: “我不想在我的新房子里有游泳池,但我想住在公寓里” 你怎么知道用户不想有游泳池,但他喜欢住在公寓里? 最佳答案 这是
我希望在我的项目中实现 IBM Watson Conversation,但我无法理解的一件事是,如何将它与实时搜索集成。示例 我想为我的客户提供酒店搜索服务,我想从对话中提取城市、日期、客人数量等实体
我刚刚去了 Bluemix,看到有一个名为 Discovery 的新实验服务。显然,它可以提取 PDF、Word 文档和 HTML 页面以及其他文件类型。 该服务与文档转换 (DC) 有何区别?以前,
我想通过我的 Node 应用程序将一些值以 IBM Watson 中的上下文变量的形式传递给前端。我怎样才能实现它? 我尝试将要添加的值添加到当前上下文变量对象并将其发回。仍然没有帮助。有什么办法可以
我刚刚去了 Bluemix,看到有一个名为 Discovery 的新实验服务。显然,它可以提取 PDF、Word 文档和 HTML 页面以及其他文件类型。 该服务与文档转换 (DC) 有何区别?以前,
我正在尝试 IBM Watson Conversations 中的插槽功能,但遇到了一个我不知道如何解决的问题。 我有一个从用户那里收集大量信息的用例,因此使用 Slots 功能是有意义的。不幸的是,
有什么方法可以列出关于属于 Watson Discovery 特定集合的文档的元数据(如 ID、文件名等)? 有些 API 方法需要文档 ID(例如“删除文档”),因此显然应该有一种方法可以获取此 I
我是一名优秀的程序员,十分优秀!