項目分享:Python+OpenCV攝像頭快速解魔方
魔方解不開了怎么辦,讓程序來幫你。
只需用攝像頭把魔方的六個面掃描一遍就能直接給出還原步驟。

即使你的魔方不是標準配色或房間的照明情況特殊也可以通過顏色校準模式來識別。

這款荷蘭小哥發(fā)布的3階魔方解算器“Qbr”已經(jīng)在GitHub上開源。
小哥還貼心的把魔方公式中的步驟代號翻譯為人話,并且支持中文,可以直接按照描述操作。
中文是小哥自學的,他還給自己起了個中文名叫“金可明”。
解算結(jié)果大概是這樣的。
步驟數(shù): 20
復原教程: B2 U2 F' R U D' L' B' U L F U F2 R2 F2 D' F2 D R2 D2
1. 將魔方的后面旋轉(zhuǎn)180°。
2. 將魔方的頂層旋轉(zhuǎn)180°。
3. 將魔方的前面向左旋轉(zhuǎn)90°。
...
20.將魔方的底層向右旋轉(zhuǎn)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
運行時要注意每次運行前都要激活虛擬環(huán)境
$ source ./env/bin/activate
$ ./src/qbr.py
操作也非常簡單,可以先按L鍵循環(huán)切換語言到中文,C鍵進入/退出顏色校準模式。
掃描模式下按空格鍵保存識別好的一個面,6個面都識別好之后按esc就可以在終端里看到結(jié)果了。

△沒有魔方只能拿照片測試一下
如果需要將結(jié)果翻譯成“人話”,則運行時加入?yún)?shù)“-n”即可。
解魔方的算法方面Qbr直接使用了開源的Kociemba算法庫,該算法可以在20步以內(nèi)還原任意3階魔方。
那么問題來了,如何將攝像頭掃描的圖像輸入給算法呢?
攝像頭如何識別魔方?
Qbr使用開源的計算機視覺庫OpenCV。
首先將圖像灰度化,稍微做一下模糊,然后用邊緣檢測識別出魔方小面的邊緣。

把所有邊緣加粗,使屬于一個邊緣的多條線可以合并。

將邊緣疊加到原始圖像上,使用OpenCV的approxPolyDP函數(shù)識別出閉合區(qū)域。

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

金可明在此基礎上改進了形狀檢測算法,即使魔方小面帶有弧度、不是標準正方形也可以識別。

掃描好6個面后計算每個小面中顏色的平均值。

然后用CIDE2000算法計算出每個小面屬于哪種標準色。

最后按順序?qū)㈩伾幋a合成為一個字符串就可以作為魔方算法的輸入了。
下一步,機器人

金可明出生于荷蘭,自學中文后來到中國留學。
除了Qbr外他還編寫過一個為代碼自動生成文檔的Vim插件,并用文檔生成器(Documentation Generator)的英文字母開頭給插件命名為“Doge”,獲得Github 500星好評。
作為程序員的他看到這個擰魔方只需要不到1秒的機器人后決定自己也要做一個。

△ Jay Flatland于2016年發(fā)布,0.9秒的成績打破了世界紀錄
現(xiàn)在軟件部分寫好了,讓我們期待他何時能做出機器人吧。
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
往期推薦
