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

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

(2)語音喚醒“Wakeup”函數(shù)
新建一個名為“Wakeup”的函數(shù)(注意必須是這個名字),其中的第一個模塊語句是“播放本地音頻‘/home/pi/temp/ding.mp3’”,作用是播放樹莓派操作系統(tǒng)/home/pi/temp目錄中的ding.mp3音頻文件,即發(fā)出“?!钡囊宦暎唤又?,調(diào)用剛剛編寫的“燈閃爍”函數(shù);然后,分別建立名為“語音輸入”和“語音轉(zhuǎn)文字”兩個變量,將“語音輸入”變量賦值為“將‘3’秒的語音輸入保存到‘/home/pi/temp/record.mp3’”,作用是將用戶通過全向麥克風輸入的語音生成MP3文件并保存至樹莓派的temp目錄中,命名為“record.mp3”;將“語音轉(zhuǎn)文字”變量賦值為“把語音‘語音輸入’轉(zhuǎn)換為文字,識別語言為‘普通話遠場’”,作用是將變量“語音輸入”(對應剛剛生成的“record.mp3”音頻文件)進行語音轉(zhuǎn)文字的識別操作;接著,通過“輸出調(diào)試信息‘語音轉(zhuǎn)文字’”模塊語句,實現(xiàn)在程序LOG調(diào)試區(qū)輸出顯示識別轉(zhuǎn)換出的文字信息。
再建立變量“漢譯英”,賦值為“將‘語音轉(zhuǎn)文字’翻譯成‘英文’”,作用是將識別出的中文文字信息翻譯成英文,然后也是在LOG調(diào)試區(qū)輸出顯示;接著,從“物聯(lián)網(wǎng)”-“常用”中選擇并設置好“向‘luke008’發(fā)送主題‘C2E’的數(shù)據(jù)‘漢譯英’”模塊語句,其中的“l(fā)uke008”對應著英文通訊端的賬號(中文通訊端賬號是“l(fā)uke007”),主題“C2E”的意思是“中文對英文”(Chinese?to English),可自定義;該模塊語句的作用是將變量“漢譯英”中保存的英文翻譯文字信息發(fā)送至英文通訊端(如圖3)。
?

(3)調(diào)用Wakeup函數(shù)進行數(shù)據(jù)處理
首先,從“人工智能”-“語音識別”中選擇“小度小度關(guān)鍵詞喚醒,請創(chuàng)建一個Wakeup新函數(shù)”模塊語句,作用是通過“小度小度”關(guān)鍵詞來喚醒執(zhí)行對應的“Wakeup”函數(shù);接著,從“物聯(lián)網(wǎng)”-“常用”中選擇“監(jiān)聽主題‘E2C’并設置初始值‘0’”模塊語句,作用是監(jiān)測英文通訊端發(fā)送過來的“E2C”主題數(shù)據(jù)(English?to Chinese);然后建立一個“重復當‘真’執(zhí)行……”循環(huán)結(jié)構(gòu),通過“如果……執(zhí)行……”選擇結(jié)構(gòu)對“物聯(lián)網(wǎng)是否收到新數(shù)據(jù)”進行判斷,條件成立的話,建立變量“對方的中文譯文”并賦值為“獲取主題‘E2C’的數(shù)據(jù)”,也就是對應英文通訊端在經(jīng)過“英譯漢”后的文字信息;接著,選擇“人工智能”-“語音識別”中的“播放語音‘對方的中文譯文’發(fā)音人為‘0’語調(diào)為‘5’語速為‘3’”模塊語句,實現(xiàn)對方語音信息譯文的語音播放功能(如圖4)。
程序編寫完畢,點擊“保存”按鈕將程序保存為“漢語輸入端”。
?

3.英文通訊端編程
同樣是訪問古德微機器人網(wǎng)站,并且登錄賬號(luke008)后進行“積木”編程區(qū)開始編寫程序。英文通訊端的程序與中文通訊端幾乎完全一致,可先通過下載luke007代碼后、用上傳或分享的方式在編程區(qū)打開,然后進行少量的修改。
“燈閃爍”函數(shù)保持不變;在“Wakeup”函數(shù)中,先將變量“語音轉(zhuǎn)文字”的賦值模塊語句中的識別語言改為“英語”;再使用變量“英譯漢”來替換之前的“漢譯英”,將“發(fā)送主題”模塊語句改為“向‘luke007’發(fā)送主題‘E2C’的數(shù)據(jù)‘英譯漢’”;主程序中的“監(jiān)聽主題”中將“E2C”改為“C2E”,將“對方的中文譯文”變量替換為“對方的英文譯文”,其值為“獲取主題‘C2E’的數(shù)據(jù)”(如圖5)。
其它的不必作改動,將程序保存為“英語輸入端”。
?

4.測試樹莓派“隔空”同聲傳譯的效果
將兩個樹莓派分隔開至少數(shù)米的距離,防止同時語音喚醒;接著,分別在兩個編程界面中點擊“連接設備”按鈕,出現(xiàn)五個綠色對勾后表示連接成功,再點擊“運行”按鈕進行測試。
在中文通訊端對著麥克風喊話:“小度小度”,音箱會先發(fā)出“?!钡囊宦暬貞?,接著LED燈會閃爍兩次,說明已經(jīng)完成了語音喚醒;然后繼續(xù)喊話:“小朋友,你好!”,這時會先在程序LOG調(diào)試區(qū)顯示語音識別的結(jié)果:“小朋友,你好!”,接著又會顯示對應的英文翻譯:“Hello,children”;在英文通訊端也會很快收到該英文翻譯“Hello,children”并同樣顯示在LOG區(qū),接著將它轉(zhuǎn)換為語音形式并通過音箱進行語音的播放;再對著麥克風喊話:“小度小度”,音箱同樣也會先發(fā)出“?!钡囊宦暬貞?、LED燈閃爍兩次,然后繼續(xù)喊話:“Hello,I’m learning to program”。由于編程時設置了3秒的語音輸入限制,語音信息后面的單詞“program”被忽視,此時LOG顯示區(qū)只輸出了“Hello,I’m learning to”和中文翻譯“你好,我在學習”。同樣,中文通訊端也是如此。
繼續(xù)測試,比如中文的“好好學習,天天向上”被翻譯為“Study hard and make progress every day”,英文的“Programming is fun”和“Programming is funny”則分別被翻譯為“編程是風扇”和“編程很有趣”,“Good?morning”當然就對應“早上好”啦(如圖6)!

相關(guān)源代碼可關(guān)注“壹零社”公()眾() 號下載。
?
?