![](/img/trans.png)
[英]How to run IBM Watson Text to speech in browser using javascript
[英]ibm watson speech to text api for pure jquery/javascript
我是IBM Watson Speech-to-Text的新手,也不擅长将实时音频文件从html发送到服务器。
目的是将语音转文本(免费版本)集成到Web应用程序中,以允许听写和记录笔记。 我以前已经实现了HTML语音api,但是该组织对其准确性水平并不满意。
到目前为止,我只看了他们的演示,这似乎表明可以进行实时转录,但是我似乎找不到要使用的示例代码。
我主要打算为此目的使用javascript代码(但是,该应用程序是在ASP MVC 3中构建的)。
如果可以提供任何指南或任何逐步指南以在免费使用的Web应用程序中实现语音转文本,这将是非常有用的。
任何帮助表示赞赏。
可在https://github.com/watson-developer-cloud/speech-to-text-nodejs上找到Bluemix演示应用程序的示例代码,以及分步说明。
我也是新手。 我只在网站上使用javascript。 我想使用Bluemix HTTPS端点(而不是WSS)。 问题是从我的网站上,如果我单击了语音转文本API,则将其视为CORS。
我读过-https: //github.com/watson-developer-cloud/node-sdk/tree/master/examples/webpack#important-notes-CORS版本要求我们发送令牌,而不是base64_encode(USERNAME + ':' + PASSWORD)
。
因此,我在此处查找了令牌API- https ://www.ibm.com/watson/developercloud/doc/common/getting-started-tokens.html-尽管它不能与CORS一起使用,但它并未在此处说明,但经过失败的尝试和阅读(需要参考),我发现此Token API不适用于CORS。 因此,我在服务器上设置了一个PHP文件,并将以下代码放入:
<?php
$USERNAME = 'REMOVED';
$PASSWORD = 'REMOVED';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_USERPWD, $USERNAME . ":" . $PASSWORD);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
print $result;
?>
现在,这给了我一个令牌。 我认为我在Token API文档中阅读了该令牌,最多持续了一个小时。
因此,现在可以从javascript中访问服务器上的该端点以获取令牌,然后可以使用语音通过CORS(从我的网站)发短信。
这是我的代码:
导出异步功能getToken(){const response = await fetch('我给我令牌的网站网址); console.log('watson-stt :: getToken-response:',response);
if (response.status !== 200) {
const error = await response.text();
throw new Error(`Got bad response "status" (${response.status}) from Watson Token server, error: "${error}"`);
}
const token = await response.text();
return token;
}
导出异步函数getResults(audio,ext,token){//音频-blob(web)// ext-“ ogg”之类的文件类型(必须小写?我不这么认为,但是我所看到的全部)
const data = new FormData();
// assume blob
const blob = audio;
data.append('file', blob, `recording.${ext}`);
const response = await fetch('https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true', {
method: 'POST',
headers: {
'Content-Type': `audio/${ext}`,
'X-Watson-Authorization-Token': token
},
body: data
});
console.log('watson-stt::getResults - response:', response);
if (response.status !== 200) {
const error = await response.text();
throw new Error(`Got bad response "status" (${response.status}) from Watson Speach to Text server, error: "${error}"`);
}
return await response.json();
}
////////////////// usage below
let stream, recorder, chunks;
async function recordAndRecognize() {
try {
stream = await navigator.mediaDevices.getUserMedia({ audio:true });
} catch(ex) {
console.error('Failed to get permission to use microphone, error:', ex);
return;
}
recorder = new MediaRecorder(stream);
recorder.addEventListener('stop', handleRecordingStop, false);
recorder.addEventListener('dataavailable', handleRecordingData, false);
chunks = [];
recorder.start();
setTimeout(recorder.stop, 5000); // record for 5 seconds
}
function handleRecordingData(e) {
chunks.push(e.data);
}
async function handleRecordingStop() {
let blob = new Blob(chunks, { type:'audio/ogg; codecs=opus' });
let token = await getToken();
let results = await getResults(blob, 'ogg', token);
}
recordAndRecognize(); // kick it off
这可以直接使用Firefox,但是在Google Chrome上,我想我需要先转换音频。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.