李晉
摘要:圖像識(shí)別技術(shù)的普及和應(yīng)用在工程技術(shù)領(lǐng)域扮演很重要的角色,受制于硬件方面的限制,過(guò)去圖像識(shí)別大多停留在理論研究環(huán)節(jié),隨著高性能微控制器芯片的誕生以及圖像識(shí)別研究的成功,越來(lái)越多的工程應(yīng)用將涉及這一技術(shù)。為了提高高等教育在工程技術(shù)教育的先進(jìn)性,可以直接使用已有開(kāi)源技術(shù)實(shí)現(xiàn)圖像識(shí)別在教學(xué)上的應(yīng)用。
關(guān)鍵詞:工程技術(shù),圖像識(shí)別,微控制器,高等教育
中圖分類號(hào):G640? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):1009-3044(2018)31-0197-03
Exploration of Creative Practical Course on AI Mechanical Arm with Openmv
LI Jin
(National Experimental Teaching Demonstration Engineering Technical Training Center, Shanghai University, Shanghai 200444, China)
Abstract: The popularity and application of image recognition technology plays an important role in the field of engineering technology. Image recognition almost stays in the theoretical research in the past,due to the limitation of hardware.With the birth of high-performance microcontroller chips and the success on image recognition field, Engineering applications will involve this technology increasincreasingly. In order to advance higher education in engineering technology education, it is possible to directly use open source technology to realize the application of image recognition in teaching.
Key words: engineering technology; image recognition; microcontroller; higher education
我國(guó)工程技術(shù)教育領(lǐng)域一直秉承實(shí)踐為主,理論為輔的教學(xué)理念。然而實(shí)際要開(kāi)發(fā)出一門既可以結(jié)合理論研究,又可以有效鍛煉實(shí)踐技術(shù)能力的課程往往具有一定難度。很大程度上在于理論研究不夠成熟完善,或者實(shí)驗(yàn)設(shè)備器材受制于經(jīng)費(fèi)預(yù)算,人員技能素質(zhì)等因素。過(guò)去人工智能學(xué)科中圖像識(shí)別技術(shù)在工程技術(shù)教育領(lǐng)域的推廣發(fā)展就比較遲緩,缺乏具體可以讓學(xué)生使用并進(jìn)行二次開(kāi)發(fā)的實(shí)驗(yàn)套件。本文旨在介紹一種符合圖像識(shí)別研究并可以廣泛用在工程技術(shù)教學(xué)中的實(shí)驗(yàn)?zāi)P头桨福瑸楣こ碳夹g(shù)教學(xué)在創(chuàng)新課程上提供一定參考。
1 圖像識(shí)別在工程技術(shù)教學(xué)中現(xiàn)狀
1.1 工程教育在圖像識(shí)別應(yīng)用中的困境
圖像識(shí)別一般包含三種文字?jǐn)?shù)字識(shí)別,圖形識(shí)別,圖像識(shí)別,物體識(shí)別。其中物體識(shí)別是所有識(shí)別技術(shù)中最復(fù)雜的一部分,不僅需要大量可靠的算法,對(duì)底層硬件要求也很高,傳統(tǒng)研究中,對(duì)圖像識(shí)別也進(jìn)行了“分門別類”,學(xué)術(shù)界就具體哪種算法更有效并沒(méi)有統(tǒng)一的說(shuō)法。在實(shí)踐中,通常也沒(méi)有一種可以包含將幾種算法集合到一起的教學(xué)模型。
圖像識(shí)別在實(shí)踐課程的應(yīng)用中需要具備一定的理論研究基礎(chǔ),目前我國(guó)高等教育一般要求在大學(xué)二三年級(jí)就必須完成修滿實(shí)踐課程的學(xué)分,從這個(gè)意義上,學(xué)生在一年級(jí)就要學(xué)會(huì)甚至理解圖像識(shí)別的算法的核心,放眼從全球的高校來(lái)看,大多數(shù)學(xué)生并不具備這種能力,因此,要完成學(xué)分上的要求又要在實(shí)踐環(huán)節(jié)加入所需的圖像識(shí)別是必須考量的問(wèn)題之一。因此需要開(kāi)發(fā)一種最直觀便于入門的實(shí)驗(yàn)課程。
1.2 openmv和圖像識(shí)別
上文提及圖像識(shí)別對(duì)教學(xué)模型要求較高,因此只要找到一款可以應(yīng)用在圖像識(shí)別,又可以一定程度“忽略”對(duì)理論知識(shí)高度要求,也就可以是一款合適的教學(xué)模型。從這點(diǎn)上,opemmv具備這樣的優(yōu)勢(shì)。openmv是一款低價(jià),可擴(kuò)展支持Python的機(jī)器視覺(jué)模塊。[1]低價(jià)主要體現(xiàn)在相對(duì)其他硬件資源定價(jià)并不高昂,可擴(kuò)展則體現(xiàn)在該模塊包含通用的擴(kuò)展接口引腳可以直接與Arduino進(jìn)行對(duì)接,也可以對(duì)接至其他微控制器芯片,這就為更多創(chuàng)新實(shí)踐課程提供更多選擇的機(jī)會(huì)。其核心是使用Python語(yǔ)言開(kāi)發(fā)的機(jī)器視覺(jué)模塊,Python在編寫(xiě)算法上應(yīng)用比較廣泛,這主要是由于其最大程度上精簡(jiǎn)了一些數(shù)據(jù)類型的表示方法,在圖像識(shí)別算法中,經(jīng)常會(huì)反復(fù)調(diào)用和圖像有關(guān)的數(shù)據(jù)。Python在調(diào)用過(guò)程中將這些數(shù)據(jù)進(jìn)行“打包”在使用它們的時(shí)候就可以以“包”的形式來(lái)傳遞它們。這樣在代碼上可以更直觀地認(rèn)識(shí)這些數(shù)據(jù)。此外,openmv外形體積小巧搭載了圖像識(shí)別所必須的攝像頭,并可以根據(jù)識(shí)別的不同需求更換鏡頭。其外觀如圖1。
圖像識(shí)別上,openmv封裝了用戶想要使用的算法,如與二進(jìn)制字符串特征描述子有關(guān)的BRIEF算法和BRISK算法。這是在應(yīng)用方面最重要的部分,實(shí)際教學(xué)應(yīng)用中,可以最大限度地減少實(shí)驗(yàn)結(jié)果對(duì)算法高度要求,教學(xué)目標(biāo)可以最有效的化繁為簡(jiǎn)使用到圖像識(shí)別技術(shù),當(dāng)然如果對(duì)于一些高級(jí)用戶或研究人員,也可以使用openmv進(jìn)行算法的優(yōu)化。
2 智能機(jī)械手臂實(shí)驗(yàn)?zāi)P驮O(shè)計(jì)
2.1 實(shí)驗(yàn)?zāi)P透艣r
創(chuàng)新實(shí)踐課程既要體現(xiàn)圖像識(shí)別但又要包含傳統(tǒng)工程技術(shù)課程的部分元素,如果脫離當(dāng)前具備已有的實(shí)驗(yàn)器材重新設(shè)計(jì)開(kāi)發(fā)新的實(shí)驗(yàn)?zāi)P蛯⒑馁M(fèi)大量資源,從實(shí)現(xiàn)效率的角度,可以在原有的實(shí)驗(yàn)?zāi)P蜕线M(jìn)行改動(dòng),就可以快速地開(kāi)發(fā)出新的課程。當(dāng)前工程技術(shù)課程包含機(jī)械部分和電子電路控制部分,就6舵機(jī)自由度機(jī)械手臂分析,只是將預(yù)執(zhí)行的動(dòng)作程序存儲(chǔ)在控制器(arduino_uno)中,課程一般將花大量時(shí)間在機(jī)械結(jié)構(gòu)設(shè)計(jì),電子電路設(shè)計(jì)以及程序調(diào)試的工作中。如圖 2虛線框外部分
新的課程在保留原有內(nèi)容基礎(chǔ)上加入openmv也就可以應(yīng)用圖像識(shí)別的有關(guān)實(shí)驗(yàn),由于openmv使用了stm32f765微控制器芯片,其本身具備了有線串行通信的接口,這樣通過(guò)Tx發(fā)送數(shù)據(jù)線和Rx接收數(shù)據(jù)線就可以和原有系統(tǒng)進(jìn)行通信。模型的實(shí)質(zhì)是通過(guò)openmv實(shí)現(xiàn)識(shí)別系統(tǒng),arduino實(shí)現(xiàn)控制系統(tǒng)。整體實(shí)驗(yàn)?zāi)P?,如圖2。
2.2 簡(jiǎn)單的圖形識(shí)別實(shí)驗(yàn)設(shè)計(jì)與實(shí)現(xiàn)
使用openm的主要目的是讓學(xué)生接觸圖像識(shí)別中一些基本數(shù)據(jù),并可以通過(guò)合理的編程實(shí)現(xiàn)圖像識(shí)別的應(yīng)用。智能機(jī)械手臂實(shí)驗(yàn)最終要實(shí)現(xiàn)的是,通過(guò)openmv來(lái)獲取用戶輸入信息,并對(duì)不同位置的物塊進(jìn)行識(shí)別抓取。其主要通過(guò)openmv對(duì)幾個(gè)不同位置的物塊進(jìn)行形狀(物料塊的橫截面形狀設(shè)定為正方形,三角形,圓形)識(shí)別,當(dāng)識(shí)別完成后通過(guò)機(jī)械手臂進(jìn)行抓取并放置在指定的位置,所要抓取物塊的形狀信息來(lái)源于用戶的二維碼。機(jī)械手臂在完成一個(gè)位置識(shí)別后判斷其是否滿足匹配用戶二維碼信息,如果匹配則進(jìn)行抓取,不匹配則切換至下一個(gè)位置進(jìn)行判斷。如果所有位置的物料塊都不滿足二維碼信息,那么機(jī)械臂復(fù)位至初始位置待用戶掃描二維碼信息。其程序工作流程,如圖3:
完成程序流程圖后就可以進(jìn)行代碼編寫(xiě),openmv提供了易于調(diào)試的IDE工具并使用micropython完成整個(gè)代碼,據(jù)程序流程圖識(shí)別部分的偽代碼如下:
import sensor,image
LAB_threshold=(minL,mixL,minA,maxA,minB,maxB)
#初始化openmv,LAB參數(shù)是色彩空間的一種表示方法,形狀識(shí)別前設(shè)置LAB參數(shù)通過(guò)黑白來(lái)辨識(shí)色彩
sensor.reset()
...
#初始化攝像頭
def expand_roi(roi):
# 設(shè)置采樣窗口大小 QQVGA 160*120 ,roi為攝像頭感興趣區(qū)域變量
extra = 5
win_size = (160, 120)
(x, y, width, height) = roi
new_roi = [x-extra, y-extra, width+2*extra, height+2*extra]
#擴(kuò)展感興趣區(qū)域
...
return tuple(new_roi)
scaned_qrcode=None #初始化二維碼信息變量
while(1):
for code in img.find_qrcodes():
#img.find_qrcodes()獲取掃到二維碼信息(正方形,圓形,三角形其中之一)
scaned_qrcode=code[4] #賦值給二維碼變量
...
if is_rect==scaned_qrcode:#攝像頭識(shí)別到的圖形是否為正方形與二維碼信息匹配
servo_seize() #執(zhí)行舵機(jī)抓取并放置物料至指定區(qū)域
servo_ShifttoReset()#舵機(jī)復(fù)位至帶掃二維碼區(qū)域
if is_cir==scaned_qrcode:#是否為圓形
servo_seize()
servo_ShifttoReset()
if is_triangle==scaned_qrcode:#是否為三角形
servo_seize()
servo_ShifttoReset()
else
servo_ShifttoNext()#舵機(jī)切換至一個(gè)區(qū)域進(jìn)行識(shí)別
position++;
if position==destination:#當(dāng)前識(shí)別所在區(qū)域是否為最后一個(gè)識(shí)別區(qū)域
servo_ShifttoReset()
break;#跳出本次for循環(huán)在下一個(gè)區(qū)域重新獲取識(shí)別信息
2.3 實(shí)驗(yàn)?zāi)P驼f(shuō)明及探索
由于實(shí)驗(yàn)?zāi)P蜕婕暗?個(gè)舵機(jī)的控制,在調(diào)試的過(guò)程中應(yīng)注意舵機(jī)轉(zhuǎn)動(dòng)角度過(guò)大避免發(fā)生舵機(jī)內(nèi)部齒輪過(guò)載導(dǎo)致燒毀,其次,舵機(jī)的每個(gè)動(dòng)作使用了arduino進(jìn)行控制,要執(zhí)行的每個(gè)動(dòng)作取決于來(lái)自openmv識(shí)別的結(jié)果,在通過(guò)串行通信時(shí)還要注意兩者在時(shí)間上的銜接,識(shí)別系統(tǒng)和控制系統(tǒng)不能相互干擾,尤其還要注意舵機(jī)轉(zhuǎn)動(dòng)一次的響應(yīng)時(shí)間,必須等待舵機(jī)一次動(dòng)作完成后,openmv在發(fā)出下一條命令實(shí)現(xiàn)整套系統(tǒng)準(zhǔn)確無(wú)誤工作。實(shí)驗(yàn)中openmv僅嘗試了二維碼掃碼獲取用戶輸入信息對(duì)物塊的形狀進(jìn)行識(shí)別,除此之外opmv還可以對(duì)條形碼進(jìn)行識(shí)別,實(shí)驗(yàn)只是簡(jiǎn)單地對(duì)三種形狀進(jìn)行識(shí)別,在進(jìn)階的實(shí)驗(yàn)環(huán)節(jié)可以利用其提供的庫(kù)函數(shù)設(shè)計(jì)加入其他復(fù)雜圖形的識(shí)別,在代碼開(kāi)始處關(guān)閉了色彩識(shí)別是通過(guò)設(shè)定LAB色彩閾值實(shí)現(xiàn),實(shí)驗(yàn)調(diào)試時(shí)物料塊的顏色必須與背景有較大反差(實(shí)驗(yàn)中使用白色背景板),同樣也可以在后續(xù)實(shí)驗(yàn)中加入色彩識(shí)別的實(shí)驗(yàn)環(huán)節(jié),最終測(cè)試結(jié)果符合預(yù)定的實(shí)驗(yàn)?zāi)繕?biāo)結(jié)果,智能機(jī)械臂可以識(shí)別出用戶需要的物塊,實(shí)驗(yàn)?zāi)P蛯?shí)物如圖4。
3 結(jié)論
本文在工程技術(shù)課程中原有實(shí)驗(yàn)?zāi)P突A(chǔ)上加入了與人工智能學(xué)科有關(guān)的圖像識(shí)別技術(shù),文章介紹了openmv識(shí)別系統(tǒng)中一個(gè)圖形識(shí)別功能,并使用該功能完成三種形狀的識(shí)別,同時(shí)介紹了openmv其他圖像識(shí)別的功能為工程技術(shù)創(chuàng)新實(shí)驗(yàn)提供必要的研究基礎(chǔ),通過(guò)本文研究可以深入開(kāi)展人工智能機(jī)器識(shí)別方面的入門認(rèn)知課程,也可以進(jìn)一步利用實(shí)驗(yàn)中未用的功能完成創(chuàng)新課程的開(kāi)發(fā)。
參考文獻(xiàn):
[1] 梅妍玭,傅榮.基于OpenMV的3D定位識(shí)別系統(tǒng)[J].新技術(shù)新工藝,2018(2).
[2] STMicroelectronics,STM32F765XX Datasheet-production data rev6[Z].2017.
[3] Kenneth Reitz,Tanta Schlusser《Python編程之美:最佳實(shí)踐指南》[M].2018.
[4] 周莉莉,姜楓.基于FAST和BRIEF的圖像匹配算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2015(5).
[5] 曲智國(guó).基于圖理論的圖像結(jié)構(gòu)化描述與匹配方法研究[D].國(guó)防科學(xué)技術(shù)大學(xué),2013.
[6] 時(shí)磊,謝曉方,喬勇軍.基于SURF算法和OpenCV的人臉特征檢測(cè)技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2010(2).
[7] Herbert Bay,Andreas Ess,Tinne Tuytelaars,Luc Van Gool. Speeded-Up Robust Features (SURF) . Computer Vision and Image Understanding[J].2007(3).
[8] 米歇爾,麥克羅伯茨,楊繼志,等.Arduino從基礎(chǔ)到實(shí)踐[M].北京:電子工業(yè)出版社,2013.
[9] 惠記莊,羅麗,楊永奎,等. 基于SURF-BRISK的目標(biāo)識(shí)別匹配與定位方法研究[J].長(zhǎng)安大學(xué)學(xué)報(bào):自然科學(xué)版,2016(3).