「树莓派+1万块乐高」打造乐高分类器,网友:我想借来用两天
晓查 发自 凹非寺
量子位 报道 | 公众号 QbitAI
拼乐高最头疼的问题是什么?
当然是苦苦寻找某个形状的积木却找不到。当你兴致勃勃地打开包装时,眼前的一切却是这样,内心会作何感想?
现在好了,国外一位乐高爱好者Daniel West用AI解决了这个难题。他使用自己开发的“乐高分类器”,不到2秒时间就能给一块积木归类。
(注:实际分类速度快一倍,为了方便展示,作者将动图速度减半。)
这个分类器由树莓派和1万块乐高积木组成,耗时2年打造,真的是“用乐高搞定乐高”,堪称最硬核的“套娃”。
我们先来感受一下它庞大的外形:
最近,如此硬核的设备也得到了树莓派官方转发。
Daniel的技术是在前人的基础上完成,但更加先进:它可以识别出所有曾经使用过的乐高积木,甚至是从未见过的积木。
因此Daniel把它叫做世界上第一台“通用乐高分类器”(universal LEGO sorting machine)。
首先把一桶乐高积木倒入分类器中,在履带的传送下,积木分批少量地落入V形槽。
在V形槽的抖动下,积木又被一块块分别抖入传送带中。
传送带上方的摄像头会拍下多帧画面,并在此过程中完成积木种类的识别。
而后,不同形状的积木分装在不同的桶里。
最后再根据拼装的设定,将积木按照需要装入各个物料盒中。
看完这套设备后,有网友表示:能不能借我回去用几天?
其实Daniel所用的技术并不复杂,他甚至还为此写过两篇教程。
这台机器用到的硬件有:树莓派3B+,树莓派摄像头模块V2,9台伺服电机,6台乐高电机。不过,最复杂的硬件应该是Daniel设计的1万块积木的拼装。
首先开始的是图像数据标注工作,Daniel先让机器运行了几天,收集了大约30万张未标记的乐高积木图像。
用手工给30万张图片一一打上标签显然是不切实际的,而相机会给一块积木拍摄10~20张照片,通过打包标注的方法,可以将效率提高10~20倍。
但即便如此,也有上万组照片需要标记。一次次将标签内容填入csv文件显然是个笨办法。而且乐高种类繁多,比如2×2的方块种类就有很多,没必要分得太细。
因此,Daniel决定利用自己的Web开发经验,花几个小时来编写了一个简单的Web应用程序。速度又提高了2~5倍。
即便如此,效率仍然太低。Daniel再次想到用AI“打辅助”,让AI给出TOP-5,自己在App里选中正确的选项,这样每秒5就能标记10张图片,整体效率提升了40~1000倍。
在软件的设计上,Daniel遇到了更大的挑战,那就是树莓派的AI运算能力并不强,如何实现实时的目标检测。
最初,他想到使用YOLO或Faster R-CNN,然而很难在树莓派上达到90fps的处理速度,如果将图像流式传输到PC上处理,网络带宽又会成为性能瓶颈。
Daniel不得不使用“老式”计算机视觉技术——OpenCV库里的MOG2背景扣除器,即使在树莓派3B+上它也能快速处理数据。
但是,直接将视频帧发送到MOG2并不能正常工作。浅灰色和白色积木的亮度与传送带背景过于相似,难以识别。需要做的是在图像传递给MOG2之前增加图像的饱和度。
另外,RGB图像的传输带宽也太高,Daniel只好使用YUV格式将图像带宽压缩一半,并把目标检测框外的像素裁剪掉。
经过重重简化,这套系统达到了70~80fps的处理速度。
最后,在树莓派的官方博客下面的回复中,还有一位高人。他在4年前就设计过一款分类器,给两吨的乐高积木进行分类。
这年头,不懂点AI技术都不敢玩乐高了。
参考链接:
https://www.raspberrypi.org/blog/raspberry-pi-lego-sorter/
https://towardsdatascience.com/how-i-created-over-100-000-labeled-lego-training-images-ec74191bb4ef
https://towardsdatascience.com/a-high-speed-computer-vision-pipeline-for-the-universal-lego-sorting-machine-253f5a690ef4
— 完 —
「树莓派+1万块乐高」打造乐高分类器,网友:我想借来用两天https://m.toutiaocdn.com/i6919699894689169932/?app=news_article×tamp=1611153605&use_new_style=1&req_id=2021012022400501013408516242DE0C57&group_id=6919699894689169932&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share&share_token=fbf63609-7301-4315-b8df-15d2cfa653c4