嘘!嫌邻居放歌太吵,开发者偷用「树莓派+AI」黑进音箱:干扰音频,使其不得不关
试问:如果你一墙之隔的邻居总是在每天早上 9 点用蓝牙音箱以最大音量播放雷鬼音乐(Reggaeton),你会怎么办?
A. 去隔壁敲门,礼貌地请他们降低音量。
B. 联系物业,要求物业进行沟通处理。
开发者 Roni Bandin 就面对着这样的处境,而他的选择是 C:利用 Raspberry Pi(树莓派)和 AI 技术,做一个能更有创意地处理这种情况的 AI 设备——当这台 Raspberry Pi 检测到有雷鬼音乐时,它就会干扰附近的蓝牙音箱,使音频失真以此来屏蔽邻居的“嘈杂音乐”。
初步设计
根据 Roni Bandin 介绍,他将这款设备取名为 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.GPIO
pip3 install Adafruit_GPIO
sudo apt install git
pip install picamera
sudo apt install python3-opencv
sudo apt-get install libatlas-base-dev libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev
git clone https://github.com/edgeimpulse/linux-sdk-python
sudo python3 -m pip install edge_impulse_linux -i https://pypi.python.org/simple
sudo python3 -m pip install numpy
sudo 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 folder
selectedDeviceId = 1 # id of the USB mic of board
method = 1 # 1 to 3 # BT attack method
targetAddr = "" # mac address of the BT speaker
packagesSize = 0 # packet size, try around 600-1000
threadsCount = 0 # how many
threshold = 0.95 # limit to consider that the song is reggaeton
myDelay = 0.1 # delay between connections
forceFire = 1 # test purposes
model = ".eim" # model file name
如何获取 BT 扬声器的 MAC 地址
针对这个问题,Roni Bandin 给出了两种方法:
(1)如果是用自己的 BT 扬声器进行测试,可连接智能手机并从连接信息中查看 MAC;
(2)如果不是,可使用 bluetoothctl 命令,根据信息、rssi 功率等信息猜测目标 MAC 地址。
sudo bluetoothctl
scan on
通过第二种方法,开发者将获得 2 列 MAC 地址,有时还有扬声器标识符,如 POCKETTUNE、AUVIO 等,然后可执行下面命令,通过 RSSI 信息确定 MAC 地址:
sudo btmon |grep RSSI & sudo hcitool scan
and get RSSI
与此同时,名为 log.txt 的文件将记录所有设备操作。
最终成果
至此,这款名为 Reggaeton Be Gone 的设备就大致完成了。Roni Bandin 录制了一段该设备的最终表现:能准确识别播放的歌曲是否属于雷鬼音乐,在确定是雷鬼音乐后,成功干扰了蓝牙音箱的音频。
不过,Roni Bandin 也强调 Reggaeton Be Gone 只是一个实验项目,可基于教学目的用作参考,效仿之前也请“仔细查阅当地法律法规”。此外,该设备起作用的前提是离扬声器足够近,且并非所有的蓝牙扬声器都容易受到攻击。
参考链接:
https://www.hackster.io/roni-bandini/reggaeton-be-gone-e5b6e2
▶微软不再独宠OpenAI!押注成立10个月、发布GPT-4最强竞品的法国AI独角兽Mistral AI
▶编程二十年,38岁Google程序员万字长文给出16条建议,涉创业、技术淘汰、拿大厂offer...
▶蔡崇信:阿里已重返中国顶级电商轨道;小米汽车最快二季度交付;微软Copilot推出多个定制GPT模型 | 极客头条