許立兵,朱啟兵,黃 敏
XU Libing,ZHU Qibing,HUANG Min
江南大學(xué) 輕工過程先進(jìn)控制教育部重點(diǎn)實(shí)驗(yàn)室,江蘇 無錫214122
Key Laboratory of Advanced Process Control for Light Industry,Jiangnan University,Wuxi,Jiangsu 214122,China
水果分級是水果進(jìn)入流通的第一個環(huán)節(jié),直接關(guān)系到水果的包裝、運(yùn)輸、貯藏和銷售的效果和效益[1]。蘋果的采后田間預(yù)分檢是指果農(nóng)在田間對采后蘋果進(jìn)行分級檢測處理的一道工序。它一方面可以幫助果農(nóng)實(shí)現(xiàn)蘋果的分級銷售,提高經(jīng)濟(jì)效益;另一方面,可以減少蘋果在儲藏、運(yùn)輸期間,病害蘋果之間的交叉感染,減少產(chǎn)品損耗;同時可方便下游的生產(chǎn)企業(yè)根據(jù)蘋果的田間分檢結(jié)果,采取有針對性的儲存、加工、分級等工藝,達(dá)到增加企業(yè)競爭力,提高經(jīng)濟(jì)效益目的[2-3]。由于潛在的巨大經(jīng)濟(jì)效益,蘋果的采后田間預(yù)分檢被認(rèn)為是未來10 年內(nèi)對蘋果產(chǎn)業(yè)具有重大影響的技術(shù)之一[4]。
盡管國內(nèi)外的研究工作者和相關(guān)企業(yè)在水果品質(zhì)的自動檢測與分級領(lǐng)域做了大量的工作[5-7],以機(jī)器視覺技術(shù)為代表的水果品質(zhì)自動檢測與分級裝置也已被成功開發(fā)和應(yīng)用;但是現(xiàn)有的水果分級設(shè)備多適用于一定規(guī)模的水果生產(chǎn)企業(yè),存在著體積龐大、價格昂貴等不足,無法適用于果農(nóng)在田間對蘋果的預(yù)分檢。針對這一問題,本文主要研究并開發(fā)一套適合于蘋果采后田間預(yù)分級檢測系統(tǒng)。該系統(tǒng)架構(gòu)基于ARM11+Linux 平臺;利用機(jī)器視覺技術(shù)實(shí)現(xiàn)蘋果缺陷、大小的自動檢測分級。該系統(tǒng)成本低,便攜易帶,可實(shí)現(xiàn)蘋果的田間預(yù)分級,對提高蘋果的整體品質(zhì),提高經(jīng)濟(jì)效應(yīng)具有重要的意義。
檢測系統(tǒng)在蘋果傳送運(yùn)動過程中完成對每個蘋果圖像的采集,處理與分析和分離操作。圖1 為系統(tǒng)檢測平臺原理圖,兩組結(jié)構(gòu)相同的鏈?zhǔn)絺魉蛶? 并排安裝,由鏈輪1 驅(qū)動,傳輸帶帶動滾子3 和滾輪4 運(yùn)動,蘋果在傳輸平臺上滾動向前,攝像頭可以拍攝到蘋果90%以上的表皮圖像。為了減小光照的影響,所有的蘋果都在相同光源6 下檢測,CMOS 圖像傳感器7 安裝在傳送帶垂直正上方,實(shí)時采集傳輸帶上蘋果圖像,ARM11 處理器調(diào)用OpenCV 機(jī)器視覺庫,檢測圖像中的蘋果缺陷和蘋果尺寸,并將檢測結(jié)果發(fā)送到執(zhí)行機(jī)構(gòu)11,執(zhí)行不同等級蘋果的分離操作。
圖1 檢測系統(tǒng)工作原理圖
控制系統(tǒng)以ARM11為控制核心,控制傳輸平臺的運(yùn)動,采集并處理蘋果圖像,并把分級結(jié)果送到執(zhí)行機(jī)構(gòu),實(shí)現(xiàn)對蘋果的分級??刂葡到y(tǒng)的硬件部分,主要包括ARM11 處理器及存儲器模塊,圖像采集模塊,步進(jìn)電機(jī)及驅(qū)動模塊,顯示模塊。此外還包括開關(guān)電源模塊,調(diào)試接口模塊和執(zhí)行模塊。在軟件部分運(yùn)行Linux2.6.38內(nèi)核,運(yùn)行裁剪時保留了USB 接口,nand flash 驅(qū)動,USB 攝 像 頭 驅(qū) 動,yaffs2 文 件 系 統(tǒng) 等;Bootloader 在u-boot1.6.1 的基礎(chǔ)上,采用Nand 啟動;同時利用nfs與主機(jī)完成通信。在linux 下編譯配置QT Creator2.4,Cmake交叉編譯OpenCV2.3.1,并移植到Tiny6410 中[8]。系統(tǒng)的整體結(jié)構(gòu)如圖2 所示。
圖2 系統(tǒng)總體結(jié)構(gòu)圖
系統(tǒng)采用ARM11 芯片(三星S3C6410)作為主處理器的嵌入式核心板,該CPU 基于ARM1176JZF-S 核設(shè)計,主頻533 MHz,最高可達(dá)667 MHz,256 MB DDR RAM,32 bit 數(shù)據(jù)總線,可以滿足圖片的實(shí)時傳輸和處理要求。
CMOS 圖像傳感器可通過CMOS 技術(shù)將像素陣列與外圍支持電路,集成在同一塊芯片上,與普通的CCD圖像傳感器相比,CMOS 圖像傳感器通過CMOS 技術(shù)將像素陣列與外圍支持電路集成在同一塊芯片上,CMOS具有體積小、重量輕、功耗低、價格低、編程方便、易于控制等優(yōu)點(diǎn)特點(diǎn)。同時,CMOS 圖像采集傳感器可通過I2C、SPI、USB 等接口配置其曝光時間、增益等控制功能,具備編程方便、易于控制的優(yōu)點(diǎn)。因此,本系統(tǒng)選擇CMOS 圖像傳感器作為圖像采集器件。其具體型號為鼎易CMOS,每秒最高可輸出30 幀,最高圖像輸出為640×480 像素,支持USB2.0,兼容1.1。
在Linux 中,視頻設(shè)備也被當(dāng)作設(shè)備文件,可以像普通文件一樣進(jìn)行讀寫訪問,其數(shù)據(jù)來源于視頻設(shè)備/dev/video02。Video4Linux 是Linux 中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動。它為針對視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù)。采集的主要步驟包括[9]:
(1)開啟視頻設(shè)備:fd=open(“/dev/video02”O(jiān)_RDWR),用來打開視頻設(shè)備文件。
(2)獲取設(shè)備信息和圖像信息:通過ioctl 中的標(biāo)識符VIDIO_QUERYCAP、VIDIOC_CROPCAP、VIDIOC_S_CROP,獲取設(shè)備驅(qū)動功能,設(shè)置視頻圖像信息。
(3)初始化圖像參數(shù):通過ioctl 中標(biāo)識符VIDIOC_S_FMT。設(shè)置制式:PAL 或者NSTC;設(shè)置幀的格式:圖像的寬和高,存儲類型等。
(4)設(shè)置緩存區(qū)并建立內(nèi)存映射:通過ioctl 中的標(biāo)識符VIDIOC_REQBUFS 函數(shù)獲取攝像頭存儲緩沖區(qū)的幀信息,調(diào)用mmap 將攝像頭對應(yīng)的設(shè)備文件映射到內(nèi)存中。由于mmap 方式截取圖像把設(shè)備文件映射到內(nèi)存中,繞過了內(nèi)核緩存區(qū),從而實(shí)現(xiàn)加速I/O 訪問的目的。
(5)捕獲一幀并送到緩沖區(qū):通過ioctl 中的標(biāo)識符VIDIOC_DQBUF,出隊列以取得已采集數(shù)據(jù)的幀緩沖,取得原始采集數(shù)據(jù),然后將緩沖重新入隊列尾,可以循環(huán)采集圖像。采集的圖像通過USB 接口進(jìn)行傳輸。
(6)停止視頻的采集并關(guān)閉視頻設(shè)備:通過ioctl 中標(biāo)識符VIDIOC_STREAMOFF 停止視頻的采集,通過close(fd)關(guān)閉視頻設(shè)備。視頻圖像的采集過程如圖3。
圖3 圖像采集流程圖
系統(tǒng)采用四線兩相混合式步進(jìn)電機(jī),型號是57HD3403-21B,步進(jìn)角1.8°,24 V 供電。驅(qū)動器采用東芝TB6560 芯片,6N137 高速光耦隔離,保證高速不失步。該驅(qū)動器24 V 供電,具有自動半流可調(diào),整步、1/2、1/8、1/16 細(xì)分方式功能。控制步進(jìn)電機(jī)的信號共3 個,分別為控制電機(jī)轉(zhuǎn)速信號PWM、方向信號DIR 和使能信號EN。GPF14 口產(chǎn)生可調(diào)的PWM 波,GPK2 口輸出高低電平,EN 接5V 高電平(參見圖4)。
圖4 步進(jìn)電機(jī)控制圖
對于步進(jìn)電機(jī)控制,主要控制電機(jī)的正反轉(zhuǎn)和速度,其中正反轉(zhuǎn)的控制由GPIO 輸出的高低電平來實(shí)現(xiàn),而電機(jī)速度的控制則要產(chǎn)生一個頻率可調(diào)的PWM 脈沖,設(shè)置比較緩存器(TCMPB0)和計數(shù)緩存器(TCNTB0)的值。編寫好的驅(qū)動程序在PC 機(jī)上進(jìn)行交叉編譯,生成pwm.ko,gpio.ko 文件。通過命令#insmod 加載到內(nèi)核中,通過命令#rmmod 可以卸載驅(qū)動模塊。驅(qū)動以模塊方式加載到內(nèi)核中是斷電易失,需要在開發(fā)板的etc/init.d/rcs文件中設(shè)置開機(jī)啟動時加載驅(qū)動模塊[10]。
顯示模塊提供界面顯示,提供用戶和系統(tǒng)的交互,引導(dǎo)用戶完成控制參數(shù)設(shè)置和結(jié)果的實(shí)時顯示。LCD顯示模塊接口中包含了LCD 所用的大部分控制信號(行場掃描,時鐘和使能等)和RGB 數(shù)據(jù)信號。采用了觸摸屏控制芯片ADS7843,配合一個51 單片機(jī),構(gòu)成一個獨(dú)立的四線電阻觸摸屏采集電路,可以實(shí)現(xiàn)更好的數(shù)據(jù)采集,去抖處理。
系統(tǒng)的界面采用Qt 編程實(shí)現(xiàn)。信號和槽用于Qt對象間的通信,在程序中使用connect 函數(shù)來將某個信號和某個槽進(jìn)行關(guān)聯(lián),而信號和槽之間的真正關(guān)聯(lián)是由Qt的信號和槽機(jī)制來實(shí)現(xiàn)[11]。
利用mmap 方式進(jìn)行視頻采集,采用單幀采集,設(shè)置grab.buf.frame=0。在OpenCV 中IplImage 為BGR 格式,而Qt 中QImage 為RGB 格式,需要交換B 和R 通道顯示才正常。利用ioctl(fd,BIOGET_FSCREENINFO,&FINFO),讀取設(shè)備固定信息,并利用ioctl(fd,BIOGET_VSCREENINFO,&VINFO)讀取可變信息,獲得屏幕的分辨率,像素、深度等。再設(shè)置一個指針screen_ptr 指向通過mmap 函數(shù)內(nèi)存映射后分配的首地址。
要把采集到的數(shù)據(jù)繪制到屏幕上,就要對圖像按一定時間周期刷新,系統(tǒng)采用Qtimer 類實(shí)現(xiàn)每35 ms 刷新一次,在調(diào)用paintEvent 重繪視頻幀的函數(shù)使用update,可以解決刷新數(shù)據(jù)屏幕出現(xiàn)明顯的閃爍問題[12]。
通過調(diào)用ioctl傳遞‘+’,‘-’來增加或減少頻率,從而改變電機(jī)的轉(zhuǎn)速,同時在界面上顯示當(dāng)前的pwm 輸出的頻率。通過‘Dir’按鈕,控制GPIO 口輸出高低電平,控制電機(jī)的正反轉(zhuǎn)。交叉編譯生成可執(zhí)行文件motor,拷貝到開發(fā)板bin 下,設(shè)置好運(yùn)行環(huán)境變量,執(zhí)行motor-qws,運(yùn)行QT 程序。
蘋果的檢測與分級算法需要完成對CMOS采集圖像的實(shí)時搜素,以確定該圖像是否包含有完整的蘋果圖像,若有,則需要給出該蘋果的相關(guān)品質(zhì)信息(缺陷、大?。?。目前出現(xiàn)了多種實(shí)時檢測方法,其中由Paul Viola提出,并由Rainer Lienhart 改進(jìn)的基于Haar-like 的Adaboost算法,由于具有良好的識別性能和搜素效率被廣泛使用[13]。因此本設(shè)計利用Adaboost 算法作為蘋果圖像檢測的分類器?;贏daboost 算法的蘋果檢測與分級流程包括樣本訓(xùn)練和檢測兩大部分。在訓(xùn)練部分,需要收集正樣本(包含正常和缺陷的蘋果圖片)和負(fù)樣本(不包含正樣本的圖片);利用積分圖方法快速提取圖像的矩形特征;對提取的每一個矩形特征進(jìn)行弱分類器設(shè)計,并使用Adaboost 算法對弱分類器進(jìn)行選擇和構(gòu)造,并最終形成級聯(lián)分類器。檢測和分級過程就是從待檢測圖像中提取被檢測子窗口,利用訓(xùn)練部分得到的級聯(lián)分類器對每個檢測子窗口中蘋果的位置和范圍。
在OpenCV 中[14],正樣本是由可執(zhí)行文件opencv_createsamples 生成。在實(shí)驗(yàn)中選取150 個典型的蘋果,每個蘋果拍攝4 張圖片,共600 張圖片作為檢測蘋果大小的正樣本。同時讓蘋果碰撞,產(chǎn)生缺陷和疤痕,每個蘋果作出4 個碰撞,共600 張圖片作為檢測缺陷的正樣本,設(shè)置正樣本圖像大小為30×30,使用支持Haar 特性的的opencv_haartraining 來訓(xùn)練,設(shè)置分類器訓(xùn)練的階段數(shù)等參數(shù),最終生成.xml文件,訓(xùn)練過程如圖5 所示。
基于OpenCV的Adaboost算法的目標(biāo)檢測流程如下:
(1)加載訓(xùn)練好的分類器,使用函數(shù)cvLoadHaar-ClassfierCascade 裝載訓(xùn)練好的用于檢測蘋果大小和檢測缺陷的級聯(lián)分類器。
(2)將分類器轉(zhuǎn)化為OpenCV 的內(nèi)部格式。
(3)檢測要用到函數(shù)cvHaarDetectObjects。加載從攝像頭獲取的圖像,并從圖像中檢測目標(biāo),該函數(shù)可以在待檢測圖像中找到包含目標(biāo)物體的矩形區(qū)域,將區(qū)域作為一系列的矩形框返回。
圖5 級聯(lián)分類器的訓(xùn)練流程圖
待檢測的蘋果在傳輸平臺上以0.1 m/s 的速度勻速滾動前進(jìn),CMOS 圖像傳感器離蘋果為50 cm,實(shí)時采集圖片。當(dāng)檢測到蘋果時,返回蘋果的最小外接矩形框,length 是矩形框的長度,width 是矩形框的寬度。蘋果的大小由外接矩形的面積作為判斷依據(jù);同時動態(tài)的檢測蘋果圖像中的缺陷;把檢測結(jié)果送到執(zhí)行機(jī)構(gòu),并由執(zhí)行機(jī)構(gòu)實(shí)現(xiàn)蘋果的大小和缺陷的分離動作。系統(tǒng)檢測每個蘋果不同部位的圖像5 幅(由于蘋果在傳輸平臺上滾動前進(jìn),不同時刻采集的圖像即為蘋果的不同部位),每幅圖像需要的平均時間為60 ms,檢測一個蘋果需要300 ms,基本滿足實(shí)時性的要求。缺陷和大小的檢測系統(tǒng)界面如圖6 所示,大小檢測的系統(tǒng)界面如圖7 所示。
為了驗(yàn)證系統(tǒng)的識別精度,蘋果大小等級采用歐洲聯(lián)盟標(biāo)準(zhǔn),預(yù)分揀初步做三分類。特級蘋果為果徑大于70 mm 且無缺陷;二級蘋果為果徑小于70 mm 且無缺陷;其余為缺陷蘋果。經(jīng)過測試,70 mm 的果徑在離鼎易CMOS 攝像頭50cm 處,成像的像素為60×60。本次測試試驗(yàn)中中共挑選100 個特級果,50 個二級果,150 個缺陷蘋果,實(shí)驗(yàn)結(jié)果見表1。
圖6 缺陷檢測界面
圖7 大小檢測界面
表1 各級蘋果的分類精度
從測試結(jié)果可以看出系統(tǒng)對于各級的平均精度為93%,能達(dá)到良好的預(yù)分揀要求。
本文研究并開發(fā)了一套基于嵌入式的蘋果大小和缺陷的檢測系統(tǒng)原型樣機(jī),該系統(tǒng)完成了檢測平臺的控制,圖像的采集,圖像的處理,分級執(zhí)行裝置的控制。該系統(tǒng)成本低,便攜易帶,便于果農(nóng)在田間實(shí)現(xiàn)蘋果的及時預(yù)分級。從性能測試來看,對各級蘋果的平均分類精度為93%,但是這一精度仍有待提高,下一步將結(jié)合缺陷蘋果的生理特征,研究更為恰當(dāng)?shù)娜毕葑R別算法,以提高缺陷蘋果的識別精度。
[1] 饒秀勤.基于機(jī)器視覺的水果品質(zhì)實(shí)時檢測與分級生產(chǎn)線的關(guān)鍵技術(shù)研究[D].杭州:浙江大學(xué),2007.
[2] Warner G.Super-efficient picking system[J].Good Fruit Grower,2009,60(2):28-29.
[3] Warner G.Field sorting could bring a bonus[J].Good Fruit Grower,2009,60(17):16-17.
[4] Mizushima A,Lu R.Cost benefits analysis of In-Field presorting for the apple industry[J].Applied Engineering in Agriculture,2011,27(1):33-40.
[5] 李先鋒,朱偉興,花小明,等.融合形狀和顏色特征的蘋果等級檢測[J].計算機(jī)工程與應(yīng)用,2010,46(25):202-204.
[6] 桂江生.二維水果形狀檢測與分類算法研究[D].杭州:浙江大學(xué),2007.
[7] 蔣益女,徐從富.結(jié)合紋理分析和SVM 的蘋果梗蒂和缺陷識別方法[J].計算機(jī)工程與應(yīng)用,2008,44(1):235-237.
[8] 孫新賀,王曉輝,于月森.一種嵌入式Linux 操作系統(tǒng)的構(gòu)造方法[J].工業(yè)控制計算機(jī),2011,24(1):69-71.
[9] 宋麗華,高珂.嵌入式Linux下USB攝像頭驅(qū)動實(shí)現(xiàn)[J].計算機(jī)工程,2010,36(9):282-284.
[10] 周劍,林游,易凡.基于Linux 的步進(jìn)電機(jī)驅(qū)動及QT 圖形界面[J].電子技術(shù),2010,47(8):81-87.
[11] 邱鐵,周玉,張明壘.Linux環(huán)境下QT4圖形界面與MySQL編程[M].北京:機(jī)械工業(yè)出版社,2012.
[12] 葛琦.嵌入式Linux 的Qt/Embedded 無閃爍繪圖[J].電腦知識與技術(shù),2009,5(16):4291-4293.
[13] 謝紅躍,方昱春,蔡起運(yùn).一種新的改進(jìn)AdaBoost 弱分類器訓(xùn)練算法[J].中國圖象圖形學(xué)報,2009,14(11):2411-2415.
[14] 劉瑞禎,于仕琪.OpenCV 教程-基礎(chǔ)篇[M].北京:航空航天出版社,2007.