热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

梦晨发自凹非寺量子位报道|公众号QbitAI魔方解不开了怎么办,让程序来帮你。只需用摄像头把魔方的六个面扫描一遍就能直接给出还原步骤。即使你的魔方不是标准配色或房间的
梦晨 发自 凹非寺
量子位 报道 | 公众号 QbitAI

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

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

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

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

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

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

解算结果大概是这样的。

步骤数: 20
复原教程: B2 U2 F' R U D' L' B' U L F U F2 R2 F2 D' F2 D R2 D21. 将魔方的后面旋转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

—  —

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

点这里????关注我,记得标星,么么哒~

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

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

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

科技前沿进展日日相见~



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
author-avatar
张三三
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有