项目分享:Python+OpenCV摄像头快速解魔方
共 3207字,需浏览 7分钟
·
2021-04-02 13:21
魔方解不开了怎么办,让程序来帮你。
只需用摄像头把魔方的六个面扫描一遍就能直接给出还原步骤。
即使你的魔方不是标准配色或房间的照明情况特殊也可以通过颜色校准模式来识别。
这款荷兰小哥发布的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就可以在终端里看到结果了。
△没有魔方只能拿照片测试一下
如果需要将结果翻译成“人话”,则运行时加入参数“-n”即可。
解魔方的算法方面Qbr直接使用了开源的Kociemba算法库,该算法可以在20步以内还原任意3阶魔方。
那么问题来了,如何将摄像头扫描的图像输入给算法呢?
摄像头如何识别魔方?
Qbr使用开源的计算机视觉库OpenCV。
首先将图像灰度化,稍微做一下模糊,然后用边缘检测识别出魔方小面的边缘。
把所有边缘加粗,使属于一个边缘的多条线可以合并。
将边缘叠加到原始图像上,使用OpenCV的approxPolyDP函数识别出闭合区域。
再去掉一些多余的轮廓,就得到了魔方的所有小面。
金可明在此基础上改进了形状检测算法,即使魔方小面带有弧度、不是标准正方形也可以识别。
扫描好6个面后计算每个小面中颜色的平均值。
然后用CIDE2000算法计算出每个小面属于哪种标准色。
最后按顺序将颜色编码合成为一个字符串就可以作为魔方算法的输入了。
下一步,机器人
金可明出生于荷兰,自学中文后来到中国留学。
除了Qbr外他还编写过一个为代码自动生成文档的Vim插件,并用文档生成器(Documentation Generator)的英文字母开头给插件命名为“Doge”,获得Github 500星好评。
作为程序员的他看到这个拧魔方只需要不到1秒的机器人后决定自己也要做一个。
△ 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