Avian Visitors
AI 深度解读
Avian Visitors:基于 BirdNET-Pi 与 AI 生成的日式花鸟画鸟类监测站
背景
作者 Teddy(Twitter/X 账号 @WarnerTeddy)最初计划将这个项目作为个人爱好留作私密记录,认为这只是一个快速的午后小项目,不值得长篇大论。然而,他在 Twitter 上分享的一张截图引发了广泛兴趣。他在公寓阳台上安装了一个微型麦克风,用于监听路过的鸟类,并构建了一个网站,在听到鸟鸣时自动生成拼贴画。
由于社区反响热烈,作者决定整理这份简短的技术文档,帮助其他希望监测自家附近鸟类访客的人。该项目是作者一系列“鸟类相关”项目的一部分,旨在通过技术手段将自然观察与数字艺术相结合。
核心内容
Avian Visitors 是 BirdNET-Pi 的一个分支项目。BirdNET-Pi 是一个在树莓派上运行的开源项目,负责音频捕获和物种识别,它利用康奈尔大学(Cornell)开发的 BirdNET 声学分类器,通过连接到树莓派的 USB 麦克风来识别鸟种。Avian Visitors 在此基础上增加了一层 kachō-e(花鸟画) 风格的拼贴覆盖层。
1. 硬件与基础搭建 (BOM & Setup)
构建一个鸟类追踪站相对简单。以下是核心组件和步骤:
- 硬件需求:树莓派(Raspberry Pi)、USB 麦克风、SD 卡。
- API 密钥:
- Gemini API Key:用于生成和重绘插图(免费层级即可)。
- eBird API Key:用于按地区过滤物种,确保生成的图像符合当地生态。
- 系统安装:
- 使用 Raspberry Pi Imager 将 Raspberry Pi OS Lite (64-bit) 刷入 SD 卡。
- 在自定义设置中配置用户名、WiFi SSID/密码、主机名(设为
birdnet),并启用带密码认证的 SSH。 - 将 USB 麦克风插入树莓派,放置在窗边或阳台(作者将树莓派留在室内,麦克风贴在面向阳台的小窗户玻璃上以避风雨)。
- 启动树莓派,通过 SSH 连接并运行安装脚本:
ssh <your-username>@birdnet.local curl -s https://raw.githubusercontent.com/Twarner491/AvianVisitors/avian-visitors/newinstaller.sh | bash
- 注意:安装脚本默认假设拥有免密 sudo 权限。如果系统安全策略较严,需先通过
sudo raspi-config恢复默认设置。
安装过程会自动克隆分支、运行 BirdNET-Pi 的安装程序(包括音频捕获、模型、Web UI 等)、将 AvianVisitors 覆盖层符号链接到 Caddy Web 根目录,并重启。整个过程耗时 20-40 分钟。重启后,拼贴画界面可通过 http://birdnet.local/ 访问,而原始的 BirdNET-Pi 界面仍可通过 http://birdnet.local/index.php 访问。
2. 网络配置与数据转发 (Forwarding)
默认安装仅在内网(LAN)运行。作者提供了三种将数据向外暴露或集成的方案:
-
Cloudflare Tunnel(推荐):
- 提供公共 HTTPS URL,无需端口转发,不暴露家庭 IP。作者使用的
bird.onethree nine.net即为此方案。 - 步骤:在树莓派上安装
cloudflared,进行认证并创建隧道,指向自有域名下的主机名。将配置文件复制到/etc/cloudflared/config.yml并启动服务。 - 安全:可设置 Cloudflare Access(免费层支持 50 用户)作为密码门控,或使用 Caddy 的 HTTP Basic Auth。
- 提供公共 HTTPS URL,无需端口转发,不暴露家庭 IP。作者使用的
-
Home Assistant REST Sensor:
- 将最近的检测结果显示为
sensor.latest_bird,便于集成到自动化流程中(如检测到稀有物种时闪烁灯光或推送通知)。 - 需在
configuration.yaml中添加 REST 传感器配置,指向http://birdnet.local/avian/api/birdnet-api.php?action=recent&hours=1。 - 该端点按出现频率降序返回物种,
species[0]即为最近一小时最常出现的鸟类。
- 将最近的检测结果显示为
-
MQTT Bridge:
- 每分钟轮询最近检测端点,并将新物种以 JSON 格式发布到 MQTT 主题
birdnet/<slug>。 - 适用于希望将检测数据流引入现有 MQTT 代理的服务。
- 需安装
paho-mqtt,复制桥接脚本并配置 systemd 服务。注意:去重仅在内存中进行,服务重启时会重新发布过去一小时的检测数据,下游消费者需具备幂等性。
- 每分钟轮询最近检测端点,并将新物种以 JSON 格式发布到 MQTT 主题
3. 插图生成与拼贴艺术 (Illustrations + Collage)
项目的视觉核心在于其独特的艺术风格。拼贴画包含 450 种北美常见物种的插图,由 Gemini 的 gemini-2.5-flash-image 模型生成。
-
风格定义:江户时代日式花鸟画(kachō-e)木刻版画风格。
-
生成细节:
- 每种鸟类生成两种姿态:栖息(perched)和飞行(in-flight)。
- 提示词模板(位于
avian/scripts/prompt.template.md):- 要求使用自信的墨线(sumi-e)和柔和的水彩渲染。
- 色调:大地色系,包括赭石、靛蓝、朱红、 muted greens(柔和绿)。
- 细节:羽毛用短促的方向性笔触渲染,眼、喙、脚用清晰的墨线绘制。
- 约束:仅鸟类为主体,无背景(除非栖息姿态需要单根稀疏树枝),无边框、无文字、无签名。
- 解剖学准确性:严格匹配物种特征(如翅膀、腿、头、喙、尾的数量和比例)。
- 输出:高分辨率,完全透明背景,干净裁剪,无阴影或纸张纹理。
-
批量生成: 通过编辑提示词模板并运行预生成脚本,可以重绘整个图像集。
export GEMINI_API_KEY='your-key' # 重绘 BirdNET-Pi 模型中的所有物种 python3 ~/BirdNET-Pi/avian/scripts/pregen.py \ --labels ~/BirdNET-Pi/model/labels.txt --force # 或仅过滤 eBird 地区观测到的物种 export EBIRD_API_KEY='your-key' python3 ~/BirdNET-Pi/avian/scripts/pregen.py \ --labels ~/BirdNET-Pi/model/labels.txt --ebird-region "your-region"
关键要点
- 技术栈组合:该项目巧妙结合了边缘计算(树莓派 + USB 麦克风)、开源声学 AI(Cornell BirdNET)、大模型图像生成(Gemini)以及传统艺术风格(kachō-e)。
- 低门槛部署:通过一键安装脚本和详细的配置指南,降低了普通用户搭建专业鸟类监测站的难度。
- 数据集成灵活性:提供了从简单的内网访问到复杂的 Home Assistant 自动化和 MQTT 物联网集成的多种方案,适应不同技术背景的用户需求。
- 艺术化数据呈现:不同于传统的纯数据日志,Avian Visitors 将冰冷的声学识别结果转化为具有审美价值的数字艺术拼贴,提升了用户体验和情感连接。
- 隐私与安全:推荐使用 Cloudflare Tunnel 而非传统的端口转发,有效保护家庭网络 IP 不被暴露,同时提供了多层身份验证选项。
- 可定制性:用户可通过修改 Gemini 提示词模板,轻松改变插图的视觉风格,或根据本地 eBird 数据筛选物种,实现高度个性化的监测体验。
意义与影响
Avian Visitors 不仅仅是一个技术演示,它代表了“公民科学”与
