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