RAPIRO - Raspberry Pi機器小女僕(5)-聲控Rapiro

摘要:RAPIRO - Raspberry Pi機器小女僕(5)-聲控Rapiro

安迪兒的小機器人目前有試過了wii 藍芽控制、手機控制、也裝上了攝影機
預計中的功能看起來剩下聲控這個大功能
其實安迪兒一直有在試聲控的方案
 
聲控初步的想法是
大約是Raspberry pi加上語音解譯再加上程式去判斷然後去呼叫Rapiro執行動作
雖然也有試了一些東西,但還是有問題
 
安迪兒試過的方案:
 
1.整合IPhone去聲控透過Siri proxy解析
->後來發現只能用在IOS6上,IOS7己經改變加密無法使用
 
2.還有新發表ios7 Siri破解方式,用GoogolPlex去轉接
->但很像和區域有關係,安迪兒使用它的代理伺服器,寫的語音指令也沒反應
後來google 查了一下,有些人也有反應這個問題,好像和區域有關係,所以放棄這個方案
 
3.試了網路上流傳前人解析出google語音識別的Speech To Text API
 
它其實是模擬送一些偽造的post給google speech api來達到語音翻譯的功能
 
大約是下面這樣
 "Mozilla/5.0" --post-file daveconroy.flac --header "Content-Type: audio/x-flac;
  rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=en-us&client=chromium" 
 
參考文件
 
但~很不巧的,安迪兒試都是一直回傳500 Error = =|
(意思是太晚使用~~~google不給用了~~~XD)
 
查了一下有不少人有這個問題,
然後發現原來google有新的Speech To Text API v2版本
 
看了一下相關的原碼,這版有加上api和api key這個東西
 
範例站:
 
綜合以上的實驗
最後安迪兒是用Google Speech To Text API v2來搞定這個聲控的方案~XD
 
先來看一下完成圖^^
 
 
這邊記錄一下執行的方式
 
1.申請Google Chromium API key
    嗯--有點長,參考官方的how-to 文件吧~XD
 
大約是
a.打開https://cloud.google.com/console
b.加入chromium-dev@chromium.org 這個專案,才可以開啟Speech To Text
 
c.Create New Client ID 
 
d.Create New Key
 
以上完成後,初步的準備動作就完成了
 
2.再來就是整合語音API和Rapiro的控制
 
安迪兒這次試寫了linux的shell script來達到這個語音控制的功能
 
程式的動作邏輯是
a.執行後輸入c開始錄音(Ctrl+C停止錄音)成flac檔
b.POST資料呼叫API傳回jason內容
c.解析jason語音解譯內容
d.對Rapiro做相關的控制
 
實際影片(透過google的API有點慢XD~~~)
 
 
終於~~~收工嘍~~收工嘍~~~
 
程式碼(stt.sh):

echo "Recording your Speech:--help "
while read -p "input key:" keyinStr; do
echo $keyinStr
if [ "$keyinStr" = "exit" ]; then
	exit 5
fi

if [ "$keyinStr" = "c" ]; then
       echo "Recording...(Ctrl+C to Transcribe)"
       sudo arecord -D plughw:0,0 -q -f cd -t wav -d 0 -r 16000 | flac - -f --best --sample-rate 16000 -s -o andyrecord.flac;

       echo "Converting Speech to Text..."
       sudo wget -q -U "Mozilla/5.0" --post-file andyrecord.flac --header "Content-Type: audio/x-flac; rate=16000" -O - "https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=bababababababababababa....&client=chromium&maxresults=6&pfilter=2" > stt.txt
       sudo cut ./stt.txt -d\" -f8 | grep -v ^$ > stt1.txt 
fi

if [ "$keyinStr" = "--help " ]; then
       echo ":c-start record flac file "
       echo ":exit-exit"
fi

value=`sudo cat stt1.txt`
echo "$value"

case $value in
hello ) 
       echo "#M5" | sudo minicom -b 57600 -o -D /dev/ttyAMA0
    ;;
right )
       echo "#M3" | sudo minicom -b 57600 -o -D /dev/ttyAMA0

       ;;
left )
       echo "#M4" | sudo minicom -b 57600 -o -D /dev/ttyAMA0 
    ;;
forward )
       echo "#M1" | sudo minicom -b 57600 -o -D /dev/ttyAMA0
    ;;
back )
       echo "#M2" | sudo minicom -b 57600 -o -D /dev/ttyAMA0
       #exec ./pirom2 
    ;;
bye )
       echo "#M8" | sudo minicom -b 57600 -o -D /dev/ttyAMA0
    ;;
stop )
       echo "#M0" | sudo minicom -b 57600 -o -D /dev/ttyAMA0
    ;;

esac