牛逼!解魔方神器GitHub开源了!

梦晨 发自 凹非寺
量子位 报道 | 公众号 QbitAI

魔方解不开了怎么办,让程序来帮你。

只需用摄像头把魔方的六个面扫描一遍就能直接给出还原步骤。

e58d408bbea1d67e6abea538c41a0f8f.png

即使你的魔方不是标准配色或房间的照明情况特殊也可以通过颜色校准模式来识别。

d89208a232609a38660bfc777c894cbc.png

这款荷兰小哥发布的3阶魔方解算器“Qbr”已经在GitHub上开源。

小哥还贴心的把魔方公式中的步骤代号翻译为人话,并且支持中文,可以直接按照描述操作。

中文是小哥自学的,他还给自己起了个中文名叫“金可明”。

解算结果大概是这样的。

步骤数: 20
复原教程: B2 U2 F' R U D' L' B' U L F U F2 R2 F2 D' F2 D R2 D2

1. 将魔方的后面旋转180°。
2. 将魔方的顶层旋转180°。
3. 将魔方的前面向左旋转90°。
...
20.将魔方的底层向右旋转90°。

安装方法

使用Qbr需要你的电脑装有Python3,Git以及一个摄像头。

安装方法如下

$ git clone --depth 1 https://github.com/kkoomen/qbr.git
$ cd qbr
$ python3 -m venv env
$ source ./env/bin/activate
$ pip3 install -r requirements.txt

运行时要注意每次运行前都要激活虚拟环境

$ source ./env/bin/activate 
$ ./src/qbr.py

操作也非常简单,可以先按L键循环切换语言到中文,C键进入/退出颜色校准模式。

扫描模式下按空格键保存识别好的一个面,6个面都识别好之后按esc就可以在终端里看到结果了。

95ff3c0b04e386a021a4ee2614f48a21.gif

没有魔方只能拿照片测试一下

如果需要将结果翻译成“人话”,则运行时加入参数“-n”即可。

解魔方的算法方面Qbr直接使用了开源的Kociemba算法库,该算法可以在20步以内还原任意3阶魔方。

那么问题来了,如何将摄像头扫描的图像输入给算法呢?

摄像头如何识别魔方?

Qbr使用开源的计算机视觉库OpenCV

首先将图像灰度化,稍微做一下模糊,然后用边缘检测识别出魔方小面的边缘。

260aeae8328b111741c3aae8ecfc7d51.png

把所有边缘加粗,使属于一个边缘的多条线可以合并。

128df88a0b4c6b1231a4bc30bbbcb017.png

将边缘叠加到原始图像上,使用OpenCV的approxPolyDP函数识别出闭合区域。

69a051d5c111efb9ebe58be87c62e069.png

再去掉一些多余的轮廓,就得到了魔方的所有小面。

f2c750ac09eb571555bc4e5bd9ce38bb.png

金可明在此基础上改进了形状检测算法,即使魔方小面带有弧度、不是标准正方形也可以识别。

045f26aad756d1ec3d148c879c7d8271.png

扫描好6个面后计算每个小面中颜色的平均值。

cc71fc709e8b547b35f3b848ac9b1897.png

然后用CIDE2000算法计算出每个小面属于哪种标准色。

a08b462d1c0cc80318cd16b159b7fe2b.png

最后按顺序将颜色编码合成为一个字符串就可以作为魔方算法的输入了。

下一步,机器人

e16ff8d91cf80a75594ac7f298aafd0f.png

金可明出生于荷兰,自学中文后来到中国留学。

除了Qbr外他还编写过一个为代码自动生成文档的Vim插件,并用文档生成器(Documentation Generator)的英文字母开头给插件命名为“Doge”,获得Github 500星好评。

作为程序员的他看到这个拧魔方只需要不到1秒的机器人后决定自己也要做一个。

003c4a613bfd47da654d24187d4f39ce.gif

 Jay Flatland于2016年发布,0.9秒的成绩打破了世界纪录

现在软件部分写好了,让我们期待他何时能做出机器人吧。

Qbr项目地址:
https://github.com/kkoomen/qbr

参考链接:
[1]http://programmablebrick.blogspot.com/2017/02/rubiks-cube-tracker-using-opencv.html
[2]https://www.youtube.com/watch?v=ixTddQQ2Hs4

最后

转发文章并关注公众号:前端开发博客,回复 1024,领取前端进阶资料

  1. 回复「电子书」领取27本精选电子书

  2. 回复「加群」加入前端大神交流群,一起学习进步

  3. 回复「面试」获取 面试 精选文章

b9272c6d3690b743f3707e950f9d9661.png

分享和在看就是最大的支持❤️

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值