接續上篇,這下篇要來紀錄如何實現語音命令來操控智能小車

先完成上篇才有辨法接下篇哦

先上一個完成測試的視頻


step1:在樹莓派中端機裡建立一個.txt檔並打入要讓小車接受的語音比對

這個動作的目的是讓poketsphnix縮小範圍的辨識語音,讓辨識率更精準

$ sodo nano voice.txt

(檔名看個人喜好命名,後面加.txt文字檔)

在文件編輯器裡鍵入想讓它辨識的單詞,加好後將它存檔

9.png


step2:在pi裡打開瀏覽器並聯上Sphinx Knowledge Base Tool這個網站

它可以把你剛剛建的文件檔轉換成sphnix能辨識的語言

http://www.speech.cs.cmu.edu/tools/lmtool-new.html

8-1.jpg

 

按下生成檔案的鈕之後會到檔案下載頁面

8.png

上圖最下方有一個TAR8681.tgz檔,按右鍵可以下載(檔妹編號會隨機配號所以會和我網頁上的不同

在/home/pi/裡建一個資料匣,把剛下載的.tgz檔解壓在資料匣裡


step3:編輯C 文件讓辨識到關鍵詞聯繫到C 文件的py檔

$ cd ~/sphnix-0.8/src/programs

$ sudo nano continuous.c

找到下圖裡的/* Exit if the first word spoken was GOODBYE */

2019-09-11-114311_720x480_scrot.png

然後把想要連結的程式碼打入

請參考下圖

11-1.png

11-2.png

上圖裡的if是聲音給它去做比對,然後用兩個中挎號{ }包起來,裡面有兩個system第一個espeak是

它比對到你給它的命令時它會回應你,例如我說"back",它會回應"now is back"

第二個system它就會去指定的py檔裡找到對應的關鍵字。

現在說一下py檔裡要新增什麼才能讓它去對應

  1. #!/usr/bin/python  #這行很重要,如果沒有這行,它很難去找到這個py檔
  2. import RPi.GPIO as GPIO  
  3. import time  
  4. import sys  
  5. GPIO.setwarnings(False)  
  6. GPIO.setmode(GPIO.BCM)  
  7. #GPIO.setup(2,GPIO.OUT)  
  8. #GPIO.setup(3,GPIO.OUT)  
  9. GPIO.setup(20,GPIO.OUT)  
  10. GPIO.setup(21,GPIO.OUT)  
  11. GPIO.setup(12,GPIO.OUT)  
  12. GPIO.setup(13,GPIO.OUT)  
  13.   
  14.   
  15. def forward():  
  16.     #GPIO.output(2,True)  
  17.     #GPIO.output(3,True)  
  18.     GPIO.output(21,False)  
  19.     GPIO.output(20,True)  
  20.     GPIO.output(12,False)  
  21.     GPIO.output(13,True)  
  22. def backward():  
  23.     #GPIO.output(2,True)  
  24.     #GPIO.output(3,False)  
  25.     GPIO.output(21,True)  
  26.     GPIO.output(20,False)  
  27.     GPIO.output(12,True)  
  28.     GPIO.output(13,False)  
  29. def turn_right():  
  30.     GPIO.output(21,False)  
  31.     GPIO.output(20,True)  
  32.     GPIO.output(12,True)  
  33.     GPIO.output(13,False)  
  34. def turn_left():  
  35.     GPIO.output(21,True)  
  36.     GPIO.output(20,False)  
  37.     GPIO.output(12,False)  
  38.     GPIO.output(13,True)  
  39. def stop():  
  40.     GPIO.output(21,False)  
  41.     GPIO.output(20,False)  
  42.     GPIO.output(12,False)  
  43.     GPIO.output(13,False)  
  44.       
  45. if (sys.argv[1])=="f":    
  46.     forward()  
  47.     print("forward")  
  48.     time.sleep(2)  
  49.     stop()  
  50. if (sys.argv[1])=="b":  
  51.     backward()  
  52.     print("backward")  
  53.     time.sleep(2)  
  54.     stop()  
  55. if (sys.argv[1])=="r":  
  56.     turn_right()  
  57.     print("turn_right")  
  58.     time.sleep(2)  
  59.     stop()  
  60. if (sys.argv[1])=="l":  
  61.     turn_left()  
  62.     print("turn_left")  
  63.     time.sleep(2)  
  64.     stop()  
  65. if (sys.argv[1])=="s":  
  66.     stop()  
  67.     print("stop")  
arrow
arrow
    文章標籤
    pocketsphinx espeak
    全站熱搜
    創作者介紹
    創作者 定凱 的頭像
    定凱

    大的人身,小的心靈…保持赤子之心。

    定凱 發表在 痞客邦 留言(0) 人氣()