利用树莓派构建一个鸟类监测器
这个项目受到arnegiacomo的fugleramme启发。花园旁放置一个麦克风,BirdNET-Go识别听到的声音,而一个大型彩色电子墨水面板嵌入相框中,以古老的自然历史插图形式展示当天的鸟类,每个鸟类的尺寸按其真实体重比例调整。如果你想要一个电子墨水框架,就动手制作吧,相关资料非常详尽。
我原本想为妻子制作一个类似的东西,因为她热爱鸟类,但一些因素让我改变了方向。我抽屉里已经有一台Raspberry Pi 3和一块7英寸的Pi触摸屏,而目前的BirdNET-Go系统建议使用Pi 4或更新型号。大尺寸的电子墨水面板价格昂贵,而且新款Pi的价格也不断上涨。fugleramme的作品主要涵盖北欧鸟类,而我们北美地区的鸟食器上主要喂养家雀、哀鸽和红翅黑鸟。我也很喜欢能轻触一只鸟来查看它是什么种类、我们已记录到多少次探测,以及观察时间的功能。
Plate 197 的命名源自一个奥杜邦(Audubon)的鸟类图鉴,上面画着像我家鸟食器附近常出现的那种家雀。它们是我最喜欢的!
它与传统版本的不同之处在于:
BirdNET-Go 已经超越了 Pi 3 的性能,但 BirdNET 本身仍能稳定运行在 Pi 3 上。因此,Plate 197 并未使用完整的应用程序,而是采用了一个小型 Python 服务:它以 48 kHz 采样率录制 3 秒的音频片段,通过 BirdNET v2.4 进行处理,将检测结果写入 SQLite 数据库,并通过 Chromium 显示的网页提供服务。整个过程中没有音频从屋外传出。
BirdNET 还具备距离模型功能。只需输入纬度、经度和一年中的周数,它就能返回你可能在那里听到的物种。在科罗拉多前山地区,共有 6,522 种鸟类,其中 138 种是可能被听到的。将分类器限制在这 138 种列表中,对所有测试项目的准确率带来了最大提升。
该页面采用深色背景。电子墨水(E-ink)的反光特性类似于纸张,因此使用纸质背景非常合适。液晶屏会发出光线,而奶油色的屏幕则会在夜间变成客厅里的灯。在深色背景下,鸟类的亮度取决于其最近一次被听到的时间。目前有一只鸟的叫声被完全点亮,而另一只自黎明以来就再未被听到的鸟则显得黯淡。常客的叫声依然明亮,因为每次再次鸣叫时,计时器都会重新开始,屏幕会显示当前在场的是谁。这种状态持续一整天,午夜后便清零。
点击一只鸟,面板就会滑出,显示其名称、最后一次被听到的时间、当天被听到的次数以及首次被听到的日期。如果这只鸟是首次出现,或今年首次出现(例如春季回归的红翅黑鸟),一个小横幅会提示,并且当鸟儿抵达时,屏幕上会以红色脉冲形式呈现。
奥杜邦与家雀
这幅艺术作品源自约翰·詹姆斯·奥杜邦的《美国鸟类》,通过照片编辑软件剪裁而成,因此背景为透明。奥杜邦在大多数鸟类名称确立之前就已作画,因此你很难找到用现代名称命名的版画。他的家雀即“红前紫雀”,第197页,由隆在落基山脉探险期间采集的标本绘制而成。因此,我们在科罗拉多州喂食器处看到的家雀,正是该物种最初被描述时所依据的种群,这也正是项目名称的由来。
该软件包含一张奥杜邦(Audubon)列出的前山常见鸟类名称表。其中,金翅雀被称为“雪鸟”,而你想要的“闪光”指的是红冠啄木鸟,因为它的金色啄木鸟是东部地区的鸟类。此外,它还提供了如何制作适合你所在地区鸟类的艺术作品的说明。这些图片属于公共领域,因此操作非常简单:只需下载你喜欢的图片,裁剪后添加到你的树莓派(Pi)上的图片目录中,或在构建镜像之前完成即可。还有一个命令 `earshot species --missing`,用于列出哪些本地鸟类仍需要照片。
运行无头模式
该程序安装在没有键盘和鼠标的桌面上,因此我花费了大量精力确保它完全不需要使用这些设备。
麦克风通过其名称而非ALSA设备编号来选择,因为当其他USB设备插入时,设备编号会发生变化,服务会在重新连接后自动找到它。
如果音频停止传输,系统会重新打开流媒体。如果服务完全挂起,systemd看门狗将重启该服务。
Wi-Fi可通过启动分区上的文本文件进行设置,每次开机都会在该文件中写入一份纯文本报告。如果出现问题,请取出SD卡,插入任意笔记本电脑,并查看报告。
日志仅记录警告信息,因为频繁写入会消耗SD卡的存储寿命。
你可以使用 CustomPiOS 构建一个可直接刷写的镜像,或者在现有的 Pi OS Lite 64 位卡上运行安装脚本。
自行搭建
硬件要求:树莓派 3 或更新型号、树莓派 7 英寸触摸屏、USB 麦克风以及 SmartiPi Touch 2。
由于运行耳语服务时树莓派会变得非常发热,因此如果用 SmartiPi Touch 2 替代,建议配备散热系统。
设置方法
有以下两种方式安装 Plate 197。
安装脚本。使用 Raspberry Pi Imager 将 Raspberry Pi OS Lite(64 位)写入存储卡,并在写入前于 Imager 设置中配置用户名、Wi-Fi 和 SSH,因为最终生成的镜像没有键盘。然后通过 SSH 登录,克隆代码仓库,并运行 sudo deploy/install.sh。该脚本将完成所有安装,下载 BirdNET 模型(约 120MB,仅需一次),开启显示背光驱动程序,并设置三个服务:一个用于监听和识别鸟类,一个用于运行显示屏,还有一个在夜间自动调暗屏幕。重启后即可开始监听。
可直接刷写的镜像。如果你更倾向于构建完整的 SD 卡镜像,distro/build.sh 使用 CustomPiOS 来完成此操作。在组装前,您可以先输入位置、Wi-Fi信息和艺术作品,这样卡片在首次通电时就能正常使用。如果您想制作多张或作为礼物送给他人,这将是更好的选择。
配置
最重要的设置:
位置。BirdNET 会使用你的经纬度来判断哪些鸟类可能出现在你的喂食器附近,因此请将这些设置为靠近你家的位置。
麦克风。该服务通过麦克风名称的一部分来识别设备。earshot 设备列出了它能识别的名称。默认的“USB”选项适用于大多数 USB 麦克风。
你可以不使用键盘更改设置。卡的启动分区中有一个名为 plate197.toml 的文件,任何笔记本电脑都可以打开。关闭 Pi 的电源,取出卡,编辑文件后重新插入即可。Wi-Fi 设置也可以在该文件中完成。
添加图片素材
这些图板并未包含在代码仓库中。奥杜邦(Audubon)的画作年代较久,已进入公共领域,但我在使用的扫描图像来自一个特定的收藏,该收藏要求在展示时注明出处,而我不想再重新分发他人的扫描件。实际上,每个喂食器都会显示不同的鸟类,所以你最终也会自行选择。
在奥杜邦网站上找到对应的图板。许多图板会显示多种鸟类,有时甚至不止一种物种,因此请选择你想要的图像。
将鸟剪裁出来并去除背景,使其变为透明。我使用了 Canva 来完成这一步。
将图像导出时,最长边约设为300像素。全尺寸扫描会占用Pi 3过多内存,可能导致屏幕显示空白。
请使用BirdNET的鸟类名称命名文件,而非Audubon的名称,且以小写加连字符表示:如house-finch.png,而不是crimson-necked-bull-finch.png。自Audubon时代以来,鸟类名称已有所演变,因此这些名称往往无法匹配。全部6,522个名称均存储在labels.txt文件中,该文件随模型下载包提供,位于Pi上的/var/lib/earshot/models/labels.txt目录下。您也可以通过命令行工具进行查询:earshot species可搜索您需要的BirdNET名称。
将文件放入plates文件夹。大约一分钟后即可在屏幕上显示,无需重启。
earshot species --missing 列出了您附近可能尚未有图片的鸟类;而earshot plates --fix则会缩小过大的图像。虽然没有图片的鸟类不会被绘制出来,但仍然会被检测并记录。之后再添加其图像,历史记录就会保留,从您插入相机的那天起就已存在。一些常见的喂食鸟会有简单的手绘轮廓,直到您将其裁剪为止。
如果出现问题
请通过SSH运行earshot check检查。它会测试麦克风、模型、数据库、显示屏、电源和温度,并将每个项目的测试结果分别以独立的行输出。
如果无法通过SSH登录,每次启动时都会在启动分区中写入一个名为plate197-report.txt的纯文本报告。取出卡,插入任意笔记本电脑,然后打开即可查看。
本文编译自hackster.io





