今天要來跟大家講要如何在rpi的子上面實現讓機器人可以聽的懂人話的stt 也就是speak to text
今天就直接進入我們的node.js程式碼!
讓我們看看以下程式碼
var mic;
mic = cp.spawn('arecord', ['--device=plughw:0,0', '--format=S16_LE', '--rate=44100', '--channels=1']); //, '--duration=10'
mic.stderr.pipe(process.stderr);
stt();
function stt() {
console.log("openCMDS");
var speech_to_text = watson.speech_to_text({
username: '',
password: '',
version: 'v1'
});
var params = {
content_type: 'audio/wav',
model: 'zh-CN_BroadbandModel',
continuous: true,
inactivity_timeout: -1
};
recognizeStream = speech_to_text.createRecognizeStream(params);//創建stream辨識
mic.stdout.pipe(recognizeStream);//將mic音訊pipe至recognizetream
recognizeStream.setEncoding('utf8');
console.log("start record");
recognizeStream.on('results', function(data){//如果有結果則進入
if(data.results[0] && data.results[0].final && data.results[0].alternatives){//如果是最後結果則進入
console.log(JSON.stringify(data, null, 2));//印出結果
}
});
}
good!
讓我來好好為大家解說
在最上面的的mic就是我們要將音源導入的裝置
我們必須要spawn一個麥克風出來
這邊用到的是RPI 的 command line 後面是一些麥克風的參數
如果對於一些麥克風的採樣率.....想要改變的話就是從這裡做調整喔!
接下來就是要給這個stt的服務申請帳號以及密碼了
上次應該教大家辦完帳號了
這次呢直接到Bluemix平台中的型錄
找尋這個
然後創建之後去憑證那邊得到自己的帳號密碼
填上去就可以囉~
content_type: 'audio/wav',
代表上傳上去的檔案類型
我們defult是使用wav如果大家有想要的使用的類型
- audio/flac
- audio/l16
- audio/wav
這三個任君挑選!!
model: 'zh-CN_BroadbandModel',
這個則是選擇語言的類型
如果沒有這行的話對defult成英文
語言的類別還有很多下列
- en-US_BroadbandModel
- en-US_NarrowbandModel
- es-ES_BroadbandModel
- es-ES_NarrowbandModel
- ja-JP_BroadbandModel
- ja-JP_NarrowbandModel
當初小編我也是去網路上找才找到中文的參數QQ
想要其他語言大家可能要去找找看XDD
continuous: true,這個的意思是有沒有要連續的結果
如果是false的話
結果會自動在你每一次中斷講話的時候將結果回傳
我們這邊使用true
他會將結果串接起來送回來給我們
inactivity_timeout: -1
這個是代表你的麥克風閒置
時間超過某一個時間的話要不要停止辨識
我們這邊用-1代表不會結束
recognizeStream = speech_to_text.createRecognizeStream(params);
這裡就是將這個辨識的物件創造出來
mic.stdout.pipe(recognizeStream);//將mic音訊pipe至recognizetream
接下來我們只要去on results就可以了!!
if(data.results[0] && data.results[0].final && data.results[0].alternatives){
這個的意思是
因為我們使用串流輸入
所以他在接收到我們麥克風所傳進的資訊時
他會不斷的使用上下文來辨識所有可能性
代表說前面辨識出來的文字可能會因為後面的結果而改變
所以它是一個不斷在變換的結果
而這個if所要拿到的結果就是最後一次
每個結果都已經確認下來的結果~
接著只要把值印出來就好囉~
而這邊我們就可以使用我們上一篇所交到iot服務
把我們的結果送上node red做更多的應用囉!
留言列表