編譯:江宗諭
問題
自從我(編按:在此指作者Nathaniel Felleke)的家人開始去上學及工作後,我的狗開始變得瘋狂。在Covid-19隔離期間,她變得很依戀我們,並且產生了所謂的「分離焦慮」。
為解決這個問題,當我們不在家時,必須要有一個裝置以偵測克萊蕾特(編按:這是作者狗狗的名字)的吠叫聲,並以預錄好、我們的聲音回應。
本專案使用的軟硬體及工具:
- 一塊Arduino Nano 33 BLE Sense開發板
- 一塊Arduino Nano R3開發板
- 一塊Adafruit Music Maker FeatherWing擴充板
- 一個具備AUX(輔助信號端子)的喇叭
- Edge Impulse Studio
- Arduino IDE
- 通用烙鐵
如何打造此裝置
- 請按照圖示接線
- 上載「ino」檔案至Arduino Nano 33 BLE Sense開發板。
- 上載「ino」檔案,至Arduino Nano 33 BLE Sense開發板。
- 上載聲音檔案至SD卡
- 將Adafruit Music Maker FeatherWing,連接至具備AUX(輔助信號端子)輸入的喇叭。
- 插入 Arduino Nano 33 BLE Sense
- 靜觀狗吠停止!
訓練模型
既然市面上沒有一個專門針對狗吠偵測且足夠大的資料集,我只好使用一些資料集進行訓練。以下是我使用的資料集,根據模型中的重要性排序:
- Google聲音資料集:狗吠
- 我自己的資料(狗的吠叫聲,以及房子周圍的背景噪音。)
- Google語音命令資料集
- 貓和狗的聲音
接著,我使用Shawn Hymel的「關鍵字發現數據集管理腳本」,將資料預先處理成一秒鐘的聲音檔案,並添加了背景噪音。之後,每一段聲音檔案都被標記為「吠叫」或「其它」。
因許多來自「Google聲音資料集」的音檔並未內含吠叫聲,所以,我也必須藉著聆聽被標記為「其它」的聲音樣本,並根據該聲音樣本是否真為「吠叫」,然後重新分配它們。
我把所有剪輯好的聲音檔案,根據前面所作的標記,上傳至Edge Impulse。之後,我使用Edge Impulse的Eon Tuner(註一),以尋找並訓練最佳模型。
原始聲音檔案被轉換為「梅爾濾波器組能量聲譜圖(Mel-Filterbank Energy Spectrogram)」。什麼是「梅爾濾波器組能量聲譜圖」?它是一種能表現出模型使用的聲音檔案的圖像。而下方圖片顯示,被我標記為「吠叫」或「其它」的原始音檔,看起來並沒有太大的不同,藉由「梅爾濾波器組能量聲譜圖」,使樣本之間的相似性最為明顯。
佈署模型
由Edge Impulse平台,輸出一個可與Arduino Nano 33 BLE Sense開發板一起使用的Arduino函式庫。這個函式庫將處理聲音樣本轉換成聲譜圖,以及模型的推論。
回應狗吠聲
無論何時偵測到狗吠聲,裝置便會隨機播放音軌上的一個音檔,以回應我的狗。克萊蕾特最依戀我媽媽,所以,我們便錄製了她的聲音。而音軌上音檔內容的範圍,從告訴狗停止或告訴克萊蕾特沒關係。
順帶一提的是,我必須使用外部Arduino Nano進行控制,因在Arduino Nano 33 BLE Sense上運作的是Mbed作業系統,它沒有夠快的中斷(Interrupt,註二)以控制音頻(使用Arduino Nano 33 BLE Sense時,音頻非常不穩定)。
若您想更多了解這個專案,歡迎觀看以下由我製作的影片。
註一:Eon Tuner,全名「Edge Optimized Neural Tuner」,顧名思義這是一項AutoML工具,可使系統花時間幫您找出最佳MCU AI模型。
註二:Interrupt,中文翻譯為「中斷」,又稱「插斷」,在電腦科學中是指處理器接收到來自硬體或軟體的訊號,提示發生了某個事件,應予以注意,這種情況就稱為中斷。
(感謝原文作者Nathaniel Felleke授權,使我們得以翻譯這篇文章,特此致謝!若讀者想要進一步閱讀原文,請點擊:閱讀原文,謝謝。)