中文 | English

噹啷!TinyML法寶——狗吠終結器

編譯:江宗諭

 

問題

自從我(編按:在此指作者Nathaniel Felleke)的家人開始去上學及工作後,我的狗開始變得瘋狂。在Covid-19隔離期間,她變得很依戀我們,並且產生了所謂的「分離焦慮」。

為解決這個問題,當我們不在家時,必須要有一個裝置以偵測克萊蕾特(編按:這是作者狗狗的名字)的吠叫聲,並以預錄好、我們的聲音回應。

本專案使用的軟硬體及工具:

  • 一塊Arduino Nano 33 BLE Sense開發板
  • 一塊Arduino Nano R3開發板
  • 一塊Adafruit Music Maker FeatherWing擴充板
  • 一個具備AUX(輔助信號端子)的喇叭
  • Edge Impulse Studio
  • Arduino IDE
  • 通用烙鐵

如何打造此裝置

  1. 請按照圖示接線

  1. 上載「ino」檔案至Arduino Nano 33 BLE Sense開發板。
  2. 上載「ino」檔案,至Arduino Nano 33 BLE Sense開發板。
  3. 上載聲音檔案至SD卡
  4. 將Adafruit Music Maker FeatherWing,連接至具備AUX(輔助信號端子)輸入的喇叭。
  5. 插入 Arduino Nano 33 BLE Sense
  6. 靜觀狗吠停止!

訓練模型

既然市面上沒有一個專門針對狗吠偵測且足夠大的資料集,我只好使用一些資料集進行訓練。以下是我使用的資料集,根據模型中的重要性排序:

  1. Google聲音資料集:狗吠
  2. 我自己的資料(狗的吠叫聲,以及房子周圍的背景噪音。)
  3. Google語音命令資料集
  4. 貓和狗的聲音

接著,我使用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授權,使我們得以翻譯這篇文章,特此致謝!若讀者想要進一步閱讀原文,請點擊:閱讀原文,謝謝。)

分享到社群

vMaker編輯部

歡迎各界朋友投稿你的maker故事,不論是個人作品、創客觀點或是創客的經驗分享,我們都十分期待能聽到您的分享。 投稿請至:contact@vmaker.tw

This site or product includes IP2Location LITE data available from https://lite.ip2location.com.