查看原文
其他

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

转自:CSDN(ID:CSDNnews)

试问:如果你一墙之隔的邻居总是在每天早上 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.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

推荐阅读  点击标题可跳转

1、总结了90条简单实用的Python编程技巧!

2、汇总17个工作必备的Python自动化代码

3、常见统计概率分布实现(代码)

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存