嫌邻居放歌太吵,开发者偷用「树莓派+AI」黑进音箱:干扰音频


编译 | 郑丽媛

出品 | 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 的硬件组成部分如下:

除此之外,还有 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.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 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 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 Bandini 给出了两种方法:

(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 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

转载请注明来源信息

展开阅读全文

页面更新:2024-03-02

标签:音箱   音频   蓝牙   扬声器   开发者   干扰   邻居   模型   屏幕   机器   地址   设备   音乐

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top