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