胡啟迪,熊 剛
(楊凌職業(yè)技術(shù)學(xué)院,陜西 楊凌712100)
在果蔬銷售前,對(duì)其進(jìn)行分類分級(jí),可以顯著提高收益。然而,大量的果蔬人工分類分級(jí)工作是非常費(fèi)力、耗時(shí)且枯燥的,且持續(xù)工作時(shí)間與精確度負(fù)相關(guān),從而難以提升效率,進(jìn)一步降低成本。隨著我國(guó)人口紅利的逐步降低,人工的使用成本也會(huì)逐步提升,逐步降低人工的參與度是目前的主流趨勢(shì)。隨著人工智能,尤其是機(jī)器視覺(jué)方面的發(fā)展,使用機(jī)器代替人工完成果蔬自動(dòng)化分類分級(jí)工作成為了可能。文中對(duì)相關(guān)技術(shù)進(jìn)行分析研究,探索其在果蔬分類分級(jí)工作中的具體應(yīng)用。
目前可用于果蔬分類的機(jī)器視覺(jué)的技術(shù)有很多,這里重點(diǎn)討論P(yáng)ython、OpenCV、OpenMV 三種技術(shù)。
Python 是一種原本用于程序測(cè)試的腳本語(yǔ)言,因此非常易于理解及使用,隨著多年的優(yōu)化發(fā)展,目前已成為人工智能領(lǐng)域的基礎(chǔ)開(kāi)發(fā)語(yǔ)言。其強(qiáng)大性主要得益于具備極為強(qiáng)有力的社區(qū)支持,也就是會(huì)衍生出功能極為全面,效率極高的應(yīng)用庫(kù),從而大幅降低開(kāi)發(fā)者的時(shí)間成本。隨著應(yīng)用范圍的不斷擴(kuò)大,促使人們對(duì)其不斷改進(jìn),從而衍生出了更具針對(duì)性的版本,比如MicroPython。這是為了解決原 Python 版 本無(wú)法對(duì)底層硬件進(jìn)行操作的問(wèn)題,而推出的一個(gè)Python 子集,其在簡(jiǎn)化原有Python 庫(kù)的同時(shí),有效地優(yōu)化和改善了對(duì)底層硬件的支持。因此,使用MicroPython 能夠在保留Python 語(yǔ)法習(xí)慣的同時(shí),對(duì)諸如LED、電機(jī)、傳感器、存儲(chǔ)卡等底層硬件進(jìn)行控制。
總而言之,當(dāng)前的Python 首先是實(shí)現(xiàn)人工智能的通用性語(yǔ)言,其次可以像C、匯編語(yǔ)言一樣控制底層硬件,綜合起來(lái)就是既可以實(shí)現(xiàn)大腦,也可以運(yùn)動(dòng)四肢。
OpenCV 實(shí)際上是一個(gè)開(kāi)源且支持跨平臺(tái)的機(jī)器視覺(jué)庫(kù),可運(yùn)行在如Linux、Android、Windows 以及Mac OS 等常見(jiàn)的操作系統(tǒng)上,并且這一特性也在不斷加強(qiáng)。得益于由大部分的C 函數(shù)及少部分的C++類構(gòu)成,OpenCV 的量級(jí)很輕,運(yùn)行效率也很高。在提供了Python、Ruby、MATLAB 等語(yǔ)言的接口后,大大提升了其通用性,可以實(shí)現(xiàn)圖像處理和機(jī)器視覺(jué)方面的很多通用算法。這些特性使其快速擁有了大量的用戶,開(kāi)源加上廣泛的用戶,使其可以在未來(lái)很長(zhǎng)的一段時(shí)間里不斷的進(jìn)化,已然成為目前最值得期待的機(jī)器視覺(jué)庫(kù)之一。
OpenCV 目前的可應(yīng)用領(lǐng)域非常廣泛,總體可以歸為人機(jī)互動(dòng)、物體識(shí)別、圖像分割、人臉識(shí)別、動(dòng)作識(shí)別、運(yùn)動(dòng)跟蹤、機(jī)器人、運(yùn)動(dòng)分析、機(jī)器視覺(jué)、結(jié)構(gòu)分析、汽車安全駕駛等11個(gè)領(lǐng)域。果蔬分類分級(jí)就屬于其中的物體識(shí)別。
總而言之,OpenCV 是一個(gè)強(qiáng)大的機(jī)器視覺(jué)庫(kù),在其基礎(chǔ)上稍加修改便可以實(shí)現(xiàn)當(dāng)前能夠見(jiàn)到的大部分機(jī)器視覺(jué)功能,且可以和Python、C、JAVA 等語(yǔ)言完美結(jié)合,其必須依托于某個(gè)操作系統(tǒng),需要固定使用于某個(gè)硬件體系下。
OpenMV 是一個(gè)開(kāi)源,低成本,功能強(qiáng)大的微型機(jī)器視覺(jué)模塊。其硬件部分可以簡(jiǎn)單的理解為一個(gè)MCU 加上一個(gè)CCD 傳感器,軟件部分則是類似于OpenCV 的機(jī)器視覺(jué)庫(kù)。OpenMV 中配備了一個(gè) MicroPython 解釋器同時(shí)提供Python 編程接口,通過(guò) Python 腳本語(yǔ)言的程序編制來(lái)完成各項(xiàng)功能的設(shè)計(jì),其中就包含了IO 端口的操控以及讀取文件系統(tǒng)等一系列基本的操作功能,以及OpenMV 提供的機(jī)器視覺(jué)功能。其硬件在不斷的升級(jí),庫(kù)也在不斷地豐富。
目前,OpenMV 上的機(jī)器視覺(jué)算法包括尋找色塊、人臉檢測(cè)、眼球跟蹤、邊緣檢測(cè)、標(biāo)志跟蹤、殘次品篩選等??梢杂脕?lái)實(shí)現(xiàn)非法入侵檢測(cè)、產(chǎn)品的殘次品篩選、跟蹤固定的標(biāo)記物等。其設(shè)計(jì)小巧,便于應(yīng)用到很多嵌入式產(chǎn)品上。
總而言之,OpenMV 是一個(gè)專門用于實(shí)現(xiàn)機(jī)器視覺(jué)的功能模塊,使用方便且靈活,非常適合應(yīng)用于特定的嵌入式設(shè)備上,真實(shí)性能受限于其硬件體系,就目前的發(fā)展情況上來(lái)看并不適合應(yīng)用圖像精度要求很高的場(chǎng)合,相信隨著新版本的推出,會(huì)逐漸改變這一現(xiàn)狀。
這里根據(jù)分類所要達(dá)到的不同目的,將其分為三種場(chǎng)景。結(jié)合以上技術(shù)的特點(diǎn)和各場(chǎng)景下的實(shí)際需求,討論各場(chǎng)景下各種技術(shù)的適用性。
果蔬的分類方式是針對(duì)保鮮期。果蔬的腐敗是具有一定傳導(dǎo)性的,將新鮮的和即將腐敗的果蔬放在一起,會(huì)加速新鮮果蔬的腐敗,從而造成一定的經(jīng)濟(jì)損失。同時(shí),新鮮果蔬與即將腐敗的果蔬在銷售策略及定價(jià)上也有很大的差異。因此,這種分類工作是有一定需求的。
果蔬的保鮮期是需要從多個(gè)維度進(jìn)行判斷的,大致可分為經(jīng)驗(yàn)、機(jī)械、視覺(jué)三個(gè)維度。經(jīng)驗(yàn)是根據(jù)生長(zhǎng)特性去預(yù)估,機(jī)械是通過(guò)掐捏等動(dòng)作物理感知,視覺(jué)則是通過(guò)外顯特征來(lái)判斷??梢钥闯?,機(jī)器視覺(jué)只能從事其中視覺(jué)維度的工作,且需要很高的精確度,投入成本過(guò)大,因此并不適合。實(shí)際上也大多采用經(jīng)驗(yàn)這一維度進(jìn)行分類。
果蔬分類方式是針對(duì)大小及形狀的。通過(guò)形狀的規(guī)則度,半徑的大小分類是果蔬常用的一種分類方法,這種分類方法主要是針對(duì)于不同的終端市場(chǎng),比如個(gè)人與企業(yè),從而提升收益。
利用機(jī)器視覺(jué)實(shí)現(xiàn)這種分類方法,對(duì)其中視覺(jué)傳感器CCD 的精度要求不高,但是識(shí)別效率要求較高。前面提到的OpenCV 以及OpenMV均可以達(dá)到這一要求,但從最終的設(shè)備成本上來(lái)說(shuō),OpenMV 更為適合。
果蔬分類方式是針對(duì)品相的。這種分類方式其實(shí)就是在場(chǎng)景2 的基礎(chǔ)上增加色澤這一判斷維度,主要針對(duì)高端市場(chǎng),也就是將半徑、形狀、色澤都趨近完美的個(gè)體挑選出來(lái),通過(guò)精致的包裝,作為禮品銷售,可以大幅提高收益。
可以看出,該場(chǎng)景下對(duì)機(jī)器視覺(jué)系統(tǒng)色域識(shí)別精度要求是很高的,因?yàn)榭梢源蠓岣呤找妫虼嗽谛屎驮O(shè)備成本上可以做出適當(dāng)讓步。OpenMV 由于硬件的限制,目前配備的CCD器件在色域識(shí)別精度表現(xiàn)上一般,并不適用與這種應(yīng)用場(chǎng)景,相較之下,OpenCV 在硬件上沒(méi)有限制,通過(guò)合理的硬件搭配,是能夠勝任該場(chǎng)景工作的。
基于前面的分析討論,這里基于Python、OpenCV、OpenMV 三種技術(shù),結(jié)合設(shè)計(jì)思路中的場(chǎng)景2 和場(chǎng)景3 分別給出兩種果蔬分類系統(tǒng)的系統(tǒng)框架。
圖1基于OpenMV的系統(tǒng)框架
如圖1所示。適用于場(chǎng)景2的系統(tǒng)框架是基于OpenMV 的。OpenMV 本身就是一個(gè)嵌入式系統(tǒng),且預(yù)留有一定功能的IO口,可以方便的擴(kuò)展顯示及鍵盤,并且同時(shí)控制多個(gè)IO設(shè)備。
整體上看,該系統(tǒng)框架是一個(gè)典型的嵌入式系統(tǒng),可以獨(dú)立運(yùn)行,且成本較低。其中Python 語(yǔ)言用來(lái)控制OpenMV 模塊,再由OpenMV 模塊協(xié)調(diào)其它部分完成分類工作。鍵盤用來(lái)給系統(tǒng)輸入分類過(guò)程中的相關(guān)參數(shù),顯示器用來(lái)顯示分類過(guò)程中的相關(guān)信息,傳送帶用來(lái)運(yùn)送逐個(gè)果蔬,舵機(jī)用來(lái)根據(jù)識(shí)別結(jié)果決定當(dāng)前果蔬去向。
圖2 基于OpenCV的系統(tǒng)框架
如圖2 所示,適用于場(chǎng)景2 的系統(tǒng)框架是基于OpenCV的。OpenCV本身是一個(gè)機(jī)器視覺(jué)庫(kù),因此需要一個(gè)其支持的操作系統(tǒng)運(yùn)行,這里選擇較為通用的PC 平臺(tái)。PC 本身不便于控制外圍設(shè)備,因此通過(guò)一個(gè)MCU來(lái)完成這些工作。
整體上看。該系統(tǒng)框架是一個(gè)典型的上下位機(jī)相結(jié)合的復(fù)合式系統(tǒng),雖然上下位機(jī)都可以用其他設(shè)備替代,但是不能獨(dú)立運(yùn)行,且成本較高。其中Python負(fù)責(zé)從OpenCV中調(diào)用合適的模塊完成攝像頭捕獲圖像的識(shí)別工作,PC將識(shí)別結(jié)果通過(guò)串口發(fā)送至下位機(jī),下位機(jī)MCU根據(jù)結(jié)果控制傳送帶以及舵機(jī)完成最終的分類工作。該系統(tǒng)中的攝像頭和PC 配置均可以根據(jù)實(shí)際需要隨時(shí)調(diào)整,雖然相對(duì)復(fù)雜,但適應(yīng)性很強(qiáng)。
本文對(duì)可用于果蔬分類的機(jī)器視覺(jué)中的三項(xiàng)技術(shù)進(jìn)行了分析研究。綜上所述,在Python 語(yǔ)言的強(qiáng)大支持下,通過(guò)OpenCV 和OpenMV 可以勝任不同場(chǎng)景下的分類工作,該方向的進(jìn)一步研究具有一定的經(jīng)濟(jì)價(jià)值。