當前位置: 妍妍網 > 碼農

嫌鄰居放歌太吵,開發者偷用「樹莓派+AI」黑進音箱:幹擾音訊,使其不得不關

2024-03-26碼農

轉自:CSDN(ID:CSDNnews)

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

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

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

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

初步設計

根據 Roni Ban din 介紹,他將這款裝置取名為 Reggaeton Be Gone(雷鬼消失)。它主要負責監控房間內的音訊,透過機器學習辨識雷鬼音樂,一旦辨識就向藍芽音箱觸發通訊請求和封包。

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

其中,有關 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 Bandin 用的是 Behringer Xenyx302)、microSD 卡、5v 3A 電源、母頭連線母頭的跨接線和 3D 打印的外殼正面(Roni Bandin 用的是一塊從破損音訊板上拆下的金屬外殼)。另外,Roni Bandin 還補充道:如果你想用自己的 BT 進行測試,還可以買一個便宜的藍芽音訊接收器電路板。

    具體如何實作的?

    電路圖

    硬體準備到位後,Roni Bandin 首先按照電路圖連線了各部件:

    (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 Bandin 對神經網路進行如下設定:

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

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

    Python 程式碼

    Python 程式碼將采集音訊樣本,並將其發送至 ML 模型進行推理。如果辨識到雷鬼音樂的得分高於閾值,就會觸發兩種 BT 連線方法中的一種。其中一種使用 rfconn,另一種使用 l2ping。日誌檔會被保存,而裝置執行情況將顯示在 OLED 螢幕上。

    設定配置如下,此外 Roni Bandin 提醒:「你最好透過反復試驗來確定最佳方法、封裝尺寸和線數。如果能用帶天線的外接 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 Bandin 給出了兩種方法:

    (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 Bandin 錄制了一段該裝置的最終表現:能準確辨識播放的歌曲是否屬於雷鬼音樂,在確定是雷鬼音樂後,成功幹擾了 藍芽音箱的音訊。

    不過,Roni Bandin 也強調 Reggaeton Be Gone 只是一個實驗計畫,可基於教學目的用作參考,效仿之前也請「仔細查閱當地法律法規」。此外,該裝置起作用的前提是離喇叭足夠近,且並非所有的藍芽喇叭都容易受到攻擊。

    參考連結:

    https://www.hackster.io/roni-bandini/reggaeton-be-gone-e5b6e2

    <END>

    點這裏👇關註我,記得標星呀~

    往期精選:

    GPT中文網站

    可以在國內同ChatGPT直接進行對話,支持GPT4.0 和 AI繪圖,簡直太方便了,今天新註冊的直接送4.0提問次數 !

    感謝你的分享,點贊,在看三