牟曉東
小時候,我們都玩過手工版的“傳聲筒”:底部挖孔的兩個空鐵制罐頭盒子,通過一根長長的細管或棉線連接起來,進行“你說、我聽”和“我說、你聽”的同步“傳話”。不過,如果通話雙方使用的是不同的語種,這種簡易設備就無法實現“同聲傳譯”了?,F在,通過樹莓派和卉德微機器人“積木”模塊語句等進行開源硬件編程,再借助于網絡進行語音信號的傳輸及處理,可以非常方便地制作出一個“隔空”同聲傳譯機:一方說中文、另一方講英文,實現中英文雙語的雙向語音及文字的互譯和傳輸,從而可以進行無障礙的實時交流。
所需的實驗器材包括:樹莓派及古德微擴展板各兩塊,全向麥克風兩個,音箱兩個,LED燈兩支。
通訊雙方的實驗器材及連接方式均完全一致,分別將擴展板正確安裝于樹莓派上(注意四周耍均勻小心用力);然后,將全向麥克風插入樹莓派的USB接口,音箱插入樹莓派的音頻輸出圓孔;最后,將LED燈按“長腿正、短腿負”的規則插入擴展板的5號插孔,給樹莓派通電,啟動操作系統(如圖1)。

通過瀏覽器訪問古德微機器人網站(http://www gdwrobot.cn/),登錄賬號(luke007)后點擊“設備控制”進入“積木”編程區開始編寫程序:
(1)編寫控制LED的“燈閃爍”函數
新建一個名為“燈閃爍”的函數,實現的功能是控制插接在5號GPIO接口的LED燈,當程序被語音喚醒后閃爍兩次作為響應信號。先從“循環”中選擇“重復‘10次執行……”模塊語句,修改為“2”;再從“智能硬件”“常用”中選擇“控制‘2號小燈‘亮”,作為循環體的第一個模塊語句,并改為“5”號;接著加一個“等待0.1秒”,作用是控制LED燈持續亮0.1秒;最后,再添加一個“控制‘5號小燈‘滅”和“等待0.1秒”,實現LED燈“亮0.1秒、滅0.1秒,再亮0.1秒、滅0.1秒”的閃爍功能(如圖2)。

(2)語音喚醒“Wakeup”函數
新建一個名為"Wakeup”的函數(注意必須是這個名字),其中的第一個模塊語句是“播放本地音頻‘/home/pi/temp/dingmp3”,作用是播放樹莓派操作系統/home/pi/temp目錄中的cling rnp3音頻文件,即發出“叮”的一聲;接著,調用剛剛編寫的“燈閃爍”函數;然后,分別建立名為“語音輸入”和“語音轉文字”兩個變量,將“語音輸入”變量賦值為“將‘3秒的語音輸入保存到‘/home/pi/temp/record rnp3”,作用是將用戶通過全向麥克風輸入的語音生成MP3文件并保存至樹莓派的temp目錄中,命名為“recordmp3”;將“語音轉文字”變量賦值為“把語音‘語音輸入轉換為文字,識別語言為‘普通話遠場”,作用是將變量“語音輸入”(對應剛剛生成的"recordrap3”音頻文件)進行語音轉文字的識別操作;接著,通過“輸出調試信息‘語音轉文字”模塊語句,實現在程序LOG調試區輸出顯示識別轉換出的文字信息。
再建立變量“漢譯英”,賦值為“將‘語音轉文字翻譯成‘英文”,作用是將識別出的中文文字信息翻譯成英文,然后也是在LOG調試區輸出顯示;接著,從“物聯網”“常用”中選擇并設置好“向‘luke008發送主題‘C2E的數據‘漢譯英”模塊語句,其中的“luke008”對應著英文通訊端的賬號(中文通訊端賬號是"luke007”),主題"C2E"的意思是“中文對英文”(Chinese to English),可自定義;該模塊語句的作用是將變量“漢譯英”中保存的英文翻譯文字信息發送至英文通訊端(如圖3)。

(3)調用Wakeup函數進行數據處理
首先,從“人工智能”“語音識別”中選擇“小度小度關鍵詞喚醒,請創建一個Wakeup新函數”模塊語句,作用是通過“小度小度”關鍵詞來喚醒執行對應的"Wakeup”函數;接著,從“物聯網”“常用”中選擇“監聽主題‘E2C并設置初始值‘0”模塊語句,作用是監測英文通訊端發送過來的“E2C”主題數據(English to Chinese);然后建立一個“重復當‘真執行……”循環結構,通過“如果……執行……”選擇結構對“物聯網是否收到新數據”進行判斷,條件成立的話,建立變量“對方的中文譯文”并賦值為“獲取主題‘E2C的數據”,也就是對應英文通訊端在經過“英譯漢”后的文字信息;接著,選擇“人工智能”“語音識別”中的“播放語音‘對方的中文譯文發音人為‘0語調為‘5語速為‘3”模塊語句,實現對方語音信息譯文的語音播放功能(如圖4)。

程序編寫完畢,點擊“保存”按鉗將程序保存為“漢語輸入端”。