夢(mèng)晨 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號(hào) QbitAI
魔方解不開了怎么辦,讓程序來幫你。
只需用攝像頭把魔方的六個(gè)面掃描一遍就能直接給出還原步驟。
即使你的魔方不是標(biāo)準(zhǔn)配色或房間的照明情況特殊也可以通過顏色校準(zhǔn)模式來識(shí)別。
這款荷蘭小哥發(fā)布的3階魔方解算器“Qbr”已經(jīng)在gitHub上開源。
小哥還貼心地把魔方公式中的步驟代號(hào)翻譯為人話,并且支持中文,可以直接按照描述操作。
中文是小哥自學(xué)的,他還給自己起了個(gè)中文名叫“金可明”。
解算結(jié)果大概是這樣的。
步驟數(shù): 20復(fù)原教程: B2 U2 F' R U D' L' B' U L F U F2 R2 F2 D' F2 D R2 D21. 將魔方的后面旋轉(zhuǎn)180°。2. 將魔方的頂層旋轉(zhuǎn)180°。3. 將魔方的前面向左旋轉(zhuǎn)90°。...20.將魔方的底層向右旋轉(zhuǎn)90°。
安裝方法
使用Qbr需要你的電腦裝有Python3,Git以及一個(gè)攝像頭。
安裝方法如下
$ 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
運(yùn)行時(shí)要注意每次運(yùn)行前都要激活虛擬環(huán)境
$ source ./env/bin/activate $ ./src/qbr.py
操作也非常簡(jiǎn)單,可以先按L鍵循環(huán)切換語言到中文,C鍵進(jìn)入/退出顏色校準(zhǔn)模式。
掃描模式下按空格鍵保存識(shí)別好的一個(gè)面,6個(gè)面都識(shí)別好之后按esc就可以在終端里看到結(jié)果了。
△沒有魔方只能拿照片測(cè)試一下
如果需要將結(jié)果翻譯成“人話”,則運(yùn)行時(shí)加入?yún)?shù)“-n”即可。
解魔方的算法方面Qbr直接使用了開源的Kociemba算法庫,該算法可以在20步以內(nèi)還原任意3階魔方。
那么問題來了,如何將攝像頭掃描的圖像輸入給算法呢?
攝像頭如何識(shí)別魔方?
Qbr使用開源的計(jì)算機(jī)視覺庫OpenCV。
首先將圖像灰度化,稍微做一下模糊,然后用邊緣檢測(cè)識(shí)別出魔方小面的邊緣。
把所有邊緣加粗,使屬于一個(gè)邊緣的多條線可以合并。
將邊緣疊加到原始圖像上,使用OpenCV的approxPolyDP函數(shù)識(shí)別出閉合區(qū)域。
再去掉一些多余的輪廓,就得到了魔方的所有小面。
金可明在此基礎(chǔ)上改進(jìn)了形狀檢測(cè)算法,即使魔方小面帶有弧度、不是標(biāo)準(zhǔn)正方形也可以識(shí)別。
掃描好6個(gè)面后計(jì)算每個(gè)小面中顏色的平均值。
然后用CIDE2000算法計(jì)算出每個(gè)小面屬于哪種標(biāo)準(zhǔn)色。
最后按順序?qū)㈩伾幋a合成為一個(gè)字符串就可以作為魔方算法的輸入了。
下一步,機(jī)器人
金可明的GitHub頁面
金可明出生于荷蘭,自學(xué)中文后來到中國(guó)留學(xué)。
除了Qbr外他還編寫過一個(gè)為代碼自動(dòng)生成文檔的Vim插件,并用文檔生成器(Documentation Generator)的英文字母開頭給插件命名為“Doge”,獲得Github 500星好評(píng)。
作為程序員的他看到這個(gè)擰魔方只需要不到1秒的機(jī)器人后決定自己也要做一個(gè)。
△ Jay Flatland于2016年發(fā)布,0.9秒的成績(jī)打破了世界紀(jì)錄
現(xiàn)在軟件部分寫好了,讓我們期待他何時(shí)能做出機(jī)器人吧。
Qbr項(xiàng)目地址:
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
— 完 —
量子位 QbitAI · 頭條號(hào)簽約
關(guān)注我們,第一時(shí)間獲知前沿科技動(dòng)態(tài)
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。