晓查 发自 凹非寺 
量子位 报道 | 公众号 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

—  —

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

加入AI社群,拓展你的AI行业人脉

量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见~

「树莓派+1万块乐高」打造乐高分类器,树莓派官方转发,网友:我想借来用两天...相关推荐

  1. lisp励遍图块中的实体_lisp励遍图块中的实体_「AutoCAD之图块编辑」八仙过海各显神通——图块编辑方法综述......

    [AutoCAD之图块编辑]八仙过海各显神通--图块编辑方法综述 图块是AutoCAD设计中的重要核心部分之一,在往期也对其中的某些部分进行了扩展介绍,今天要介绍的是与图块有关的编辑方法. 主要分成三 ...

  2. 一个月怎么赚到5万块?

    一个月怎么赚到5万块?我负债累累,想尽快上岸,能教我怎么做吗?-- 最近很多负债的朋友私信我,都是想赚快钱的,老实说,你如果只想着靠别人帮忙就短期翻身的话,基本上不可能,如果有人愿意教你,并承诺你赚钱 ...

  3. 拿两千块钱的薪水要有一万块钱的范儿

    为什么80%的码农都做不了架构师?>>>    拿两千块钱的薪水要有一万块钱的范儿 文/六六(<蜗居>编剧) 这两天各大报章都在刊载我的收入几年翻了三十倍的消息. 我娘今 ...

  4. 「链上乐高」是给资本画的大饼吗?

    导读:将版权生意和链游融合起来正在成为一种趋势.而且,很多厂商不约而同地选择把「链上乐高」作为产品形态,<Cubego>是其中最新入场的选手.这无疑是大胆的尝试,但长期来看,该模式必然面临 ...

  5. 「新房+电商+大数据」如何塑造满意度达 99.8% 的万亿市场领路人?

    新房领域毫无疑问是一个万亿市场,但当问到这个巨无霸领域的 TOP3,大众似乎没有答案,难道万亿级的新房市场,就真没有一个"现象级"的龙头? 目前没有,但即将会有.随着技术(如大数据 ...

  6. 微信、支付宝否认提供「锁定 35 万人」数据;苹果押宝中国 5G 市场;TiDB 4.0.1 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  7. 500万用户 表_500万用户的社交电商平台社群分层运营模型「第219期触电夜话」...

    [第219期触电夜话]500万用户的社交电商平台社群分层运营模型 ​ 第219期触电夜话分享: ★分享主题:500万用户的社交电商平台社群分层运营模型 ★内容大纲: 1.社交电商如何搭建金字塔的社群运 ...

  8. 姚班三兄弟3万块创业八年,旷视终冲刺港股

    作者 | 余洋洋 杨健楷 编辑 | 张丽娟 来源 | CV智识(ID:CVAI2019) 旷视此次 IPO 或将成为整个 AI 行业的信号,不只是" 四小龙"的另外三家--商汤.依 ...

  9. 重磅!CSDN 发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...

    2020 年无疑是特殊的一年,AI 在开年的这场"战疫"中表现出惊人的力量.站在"新十年"的起点上,CSDN发起[百万人学AI]评选活动.我们继续聚焦AI的技术 ...

最新文章

  1. 【DIY】手把手教你 DIY 最便宜的 arduino 温湿度计,详细图文视频教程
  2. Arduino学习笔记07
  3. 【Python CheckiO 题解】Long Repeat
  4. POJ 1200 Crazy Search(RK)
  5. 【MM系列】SAP 关于更改物料的价格控制类型
  6. 【华为云技术分享】【昇腾】【玩转Atlas200DK系列】Atlas 200 DK安装python的hiai库以及opencv
  7. 【主动声呐】——匹配滤波器
  8. 接管客厅第一步:联想智能音箱体验评测
  9. R语言金融基础:tidyquant数据整理(滑窗建模)
  10. 二手书交易系统功能结构图
  11. Linux版主机卫士安装使用
  12. JAVA-pdfBox-纯文件流实现PDF文件加水印后转PDF图片文件下载
  13. 0基础学Java需要多久?
  14. 拿到外卖后秒退单,一连12天吃霸王餐的女子栽了!
  15. 不同的应用场景AGV导航方式分析
  16. 大疆网上测评题库_大疆笔试题
  17. Word邮件合并功能详解:合并后生成多个word文档,删除空白页
  18. 学51单片机,总是感觉学不会该怎么办呢?
  19. uni-app 华为离线推送 Assist_HW: get hms token failed:6003: certificate fingerprint error
  20. 怎么让在线视频播放html,HTML5网页视频强制变速倍速播放

热门文章

  1. ngFor with index作为属性中的值
  2. 如何在Python中捕获SIGINT?
  3. 什么时候使用Java的@Override注释,为什么?
  4. Git叉子实际上是Git克隆吗?
  5. 如何禁用文本选择突出显示
  6. REST中的PUT与POST
  7. PostgreSQL可视化客户端工具
  8. Could not get dialect instance.
  9. CSS属性选择器和部分伪类
  10. phpversion() 与 phpinfo()