打造我的聊天機器人!

系列一:IBM Watson 語音轉文字服務(Speech to Text)

wesleyboy42
Maker Cup
Published in
6 min readJun 17, 2016

--

本文將會介紹怎麼從系統收音並傳送到 IBM Watson 的語音轉文字服務,在開始之前,要先快速帶大家開通 Watson 語音轉文字服務。

首先先登入 IBM Bluemix 平台,如果沒有就先註冊一個:

登入後點選型錄頁面,並在搜尋區塊輸入:語言,接下來就會看到語音轉文字的圖示,點一下圖示就可以準備新增服務。

點選後會進入說明頁,基本上就全都預設,直接按下建立按鈕就好。

按下建立後,需要等個幾分鐘才會看到以下頁面,IBM Bluemix將會花一段時間準備。

要先確定上面說明頁出現後再點選服務認證,因為沒準備好前是無法產生服務認證的。

服務準備好後,預設會改一組服務認證,通常就用這組就好,不管怎麼新增,帳號密碼都還是一樣難記。

接下來將會使用這組 password 和 username 來進入到今天的主題了。

在開始撰寫程式之前,要先感謝我朋友 Fred Chien 提供的純 JS 轉檔模組(wav_stream.js),可先到以下網址下載:

在今天的程式中將會分成四個部分:

  • 麥克風收音
  • 收音結果轉成wav
  • 初始化Watson服務
  • 將wav資料上傳到Watson

麥克風收音

首先用npm install安裝 mic 模組,安裝完後照以下設定就能建立完收音部分:

以上設定是指取樣頻率(sampling rate)為16000Hz,單聲道,不用debug訊息,最後一個exitOnSilence的意思是聲音取樣多少回仍然沒聲音的話,就觸發Silence事件。

micInputStream物件則是會一直接收到麥克風的音訊資料。

聲音轉檔

剛下載的轉檔模組(wav_stream.js)可以放在lib資料夾中,接下來只要定義聲道數目和取樣頻率就完成了:

建立 Watson 物件

IBM Watson Developer Cloud團隊開發了一套watson-developer-cloud模組,只要只用npm install就可以安裝了:

watson-developer-cloud模組有支援許多watson服務,在本文只有先用到speech to text(stt),其中username和password欄位指的是一開始建立的語言轉文字服務。

上傳音訊資料到 Watson

micInputStream 物件收到聲音之後,當然要傳到轉檔物件 pcm2wav,所以以下將使用 pipe 把音訊資料傳給 pcm2wav。

pcm2wav 轉檔處理完之後,最後就是要送到 Waston 的語音轉文字服務(stt),這邊一樣透過 pipe 的方式把音訊資料傳給stt。

最後micInstance.start()則是代表開始從麥克風收音。

如果Watson處理完音訊資料後,會有results的事件,本文就先不處理,僅僅就先用console.log印在螢幕上。

詳細的範例程式可參考以下網址:

--

--