謝作如 程龍愷


摘要:本文對“AI助聽器”項目進行深度分析,挖掘了掌控板內置麥克風的功能,設計了利用掌控板錄音、行空板推理的工作方式,并給出了標準化的參考代碼,以期為中小學AI科創項目的開發提供新方案。
關鍵詞:MMEdu;深度學習;語音識別;AIoT
中圖分類號:G434? 文獻標識碼:A? 論文編號:1674-2117(2023)09-0073-03
筆者自從開源了用時頻譜圖(語譜圖)來識別語音的項目后,激發了好多創客們的創造力,類似的離線版本的語音識別項目不斷涌現。這類項目的核心工作方式是先將音頻轉換為時頻譜圖,再用圖像分類的方式來識別簡單的語音。其優勢在于不需要借助類似百度、科大訊飛的語音識別接口,離線狀態下也能工作。而面向聽障人群的“AI助聽器”項目選擇了掌控板和行空板這兩款常見的開源硬件來實現語音識別和信息提示,獲得了創客們的好評。
原項目的不足和改造方案分析
在“AI助聽器”項目中將行空板作為模型推理服務器,掌控板作為信息顯示終端。先通過各種聲音訓練出深度學習的模型,再部署到行空板上,然后利用行空板的麥克風采集聲音,通過物聯網將相應文字信息發送給終端。通過文字顯示、燈光加震動提醒,讓聽障人“看見”聲音或者感觸到聲音。這個項目雖然很酷,但經過分析后筆者認為還存在幾點不足:
①模型的推理速度較慢。項目使用了Keras的H5模型,這個模型使用在線平臺訓練,網絡結構是ModileNet,在行空板上推理的速度有點慢,約為0.9秒。最讓人難以承受的是,用Keras載入并初始化這一模型需要很長時間,約為1分鐘。經過測試,如果采用ONNX模型完成一次推理約為0.5秒;NCNN模型則會更快一些,在0.2秒左右。而ONNX和NCNN模型的初始化是很快的,1秒鐘內都能完成。
②聲音采集終端選擇不合理。項目中使用行空板來采集聲音,識別的范圍只能是行空板的周圍。一般而言,采集聲音的終端應該是多個的,如需要關注的某個房間、廚房、大門口,以及“聽障人”自身所在的區域等。因此,采集聲音的終端應該具備價格便宜、方便移動的特點。
③服務器端的代碼有些復雜。因為服務器端要完成多種工作,既要采集音頻,又要轉換數據,還要對H5模型做推理,發送MQTT信息。代碼一長,調試代碼就特別復雜,這個項目的可推廣價值也會受到影響。
筆者對原有方案進行了改造,核心工作是用行空板作為模型推理服務器,掌控板作為聲音采集和信息顯示的終端,其中AI模型采用ONNX。這個AI應用系統采用了1塊行空板+n塊掌控板的方案,用MQTT連接起來,如下頁圖1所示。多塊掌控板和行空板協同工作,形成一個完整的物聯網語音讀取、傳輸、識別和反饋的設計流程。
掌控板端代碼的編寫
掌控板作為終端(也可以稱為下位機),主要任務是實時檢測音頻,并通過MQTT協議發送至行空板,實時監視服務器傳送的消息,根據不同的指令執行相應的工作。筆者設計返回的消息是一個列表,如“[‘sms,'敲門']”表示有人敲門,“[‘sms,'哭聲']”表示有孩子在哭。然后根據不同的消息內容執行不同的工作。
讓掌控板用MQTT的方式傳輸音頻是一道難題。雖然一開始筆者就想到用Base64的方式編碼的方法,掌控板編碼,服務器端再解碼,但沒想到長一點的音頻用MQTT方式傳輸系統容易崩潰。為了解決這一問題,筆者一度采用了EasyAPI,即在行空板上搭建Web服務器,用HTTP方式來傳輸音頻。可喜的是,經過多次測試后終于找到了分批傳輸的形式,解決了這一難題。其原理并不復雜,是將一個數據包分成多個較小的數據塊進行傳輸,同時利用校驗和序列號等機制保證數據的完整性和正確性,以提高數據傳輸的可靠性。
筆者借助了Python內置模塊binascii來實現。binascii是二進制數據和ASCII字符串之間轉換的函數,用于將音頻字節碼轉換為base64編碼的ASCII字符串。核心參考代碼如圖2所示。
這段代碼的作用是將大型的音頻文件分成若干個較小的塊,每個塊大小為step_size,然后通過MQTT協議發布到指定的主題“IOT_pubTopic”。在每次循環迭代時,使用binascii.b2a_base64()函數將當前塊轉換為base64編碼的ASCII字符串,其中min(index+step_size,len(audio_bytes))用于確保最后一個塊小于等于step_size大小,以避免在分塊時發生錯誤。
考慮到行空板每進行一次推理都要耗費0.5秒的時間,而終端(掌控板)提交的音頻可能存在“空白”的音頻,筆者還設計了音頻實時檢測的功能。當檢測到聲音高于設定的閾值時(如圖3),才開始記錄音頻數據,并在錄制結束后將音頻發送到服務器進行推理。
行空板端代碼的編寫
在這個系統中,行空板作為服務器(也稱上位機)實時監聽MQTT消息,將有效的語音轉為圖像后進行推理,再發送識別后的結果或者相應的命令。行空板除了能執行模型推理的工作外,還內置了SIoT服務器軟件。SIoT是一款使用非常方便的MQTT服務器,不用設置就能直接使用。
筆者采用MMEdu訓練人工智能模型。將音頻批量轉換為圖片后用MMClassification模塊訓練,也選擇MobileNet網絡模型,然后用model對象的convert方法來轉換為ONNX模型。這一過程在本欄目之前的文章中已經介紹,不再贅述。核心工作是編寫了一個名叫“EasyAIoT”的函數,實時檢測指定的MQTT消息,并將分批的消息內容保存為音頻文件再推理,采用了siot庫(一個簡單的MQTT庫)和onnx推理框架(如圖4)。
為了讓數據預處理變得更加簡單,筆者使用了BaseDT庫。BaseDT庫是專為人工智能的數據預處理開發,其中ImageData內置了常見的計算機視覺模型的轉換參數,輸入SOTA模型的名稱(如MobileNet)就能完成預處理,代碼非常簡潔。參考代碼如圖5所示。
新項目的測試反饋和總結
在完成項目后,筆者對這套新的“AI聽障助手”系統進行了實地測試。整體效果還不錯,行空板能夠同時連接多塊掌控板,運行速度穩定,甚至可以借助其內置的熱點功能,直接和掌控板形成了一個完整的、閉環的智能物聯網系統,即AIoT。雖然掌控板不能直接部署AI推理模型,但是用內置的麥陣設備錄制音頻,再借助其他開源硬件進行識別的方式和常見的智能音箱是一致的。
筆者再次分析了原來的聽障助手項目,認為作者之所以沒有采用掌控板來采集聲音,很可能是誤以為掌控板內置的采集音頻設備是普通聲音傳感器。實際上那是一個微型的麥克風,錄制音頻的效果雖然不如計算機,但用于簡單的語音識別已經綽綽有余。行空板作為服務器,掌控板作為終端,使用物聯網技術將二者結合起來,這將是中小學創客教育中最常見的硬件組合方案。為了降低人工智能模型推理和部署的門檻,筆者會將這一項目的核心代碼繼續優化,最終將實現用圖形化的方式來啟動能夠監聽消息并進行實時推理的物聯網應用。
參考文獻:
[1]謝作如,胡君豪.讓行空板變身為能識別方言的智能音箱[J].中國信息技術教育,2023(01):93-95.
[2]吳俊杰,戴娟,謝作如.中小學AI教育需要怎樣的學習工具[J].中國信息技術教育,2022(12):4-10.
[3]謝作如,程龍愷.當MMEdu遇上行空板——“智能稻草人”項目的后續研究[J].中國信息技術教育,2022(23):77-79.
[4]云天.行空板——“AI助聽器”,讓“聽障者”看到聲音[EB/OL].https://mp.weixin.qq.com/s/LT0M-d4BmgW36BCF-PahiA.