这是一个典型的美国故事,主人公过上了红酒牛排大 house 的生活,但又遇到了新的烦恼:后院里为鸟儿准备的食盘总是被松鼠光顾。
卑鄙的松鼠正在偷鸟食,让精心布置的喂鸟器成了摆设。
这不是什么新鲜事了:传统的解决方案是将辣椒粉混入鸟食中,然而这并没有奏效。超市里也没有带松鼠挡板的喂鸟器。大多数人可能会在网店购买一个合适形状的挡板——但 Jeremy Merrill 这个人比较头铁,毕竟他是搞机器学习的。
于是一个名叫 Squirrel Soaker 9000 的装置出炉了。
这人使用大约 50 美元成本的零件建造了一个机器,借助人工智能来查看喂食器上面是否有松鼠——当识别到松鼠时,就用花园喷水软管驱赶它。
当然,此处需要一段惊慌失措的松鼠逃跑的视频:
,时长00:46
看看这效果,自从 Jeremy 的 Squirrel Soaker 9000 上线以来,喂食器上的松鼠数量下降了——所有这些都没有伤害到松鼠。Jeremy 表示,这比他的曾祖父——来自加拿大萨斯喀彻温省、俄罗斯的北佛罗里达红脖 60 年前建造的解决方案要安全得多:当年他是直接用 120V 电线串在他的果树上。
那么它是如何工作的呢?
其实很简单,每隔 30 秒钟,摄像头拍摄的图片就会交由 Python 写的软件进行处理。它将图片发送到 AWS Lambda 端点,该端点根据 Jeremy 训练的 fast.ai 模型对照片进行分类,以检测喂食器上是否有松鼠。
如果 AI 模型报告说有松鼠,则摄像头开始录视频,将信号发送到称为 MOSFET 的电子控制开关,它会依次打开电磁阀的 12V 电源几秒钟,这是一个电控水龙头,它连接到一个用拉链系在番茄笼上的花园喷雾器。
松鼠跑了吗?
松鼠驱赶器看起来不错。如果简单统计的话,这个简单的装置平均每三天驱赶一次松鼠,效果看起来还有提升的空间。
在 10 月的某几天,松鼠完全放弃了前来偷吃食物。它们是被松鼠驱赶器击退了,还是被其他什么秋季美食吸引走了?我们不得而知。
到了冬天怎么办?在水会结冰以后,Jeremy Merrill 就把整套系统关闭了,毕竟水管爆裂不是闹着玩的。
它能驱赶鸟吗?
众所周知,AI 模型的图像识别是看概率的,它在松鼠上的准确率是 86.6%,这意味着当 Squirrel Soaker 9000 启动喷洒时,86.6% 的时间里真的有一只松鼠。13.4% 的时间里这是另一回事,通常是一只鸟,有时什么都没有…… 或者有时候是发明家本人。
这个数字是在 15 天内 321 次启动样本中计算得出的,其中 43 起是错误的。人工智能很容易把哀鸽(mourning dove)误认为是松鼠,原因估计是它们和北美啮齿类动物一样又大又灰。不过这也是因为哀鸽是在 Jeremy 收集完训练数据之后才出现的,所以本质上我们是在问一个从未见过哀鸽的愚蠢 AI,哀鸽是麻雀还是松鼠——偶尔人工智能会说它是松鼠。
所以这个 AI 模型还缺点在线更新算法的能力。
松鼠还是鸽子,对于 AI 来说,这是个问题。
事实证明,一株番茄植物在摄像头旁长了个树枝,挡住了松鼠经常出没的喂食器底部。如果你问一个只知道松鼠和喂鸟器的模型,番茄植物是否是松鼠…… 好吧,它认为是的。于是第二天,这株植物长大了,不碍事了。(召回率是 99%,这意味着如果喂食器上有松鼠,它会被弄湿。)
如何让 AI 模型命令水枪喷水?
首先,按照说明书组装电源和 MOSFET 板,确保你的树莓派(Raspberry Pi)已启动并运行并连接到 wifi。
电源连接器输出 12V、5V 和接地线。12V 线和地线连接到 MOSFET「系统」侧的 + 和 - 输入端。或者你也可以通过将 5V 输出连接到 Pi 相机的 5V 引脚并将接地连接到 Pi 的接地引脚,从同一电源为树莓派供电。
然后,将 GPIO 引脚从树莓派连接到 MOSFET 的 C(用于「控制」)输入。当这条线发送 HIGH 电压时,MOSFET 打开,向输出端(「设备」端)发送 12V 电压;当发送 LOW 电压时,MOSFET 关闭,设备没有供电。
此外,你需要使用非常长的电线将设备侧连接到电磁阀,这样才能让电子设备保持在屋内,而软管在花园里。极性无关紧要,因此将正极线连接到任一侧,但请务必并联一个续流二极管以避免突波电压。
现在,你已经完成了电子设备,上管道!
将你的花园软管连接到母对母软管适配器,然后连接到螺线管。螺线管有一个箭头指示水流方向,因此箭头应指向远离供水的方向。你可能需要将管道工胶带粘贴到螺线管的输入螺纹上。螺线管的螺纹是英国标准管,平行螺纹(又名 BSPP,或 G),与美国的花园软管螺纹形成对比。它们大多能用,但并不完美——水管工胶带将有助于阻止漏税。
喷射喷嘴也是一样,记得用胶带。
不要一直让软管保持开启状态。这可能会施加太大的压力,导致泄漏——甚至导致接头爆炸(这里有血的教训)。
现在我们完成了管道。
上软件。你可以通过任何方式向 MOSFET 的控制输入端发送 HIGH 电压。除了用软件控制它之外,作者还设置了一个按钮来手动操作。
模型训练完成后,我们可以按照以下两个 AWS 教程将模型部署到 AWS Lambda:
设备上的软件是一个简单的 Python 脚本,带有一个 while 循环,在白天每 30 秒拍摄一张照片,然后将其发送给机器学习模型,如果它认为是松鼠的置信度超过 70%,则拍摄一张照片( 所以我们可以后期验证是否真的存在松鼠),录制视频(用于 lulz),将时间点记录到数据库中,然后打开水管。
作者还使用了一个很小的 Flask 应用程序,它显示最近的照片和一个 HTML 按钮,用于网络远程手动控制水管。
如何训练 AI 模型
Fastai 通过给 AI 模型提供正负两种图片样本,让 AI 模型学习图像识别的过程变得非常简单——真只用 13 行代码。在识别松鼠的问题上,作者通过在几天内每分钟从窗外拍一张照片来生成训练数据(示例)。随后下载这些图片,并使用 Mac Finder 的幻灯片视图将它们分类到「squirrel」和「not squirrel 文件夹中。
然后,只需要在 Google Colab 上训练这个模型(免费,13 行代码,大约 45 分钟)。
物料列表
- 12V 电磁阀,7.95 美元
- ATX 电源连接器分线套件 - 12V/5V(4 针),15.95 美元
- MOSFET 电源控制套件,5.25 美元
- Melnor Hi-Visibility 可调喷嘴,4.98 美元
- Melnor 金属双母适配器,2.49 美元
- Arducam 自动对焦 Pi 相机,14.99
- 一个二极管
- 水管工胶带
- 蓝色胶带
- 两股十英尺左右的编织线
- 一个树莓派,带一张 SD 卡
- 根据需要分类其他电子零件(焊料、LED、按钮、电阻器、二极管等)
工具列表:
- 烙铁、焊锡
- 万用表
- Google Colab,免费
- Fast.ai / Python
- AWS Lambda
参考教程:
- https://bc-robotics.com/tutorials/controlling-a-solenoid-valve-with-arduino/
- https://bildr.org/2012/03/rfp30n06le-arduino/
- https://www.raspberrypi.com/documentation/computers/os.html
- 最后还有面向松鼠的教程:https://www.youtube.com/watch?v=hFZFjoX2cGg
参考内容:https://jeremybmerrill.com/blog/2022/01/squirrel-soaker-9000-repelling-squirrels-with-ai.htmlhttps://www.reddit.com/r/MachineLearning/comments/sctxqh/p_i_built_a_robot_to_protect_my_birdfeeder_from/