張鳳
(山東華宇工學院,山東 德州 253034)
可視化是智能機器系統(tǒng)感知外部環(huán)境最主要的方法,也是當今智能識別系統(tǒng)發(fā)展的趨勢所在。外部視覺傳感器采集獲取外部環(huán)境的數(shù)據(jù),通過智能軟件分析系統(tǒng)實現(xiàn)對物體的識別和定位。隨著現(xiàn)代信息技術(shù)的迅速發(fā)展,人們對智能系統(tǒng)的性能提出了更高的要求。目標識別是智能系統(tǒng)視覺部分最基本的功能,色彩與邊緣識別是進一步研究的基礎(chǔ)。
通過對單片機芯片快速處理能力和智能圖像識別的研究,以圖像識別裝置來模擬人的視覺識別。計算機視覺可以將物體轉(zhuǎn)換成圖像信號,然后把結(jié)果傳送到裝置的內(nèi)部芯片,并根據(jù)圖像中像素的排列規(guī)則和像素數(shù)量將其轉(zhuǎn)換成數(shù)字信息、顏色信息等信號。成像系統(tǒng)執(zhí)行這些電信號中的各種操作以獲得目標屬性,然后控制現(xiàn)場設(shè)備以對檢測結(jié)果給出信息結(jié)論。智能圖像采集技術(shù)與工業(yè)機器運動控制技術(shù)緊密相連,是智能工業(yè)控制技術(shù)中的關(guān)鍵技術(shù)。
OpenMV可實現(xiàn)計算機視覺和圖像處理的通用功能,如3D重建、目標分割、目標識別、特征檢測、運動分析、特征跟蹤等,與其他視覺模塊相比,OpenMV具有開放源代碼和低成本的優(yōu)點。OpenMV主要由STM32H7主控芯片和OV7725圖像識別攝像頭組成。此外,OpenMV還具備Python的編寫程序界面,有適合的Python語言來滿足智能機器識別功能的需要。
目標物體的水平距離通過激光測距模塊讀取,轉(zhuǎn)化為距離數(shù)字量傳回Arduino單片機,幾何形狀以及顏色通過OpenMV的攝像頭讀取,并轉(zhuǎn)化為位置數(shù)字量傳回內(nèi)置的STM32H7芯片,Arduino單片機將激光測距模塊讀取的距離數(shù)據(jù)經(jīng)比例計算后得到與物體的距離,最后Arduino單片機將目標物體的形狀、邊長和距離數(shù)據(jù)傳送給手機APP顯示。進入自動尋找目標時,OpenMV根據(jù)目標的坐標數(shù)據(jù)控制舵機轉(zhuǎn)動角度。測量結(jié)果穩(wěn)定后啟動聲音提示,表示當前測量任務(wù)完成,系統(tǒng)總體設(shè)計框圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計框圖
系統(tǒng)的硬件電路由OpenMV攝像頭模塊、語音播報模塊、Arduino Nano模塊、舵機轉(zhuǎn)向器模塊、藍牙模塊、激光測距模塊組成。
OpenMV攝像頭模塊能夠簡單地完成智能圖像識別,它具有低功耗、低成本的特性,通過使用高級語言Python(主要是microPython)就可以實現(xiàn)對硬件底層的訪問和控制。Python中的數(shù)據(jù)庫函數(shù)可以簡單地處理智能裝置識別算法中復雜的輸入輸出問題,可以完全根據(jù)需求來改變OpenMV的識別模式,還可以高效率地使用輸出端口觸發(fā)圖像識別,然后進行圖像算法程序的運行,并對IO引腳的功能進行控制。
語音播報模塊采用的是XY-V17B模塊,它是支持通用異步收發(fā)機通信協(xié)議和支持單個總線通信協(xié)議的語音模塊,其使用串行通信來實現(xiàn)語音播報功能同時還支持內(nèi)存擴展和播報文字。XY-V17B使用的是全雙工串行端口通信,此通信方式采用兩個不同的數(shù)據(jù)線,這樣通信的兩側(cè)能夠同時收發(fā)數(shù)據(jù)。兩側(cè)的工作互不干擾所以沒有時間延遲,可以使發(fā)送方和接收方發(fā)送和接收的內(nèi)容同步。XY-V17B語音模塊中含有多種通信協(xié)議用來傳輸信號,具有自帶的指令模式,使用起來簡單便捷,在使用語音的領(lǐng)域中有著廣泛的應(yīng)用。
系統(tǒng)核心控制器采用Arduino Nano單片機,Arduino Nano是基于Microchip Atmega 328P8芯片的開發(fā)板,它沒有DC電源插座而且采用的是mini USB接口技術(shù),具有防誤插的特性,體積小巧。Arduino Nano中有十多個用于輸入和輸出的引腳,可以通過調(diào)用pin Mode函數(shù)、digital Write函數(shù)和digital Ed函數(shù)來對這些引腳進行控制。這個開發(fā)板的運行可承受的電壓為5 V,其中的引腳接口均可以承受或者提供高達40毫安的電流,每個引腳接口均具有1個20~50 kΩ的內(nèi)部上拉電阻器,每個電阻器默認情況下是斷開的。Arduino Nano芯片內(nèi)部一共有八個模擬輸入串口,每一個模擬輸入串口都可以提供10位字節(jié)的輸入輸出能力。一般情況下它們的電壓為0~5 V,在實際應(yīng)用中可以通過調(diào)用Analog Reference()函數(shù)來調(diào)整電壓上限值,從而通過增強電壓的方式實現(xiàn)對系統(tǒng)輸入的增壓。Arduino Nano中具有和UNO一樣的對外傳輸信號,同時還具有外部的擴展插腳接口。
激光測距模塊采用的是TTL/485,測量范圍為0.05~80 m,激光類型為620~690 nm。激光測距模塊自身發(fā)射紅外光線,由被測物體反射后回到傳感器用模塊內(nèi)置的定時器進行計時,然后根據(jù)內(nèi)置的算法計算出反射物的距離,最后將數(shù)據(jù)通過串口傳回Arduino主控芯片。其優(yōu)點在于對面積較小的物體同樣能夠精準快速地測量出距離,受周圍物體干擾較小。在裝置前端對準被測物體后,主控芯片讀取模塊傳來的距離信息后為尺寸測量做準備。
12 V直流穩(wěn)壓電源通過5 V穩(wěn)壓模塊分別向單片機和OpenMV及其他模塊供電。對各模塊進行測試分析并組合,確定系統(tǒng)能正常運行。整體電路圖如圖2所示。
圖2 系統(tǒng)整體電路圖
CC2541是一款面向藍牙低能耗以及么有2.4 GHz應(yīng)用、功率優(yōu)化的片載系統(tǒng)模塊。CC2541將RF收發(fā)器的出色性能和增強型8051MCU、系統(tǒng)內(nèi)可編程閃存存儲器8KBRAM的優(yōu)異特性和外設(shè)組合在一起。CC2541非常適合應(yīng)用于需要超低能耗的系統(tǒng),運行模式間較短的轉(zhuǎn)換時間使低能耗成為可能。射頻2.4 GHz符合低能耗規(guī)范和么有RF片載系統(tǒng)的要求,支持250 kbps、500 kbps、1 Mbps、2 Mbps的數(shù)據(jù)速率。具有高達1毫瓦每秒的可編程輸出功率、出色的接收器靈敏度,以及可選擇性和阻擋性能。
MicroPython是Python標準庫的精簡部分,對此語言方法進行優(yōu)化刪減之后就可以在單片機運行芯片和有特殊要求的環(huán)境中滿足系統(tǒng)要求。MicroPython還有一些獨特的優(yōu)勢,例如單片機和電腦的交互提示,對數(shù)據(jù)進行正確分析處理,以及對器件進行控制。不光如此,這些優(yōu)異的特性可以實現(xiàn)在單片機內(nèi)部芯片只有256 k的代碼環(huán)境和16 k的讀寫儲存器中流暢運行。MicroPython還可以通過編寫Python語言來對系統(tǒng)模塊以及單片機進行控制和調(diào)試。整體程序流程圖如圖3所示。
圖3 系統(tǒng)軟件流程圖
以系統(tǒng)進行圓形識別為例,主要程序代碼為:
import sensor, image, time
sensor reset ()
sensor set pix format (sensor RGB565)
sensor set frame size (sensor QQVGA)
sensor skip frames (time = 2000)
sensor set auto gain (False) must be turned off for color tracking
sensor set auto white ball (False) must be turned off for color tracking
clock = time clock ()
while (True):
clock tick ()
image = sensor snapshot () lens corr (1.8)
for c in image find circles(threshold = 3500, x margin = 10,y margin = 10,
r margin = 10,
r min = 2, r max = 100, r step = 2):
area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())
statistics = img get statistics(roi=area)像素顏色統(tǒng)計
print(statistics)
L mode(),a mode(),b mode()
If0<statisticsl_mode()<100and0<statistics.a_mode()<127and0<statistics.b_mode()<127:if the circle is red
img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0));識別到的紅色圓形用紅色的圓框出
else:img.draw_rectangle(area, color = (255, 255, 255));將非紅色的圓用白色的矩形框出來
print("FPS %f" % clock.fps())
利用單片機與外圍部件構(gòu)成的非接觸式物體尺寸形態(tài)測量裝置對物品進行測量,重復測量同一平面圖形形狀、邊長、距離數(shù)據(jù)取平均值并計算測量精度。更換目標圖形后重復上述實驗內(nèi)容。
第一步為用測量裝置對與其距離相等的紅色、藍色、綠色物體各測兩次,然后記錄結(jié)果并進行分析。第二步為在中心點對齊的情況下,用測量裝置分別對距離其200厘米、250厘米、300厘米的正方形、圓形、三角形物體測量其形狀及其與測量裝置的距離,接著記錄結(jié)果并進行分析。第三步為在中心點不固定對齊的情況下對測量裝置的自動跟隨精度進行測試,然后重復第二步的操作。第四步為用測量裝置對籃球、排球以及足球進行測試,檢測裝置是否能正確地識別物體。
該非接觸式物體尺寸形態(tài)測量系統(tǒng)通過Arduino Nano最小核心板能夠?qū)崿F(xiàn)對OpenMV、藍牙傳輸模塊、激光測距模塊、語音模塊的連接和調(diào)用。通過外部按鍵控制系統(tǒng)中的OpenMV識別模塊能夠準確識別物體的形狀、顏色、像素和距離,硬件電路實物圖如圖4所示。
圖4 硬件電路實物圖
測量裝置所有測試結(jié)果都可以在手機APP上顯示,blinker是一套專業(yè)且易用物聯(lián)網(wǎng)解決的方案。跨硬件、跨平臺的物聯(lián)網(wǎng)解決方案,提供APP端、設(shè)備端、服務(wù)器端支持,使用云儲存服務(wù)進行數(shù)據(jù)傳輸存儲??捎糜谥悄芗揖印?shù)據(jù)監(jiān)測等領(lǐng)域,可以更好地搭建物聯(lián)網(wǎng)項目。APP界面如圖5所示。
圖5 手機APP顯示頁面
對紅色、藍色、綠色的物體進行顏色識別。在實際測試中,在室內(nèi)燈光干擾下進行紅色這一顏色的識別時,可能是因為測量裝置對色彩闕值計算有重合區(qū)域,發(fā)生過一次錯誤識別的例子,其余測試結(jié)果皆為正確識別。表1為平面物體顏色識別情況。
表1 平面物體顏色識別情況
測量目標物體的形狀、尺寸及其與裝置之間的距離。在中心點對齊的情況下,對不同邊長或半徑的正方形、圓形、三角形分別在距離裝置200厘米、250厘米、300厘米的要求下測試,表2為物體實際參數(shù)及測試結(jié)果。
表2 物體形狀、尺寸及其與裝置的距離
?
在前一次測量的基礎(chǔ)上,在物體中心點不固定對齊的情況下測試裝置的自動跟隨精度。表3為自動跟隨精度測試識別情況。
表3 自動跟隨精度測試識別情況
用裝置對籃球、排球以及足球進行測試,表4給出了球類識別情況。
表4 球類識別情況
測試結(jié)果表明,裝置能夠準確識別目標物形狀、尺寸以及橫向像素值,通過測得的數(shù)據(jù)計算出物體實際橫向長度,經(jīng)多次測試后,測量誤差為±2~3 cm。立體物體識別模式下,可以通過模板匹配準確識別三種球體,并通過激光測距模塊準確測量距離。隨著對系統(tǒng)的不斷調(diào)整,識別程序越來越穩(wěn)定,誤差越來越小。在允許的誤差范圍內(nèi),出色地完成了任務(wù)。
測量誤差首先來自環(huán)境光線的影響,調(diào)試的時間不是固定的,光線有所變化,不同光線下機器所捕捉的顏色會有差別,極易造成誤判。其次是OpenMV模塊自帶像素較低,對尺寸的估計比較粗略,偏差必然是存在的。再者是裝置搭建時存在結(jié)構(gòu)誤差,導致中心點的偏離。前兩者的誤差都能通過軟件得以調(diào)節(jié)。
本文主要研究基于OpenMV對物體顏色、形狀和距離測量的設(shè)計和實現(xiàn)。首先介紹了OpenMV測量裝置在國內(nèi)外的研究情況,然后基于OpenMV的物體顏色形狀分析測量中心系統(tǒng),解釋了軟件流程圖并用Python語言編寫了裝置軟件代碼,最后分析了某些環(huán)境因素發(fā)生變化時系統(tǒng)出現(xiàn)的錯誤。該系統(tǒng)原理簡單,運行穩(wěn)定、可靠,能夠很好地識別物體的形狀、顏色,還能較為準確地測量距離。該系統(tǒng)采用顏色和形狀識別的機器視覺處理技術(shù),并提供基于機器視覺技術(shù)的現(xiàn)有產(chǎn)業(yè)系統(tǒng)的解決方法。
本文設(shè)計的系統(tǒng)以O(shè)penMV模塊作為主要圖像處理技術(shù),并且用Arduino單片機作為下機位進行信息傳輸。通過藍牙模塊實現(xiàn)無線通信,極大地提高了系統(tǒng)傳輸?shù)姆€(wěn)定性。為了滿足各種情況復雜的實際應(yīng)用需求,對物體的測量進行了多次的研究和測試,大大提高了裝置的抗干擾能力。從測量結(jié)果來看,該系統(tǒng)可以適應(yīng)較為嚴格的照明條件,其測量結(jié)果精度高,同時可以在現(xiàn)有基礎(chǔ)上進一步提高系統(tǒng)的距離測量精度,優(yōu)化軟件算法,以進一步提高計算速度。
機器視覺和人工智能處理是緊密相聯(lián)的,從OpenMV創(chuàng)立至今,在它的庫中已經(jīng)儲備了多種處理方式,可滿足各種不同的需求,在人工智能和智能機器視覺中發(fā)揮著重大作用。相信在不久的將來,OpenMV系統(tǒng)將會發(fā)掘出更多的潛力,在人們的生活中發(fā)揮更大的作用。