解魔方神器开源:摄像头看一眼,就能还原全步骤

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

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

解魔方神器开源:摄像头看一眼,就能还原全步骤
即使你的魔方不是标准配色或房间的照明情况特殊也可以通过颜色校准模式来识别。

解魔方神器开源:摄像头看一眼,就能还原全步骤
这款荷兰小哥发布的 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 算法计算出每个小面属于哪种标准色。

解魔方神器开源:摄像头看一眼,就能还原全步骤
最后按顺序将颜色编码合成为一个字符串就可以作为魔方算法的输入了。

下一步,机器人
解魔方神器开源:摄像头看一眼,就能还原全步骤

金可明的 GitHub 页面

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

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

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

解魔方神器开源:摄像头看一眼,就能还原全步骤

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

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

Qbr 项目地址:

https://github.com/kkoomen/qbr