巧借雙樹莓派實現“隔空”同聲傳譯_風聞
壹零社-最新鲜的互联网产业资讯2021-06-16 10:57
巧借雙樹莓派實現“隔空”同聲傳譯
原創2021-06-16 10:53·壹零社小時候,我們都玩兒過手工版的“傳聲筒”:底部挖孔的兩個空鐵製罐頭盒子,通過一根長長的細管兒或棉線連接起來,進行“你説、我聽”和“我説、你聽”的同步“傳話”。不過,如果通話雙方使用的是不同的語種,這種簡易設備就無法實現“同聲傳譯”了。現在,通過樹莓派和古德微機器人“積木”模塊語句等進行開源硬件編程,再藉助於網絡進行語音信號的傳輸及處理,可以非常方便地製作出一個“隔空”同聲傳譯機:一方説中文、另一方講英文,實現中英文雙語的雙向語音及文字的互譯和傳輸,從而可以進行無障礙的實時交流。
1.實驗器材及連接
所需的實驗器材包括:樹莓派及古德微擴展板各兩塊,全向麥克風兩個,音箱兩個,LED燈兩支。
通訊雙方的實驗器材及連接方式均完全一致,分別將擴展板正確安裝於樹莓派上(注意四周要均勻小心用力);然後,將全向麥克風插入樹莓派的USB接口,音箱插入樹莓派的音頻輸出圓孔;最後,將LED燈按“長腿正、短腿負”的規則插入擴展板的5號插孔,給樹莓派通電,啓動操作系統(如圖1)。
2.中文通訊端編程
通過瀏覽器訪問古德微機器人網站(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/ding.mp3’”,作用是播放樹莓派操作系統/home/pi/temp目錄中的ding.mp3音頻文件,即發出“叮”的一聲;接着,調用剛剛編寫的“燈閃爍”函數;然後,分別建立名為“語音輸入”和“語音轉文字”兩個變量,將“語音輸入”變量賦值為“將‘3’秒的語音輸入保存到‘/home/pi/temp/record.mp3’”,作用是將用户通過全向麥克風輸入的語音生成MP3文件並保存至樹莓派的temp目錄中,命名為“record.mp3”;將“語音轉文字”變量賦值為“把語音‘語音輸入’轉換為文字,識別語言為‘普通話遠場’”,作用是將變量“語音輸入”(對應剛剛生成的“record.mp3”音頻文件)進行語音轉文字的識別操作;接着,通過“輸出調試信息‘語音轉文字’”模塊語句,實現在程序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)。
程序編寫完畢,點擊“保存”按鈕將程序保存為“漢語輸入端”。
3.英文通訊端編程
同樣是訪問古德微機器人網站,並且登錄賬號(luke008)後進行“積木”編程區開始編寫程序。英文通訊端的程序與中文通訊端幾乎完全一致,可先通過下載luke007代碼後、用上傳或分享的方式在編程區打開,然後進行少量的修改。
“燈閃爍”函數保持不變;在“Wakeup”函數中,先將變量“語音轉文字”的賦值模塊語句中的識別語言改為“英語”;再使用變量“英譯漢”來替換之前的“漢譯英”,將“發送主題”模塊語句改為“向‘luke007’發送主題‘E2C’的數據‘英譯漢’”;主程序中的“監聽主題”中將“E2C”改為“C2E”,將“對方的中文譯文”變量替換為“對方的英文譯文”,其值為“獲取主題‘C2E’的數據”(如圖5)。
其它的不必作改動,將程序保存為“英語輸入端”。
4.測試樹莓派“隔空”同聲傳譯的效果
將兩個樹莓派分隔開至少數米的距離,防止同時語音喚醒;接着,分別在兩個編程界面中點擊“連接設備”按鈕,出現五個綠色對勾後表示連接成功,再點擊“運行”按鈕進行測試。
在中文通訊端對着麥克風喊話:“小度小度”,音箱會先發出“叮”的一聲回應,接着LED燈會閃爍兩次,説明已經完成了語音喚醒;然後繼續喊話:“小朋友,你好!”,這時會先在程序LOG調試區顯示語音識別的結果:“小朋友,你好!”,接着又會顯示對應的英文翻譯:“Hello,children”;在英文通訊端也會很快收到該英文翻譯“Hello,children”並同樣顯示在LOG區,接着將它轉換為語音形式並通過音箱進行語音的播放;再對着麥克風喊話:“小度小度”,音箱同樣也會先發出“叮”的一聲回應、LED燈閃爍兩次,然後繼續喊話:“Hello,I’m learning to program”。由於編程時設置了3秒的語音輸入限制,語音信息後面的單詞“program”被忽視,此時LOG顯示區只輸出了“Hello,I’m learning to”和中文翻譯“你好,我在學習”。同樣,中文通訊端也是如此。
繼續測試,比如中文的“好好學習,天天向上”被翻譯為“Study hard and make progress every day”,英文的“Programming is fun”和“Programming is funny”則分別被翻譯為“編程是風扇”和“編程很有趣”,“Good morning”當然就對應“早上好”啦(如圖6)!