嫌鄰居放歌太吵,開發者偷用「樹莓派+AI」黑進音箱:幹擾音頻

智造星球機器人 2024-03-01 19:41:52

編譯 | 鄭麗媛

出品 | CSDN(ID:CSDNnews)

試問:如果你一牆之隔的鄰居總是在每天早上 9 點用藍牙音箱以最大音量播放雷鬼音樂(Reggaeton),你會怎麽辦?

A. 去隔壁敲門,禮貌地請他們降低音量。

B. 聯系物業,要求物業進行溝通處理。

開發者 Roni Bandini 就面對著這樣的處境,而他的選擇是 C:利用 Raspberry Pi(樹莓派)和 AI 技術,做一個能更有創意地處理這種情況的 AI 設備——當這台 Raspberry Pi 檢測到有雷鬼音樂時,它就會幹擾附近的藍牙音箱,使音頻失真以此來屏蔽鄰居的“嘈雜音樂”。

初步設計

根據 Roni Bandini 介紹,他將這款設備取名爲 Reggaeton Be Gone(雷鬼消失)。它主要負責監控房間內的音頻,通過機器學習識別雷鬼音樂,一旦識別就向藍牙音箱觸發通信請求和數據包。

簡而言之,Reggaeton Be Gone 的設計目標是:禁用播放雷鬼音樂的音箱,或者至少要把聲音擾亂到鄰居不得不關閉音箱的程度。有了初步想法後,Roni Bandini 畫了一張設計草圖:

其中,有關 Reggaeton Be Gone 的硬件組成部分如下:

樹莓派 3B+:樹莓派 3B+ 是樹莓派 3 系列中的最新産品,配備 64 位四核處理器,運行頻率爲 1.4GHz,具有雙頻 2.4GHz 和 5GHz 無線局域網、藍牙 4.2/BLE、更快的以太網和通過單獨的 PoE HAT 實現 PoE 功能。

DFRobot 小型 OLED 屏幕:屏幕尺寸爲 0.91 英寸的 OLED 顯示屏,分辨率爲 128x32 像素;采用 IIC 的接口,工作電壓爲 3.3-5V,全屏的最大功耗爲 25Ma 左右。

DFRobot Gravity 數字大按鈕模塊(黃色):兼容 5/3.3V 電壓,適應 Arduino 新一代主控 DUE。

除此之外,還有 USB 麥克風或帶麥克風的聲卡(用來觀察音頻,Roni Bandini 用的是 Behringer Xenyx302)、microSD 卡、5v 3A 電源、母頭連接母頭的跨接線和 3D 打印的外殼正面(Roni Bandini 用的是一塊從破損音頻板上拆下的金屬外殼)。另外,Roni Bandini 還補充道:如果你想用自己的 BT 進行測試,還可以買一個便宜的藍牙音頻接收器電路板。

具體如何實現的?

電路圖

硬件准備到位後,Roni Bandini 首先按照電路圖連接了各部件:

(1)按鈕連接到 GND 和 GPIO 26

(2)OLED 屏幕連接到 VCC、GND、SDA GPIO 2 和 SDL GPIO 3

(3)將聲卡或麥克風連接到 USB

軟件設置

緊接著,他安裝了樹莓派操作系統(https://www.raspberrypi.com/software/),執行 sudo raspi-config,並啓用 SSH 和 i2c。然後進行一些必要設置:

pip install RPi.GPIOpip3 install Adafruit_GPIOsudo apt install gitpip install picamerasudo apt install python3-opencvsudo apt-get install libatlas-base-dev libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-devgit clone https://github.com/edgeimpulse/linux-sdk-pythonsudo python3 -m pip install edge_impulse_linux -i https://pypi.python.org/simplesudo python3 -m pip install numpysudo python3 -m pip install pyaudio

由 i2cdetect -y 1 檢查是否檢測到 OLED 屏幕,還應運行 alsamixer 並按 F6 鍵選擇電路板,按 F4 鍵更改輸入音量。

機器學習

在機器學習(ML)方面,Roni Bandini 對神經網絡進行如下設置:

GTZAN 是非常經典的音樂數據集,但其中沒有雷鬼音樂類別的 AI 分類數據集和模型,于是 Roni Bandini 決定自己訓練模型:“Reggaeton 的經典切分節奏模式可能很吵,但這種特點也非常有利于機器學習。”

爲此,Roni Bandini 下載了幾首雷鬼音樂和其他類型的歌曲,並將其導出爲 16khz wav 格式,上傳到 Edge Impulse 平台(一個用戶友好的開發平台,用于在邊緣設備上進行機器學習,涵蓋 TinyML 學習路徑所需的從數據收集到模型部署的整個流程 )。然後,他爲 Linux ARM 進行了部署,導出 eim 文件並傳入樹莓派,將權限改爲 744。Roni Bandini 表示,不久後他會發布該模型,感興趣的人可以耐心等待。

Python 代碼

Python 代碼將采集音頻樣本,並將其發送至 ML 模型進行推理。如果識別到雷鬼音樂的得分高于阈值,就會觸發兩種 BT 連接方法中的一種。其中一種使用 rfconn,另一種使用 l2ping。日志文件會被保存,而設備運行情況將顯示在 OLED 屏幕上。

設置配置如下,此外 Roni Bandini 提醒:“你最好通過反複試驗來確定最佳方法、封裝尺寸和線數。如果能用帶天線的外置 BT 板,那最好不過了。”

myPath="" # reggaeton be gone folderselectedDeviceId = 1 # id of the USB mic of boardmethod = 1 # 1 to 3 # BT attack methodtargetAddr = "" # mac address of the BT speakerpackagesSize = 0 # packet size, try around 600-1000threadsCount = 0 # how manythreshold = 0.95 # limit to consider that the song is reggaetonmyDelay = 0.1 # delay between connectionsforceFire = 1 # test purposesmodel = ".eim" # model file name

如何獲取 BT 揚聲器的 MAC 地址

針對這個問題,Roni Bandini 給出了兩種方法:

(1)如果是用自己的 BT 揚聲器進行測試,可連接智能手機並從連接信息中查看 MAC;

(2)如果不是,可使用 bluetoothctl 命令,根據信息、rssi 功率等信息猜測目標 MAC 地址。

sudo bluetoothctlscan on

通過第二種方法,開發者將獲得 2 列 MAC 地址,有時還有揚聲器標識符,如 POCKETTUNE、AUVIO 等,然後可執行下面命令,通過 RSSI 信息確定 MAC 地址:

sudo btmon |grep RSSI & sudo hcitool scanand get RSSI

與此同時,名爲 log.txt 的文件將記錄所有設備操作。

最終成果

至此,這款名爲 Reggaeton Be Gone 的設備就大致完成了。Roni Bandini 錄制了一段該設備的最終表現:能准確識別播放的歌曲是否屬于雷鬼音樂,在確定是雷鬼音樂後,成功幹擾了藍牙音箱的音頻。

視頻加載中...

不過,Roni Bandini 也強調 Reggaeton Be Gone 只是一個實驗項目,可基于教學目的用作參考,效仿之前也請“仔細查閱當地法律法規”。此外,該設備起作用的前提是離揚聲器足夠近,且並非所有的藍牙揚聲器都容易受到攻擊。

原文地址:https://www.hackster.io/roni-bandini/reggaeton-be-gone-e5b6e2

DF創客社區地址:https://mc.dfrobot.com.cn/

項目作者:Roni Bandini

文章首發于:CSDN

轉載請注明來源信息

0 阅读:0

智造星球機器人

簡介:感謝大家的關注