本發(fā)明公開了一種基于嵌入式Linux的便攜式水果品質(zhì)分級系統(tǒng),屬于農(nóng)產(chǎn)品無損檢測技術(shù)領(lǐng)域。
背景技術(shù):
嵌入式系統(tǒng)是以應(yīng)用為中心,軟硬件可裁剪,軟件可固化的專業(yè)計(jì)算機(jī),是21世紀(jì)繼網(wǎng)絡(luò)技術(shù)之后,又一個(gè)新的技術(shù)發(fā)展方向,嵌入式系統(tǒng)支持嵌入式設(shè)備實(shí)現(xiàn)小尺寸、微功耗、低成本和友好的人機(jī)界面,正逐漸開始在各個(gè)行業(yè)得到應(yīng)用。從嵌入式設(shè)備的整體研究來看,歐美發(fā)達(dá)國家嵌入式技術(shù)起步較早,在物流、盤點(diǎn)、抄表、保險(xiǎn)、旅游、衛(wèi)生醫(yī)療和餐飲等行業(yè)都有應(yīng)用,產(chǎn)品較為成熟,功能較為完善,交互性也較好。
目前,激光散射技術(shù)作為一種基于光子吸收和光散射傳播的方法已被越來越多地應(yīng)用于預(yù)測水果品質(zhì),但是研究用的檢測系統(tǒng)都是在PC平臺(tái)下設(shè)計(jì)人機(jī)界面與采集設(shè)備,這種系統(tǒng)存在不易攜帶、成本高等特點(diǎn),利用已有的預(yù)測模型進(jìn)一步開發(fā)商業(yè)化的水果品質(zhì)分級儀的研究還鮮見報(bào)道。針對這一情況,本發(fā)明旨在開發(fā)一種基于嵌入式Linux的便攜式水果品質(zhì)分級儀。
技術(shù)實(shí)現(xiàn)要素:
一種基于嵌入式Linux的便攜式水果品質(zhì)分級系統(tǒng),包括了嵌入式系統(tǒng)的整體規(guī)劃,搭建系統(tǒng)的硬件平臺(tái),并對其進(jìn)行硬件功能擴(kuò)展,其次,在硬件平臺(tái)上建立了嵌入式Linux操作系統(tǒng),軟件系統(tǒng)采用模塊化的程序設(shè)計(jì)思想,系統(tǒng)交互界面采用Python進(jìn)行開發(fā):
(1)一種基于嵌入式Linux的便攜式水果品質(zhì)分級系統(tǒng),主要包括半導(dǎo)體激光發(fā)射器、相機(jī)和鏡頭、電池、開發(fā)板、觸屏顯示屏、SD卡和開關(guān),其中,半導(dǎo)體激光發(fā)射器和相機(jī)呈15°角。將水果樣品緊貼儀器前端開口處,保證儀器內(nèi)部黑暗環(huán)境,在樣品縫合線兩側(cè)采集激光散射圖像,然后用SD卡中編寫的代碼對激光散射圖像進(jìn)行處理,提取圖像特征參數(shù),再調(diào)用已經(jīng)建立的函數(shù)模型進(jìn)行判別,最后在觸摸屏上顯示判別結(jié)果,激光散射圖像、特征參數(shù)、判別結(jié)果都存入SD卡中。
(2)軟件系統(tǒng)采用模塊化的程序設(shè)計(jì)設(shè)計(jì)思想,主要包括控制模塊、圖像處理模塊、模型預(yù)測模塊。其中,控制模塊通過對主板上的GPIO口進(jìn)行操控,從而實(shí)現(xiàn)對顯示器和激光器等外圍設(shè)備的操控,通過USB設(shè)備對相機(jī)進(jìn)行操控。圖像處理模塊實(shí)現(xiàn)了對激光散射圖像上特征參數(shù)的提取并保存到SD卡中相應(yīng)的文件夾。模型預(yù)測模塊實(shí)現(xiàn)了對樣品內(nèi)部品質(zhì)等級的預(yù)測,同時(shí)將結(jié)果保存到SD卡中相應(yīng)的文件夾。
(3)系統(tǒng)交互界面采用Python進(jìn)行開發(fā),導(dǎo)入Tkinter模塊,創(chuàng)建GUI程序的root主窗口,添加組件到GUI程序的root主窗口上,進(jìn)入主事件循環(huán),并綁定組件對應(yīng)的事件,編寫事件代碼,開發(fā)迅速,具有友好的人機(jī)界面,操作簡單。
本發(fā)明的優(yōu)點(diǎn)是:本發(fā)明實(shí)現(xiàn)了將已經(jīng)建立的基于激光散射圖像預(yù)測水果內(nèi)部品質(zhì)的模型,進(jìn)一步開發(fā)商業(yè)化的檢測分級儀器,該便攜式水果品質(zhì)分級系統(tǒng)具有體積小、成本低、操作易、速度快、數(shù)顯化等優(yōu)點(diǎn)
附圖說明
圖1便攜式水果品質(zhì)分級儀的結(jié)構(gòu)圖
圖2開始界面
圖3參數(shù)設(shè)置界面
圖4模型選擇界面
圖5拍攝條件界面
圖6結(jié)果顯示界面
具體實(shí)施方式
針對本發(fā)明是一種基于嵌入式Linux的便攜式水果品質(zhì)分級系統(tǒng),具體實(shí)施過程包括以下3個(gè)部分:
1系統(tǒng)總體設(shè)計(jì)
便攜式水果品質(zhì)分級儀,其基本目的是采集激光圖像,并將采集回來的圖像數(shù)據(jù)進(jìn)行模式識(shí)別、數(shù)據(jù)處理,最后輸出,以滿足實(shí)時(shí)性、便攜性、功能、成本的需求。圖1為便攜式水果品質(zhì)分級儀的結(jié)構(gòu)圖,主要包括外殼(1)、半導(dǎo)體激光發(fā)射器(2)、開發(fā)板(3)、觸屏顯示屏(4)、開關(guān)(5)、SD卡(6)、相機(jī)和鏡頭(7)和電池(8),其中,半導(dǎo)體激光發(fā)射器和相機(jī)呈15°角。便攜式水果品質(zhì)分級儀工作流程如圖2所示,將水果樣品緊貼儀器前端開口處,保證儀器內(nèi)部黑暗環(huán)境,在樣品縫合線兩側(cè)采集激光散射圖像,然后用SD卡中編寫的代碼對激光散射圖像進(jìn)行處理,提取圖像特征參數(shù),再調(diào)用已經(jīng)建立的函數(shù)模型進(jìn)行判別,最后在觸摸屏上顯示判別結(jié)果,激光散射圖像、特征參數(shù)、判別結(jié)果都存入SD卡中。
2軟件設(shè)計(jì)
2.1嵌入式操作系統(tǒng)的選擇
本系統(tǒng)選擇嵌入式Linux作為應(yīng)用系統(tǒng)的操作系統(tǒng)平臺(tái),Linux操作系統(tǒng)是一種性能優(yōu)良并且被廣泛應(yīng)用的32位準(zhǔn)實(shí)時(shí)嵌入式操作系統(tǒng),其特點(diǎn)主要有內(nèi)核高效穩(wěn)定、公開源代碼、可移植性、可裁剪性和支持多任務(wù),適合于構(gòu)建嵌入式圖像處理設(shè)備。
2.2開發(fā)工具的選擇
基于嵌入式Linux平臺(tái)進(jìn)行應(yīng)用程序開發(fā)時(shí),首先要在PC平臺(tái)下開發(fā),因?yàn)榍度胧杰浖痪邆渥灾鏖_發(fā)能力,然后經(jīng)過編譯、鏈接生成目標(biāo)代碼,再通過一定的工具轉(zhuǎn)化呈嵌入式系統(tǒng)中的可執(zhí)行代碼后下載到目標(biāo)環(huán)境中運(yùn)行。
本嵌入式便攜水果品質(zhì)檢測儀的編譯器及調(diào)試工具選擇ADS1.2(ARM Developer Suite)。ADS是ARM公司為嵌入式ARM設(shè)計(jì)的一整套軟件開發(fā)工具,支持包括Windows和Linux在內(nèi)的多種操作系統(tǒng),采用C/C++和Python的混合編程。
2.3軟件模塊開發(fā)
2.3.1控制模塊
2.3.1.1顯示器和激光器的操控
本系統(tǒng)采用的raspberry pi帶有26pin的GPIO口,通過軟件對GPIO口進(jìn)行操控,從而能夠?qū)ν鈬O(shè)備進(jìn)行簡單的邏輯操控。GPIO口的定義如圖3所示,我們使用的顯示器設(shè)備使用了1-26pin,對于激光器的操控使用了39、40pin。在raspberry pi的官方文件中,為python提供了RPi.GPIO的api,使用原理如下:
import RPi.GPIO as GPIO
#定義39針為激光的pin
laser_pin=39
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(laser_pin,GPIO.out)
#將該pin設(shè)置為True,則為高電平,則打開激光器
GPIO.output(laser_pin,True)
#將該pin設(shè)置為False,則為低電平,則關(guān)閉激光器
GPIO.output(laser_pin,F(xiàn)alse)
2.3.1.2相機(jī)的操控
對相機(jī)的操控使用的是USB設(shè)備,上位機(jī)raspberry pi使用的是webcam+libusb開源驅(qū)動(dòng)程序。在raspberry pi對相機(jī)操控的時(shí)候,使用的是Bulk傳輸方式。首先在raspberry pi端向相機(jī)發(fā)送一個(gè)Bulk的令牌請求,告訴從相機(jī)接收(IN)還是返回(OUT)數(shù)據(jù),然后raspberry pi端根據(jù)從相機(jī)在固件中寫好的指令集發(fā)送對應(yīng)指令,從相機(jī)接收到該指令后做相應(yīng)的工作。當(dāng)從相機(jī)完成了指令相應(yīng)的工作以后,raspberry pi設(shè)備再次發(fā)送讀取數(shù)據(jù)的指令,并將方向設(shè)置為OUT,并接收數(shù)據(jù)。
在軟件的層面,我們使用的是開源的libusb作為連接驅(qū)動(dòng),libusb是一個(gè)開源的C的USB驅(qū)動(dòng)程序,并且有C#、Java、python等語言的接口api。使用libusb的python接口api進(jìn)行開發(fā)。在應(yīng)用層面,我們使用了opencv的python的api進(jìn)行開發(fā),使用了面向?qū)ο蟮木幊趟枷耄瑢amera封裝成了一個(gè)類,將對相機(jī)的操作全都封裝成了簡單的方法。為了控制采集速度和處理的速度,我們將單次采集的圖片的分辨率設(shè)置成了320*240。在調(diào)用該類的時(shí)候,默認(rèn)在初始化方法_init_中打開第index臺(tái)相機(jī)。通過read方法,將采集的照片儲(chǔ)存在savepath的路徑下面,為了防止圖片命名重復(fù),使用了日期+時(shí)間戳來進(jìn)行命名。
2.3.2圖像處理模塊
采集完圖像之后,我們需要對圖像進(jìn)行處理。將對圖像處理的方法封裝在了calculate的類之中,通過調(diào)用calculate即可。其中matrix_x_matrix方法用于處理矩陣之間的相互乘法運(yùn)算;get_wavelet方法用于進(jìn)行小波運(yùn)算,是對python的pywt庫的二次封裝;get_imhist方法是用于獲取圖像的直方圖,參考matlab的imhist方法,是對numpy庫的histogram方法的二次封裝。
由于python帶有numpy和pylab庫,可以方便的對數(shù)據(jù)進(jìn)行矩陣運(yùn)算,部分不能完成的矩陣運(yùn)算,仿照matlab的操作原理編寫了tools庫。其中m_dir方法參考了matlab的dir方法,用于返回filepath下面的所有文件列表;m_length方法參考matlab的length方法,用于返回一個(gè)矩陣的長度;m_round方法參考了matlab的round方法,用于返回近似值;m_num2str方法參考了matlab的num2str方法,用于將一個(gè)數(shù)據(jù)進(jìn)行字符串化;m_strcat參考了matlab的strcat的方法,用于將多個(gè)字符串進(jìn)行連接。
4交互界面的開發(fā)及操作
4.1交互界面的開發(fā)
交互界面的開發(fā)采用了python自帶的Tkinter庫,該庫是python的標(biāo)準(zhǔn)Tk GUI工具包的接口,可以在Unix、類Unix平臺(tái)和Windows平臺(tái)里使用,采用了系統(tǒng)原生的窗口風(fēng)格。該庫使用簡單,開發(fā)迅速,執(zhí)行以下步驟基本即可:
·導(dǎo)入Tkinter模塊
·創(chuàng)建GUI程序的root主窗口
·添加組件到GUI程序的root主窗口上
·進(jìn)入主事件循環(huán),并綁定組件對應(yīng)的事件
·編寫事件代碼
4.2操作流程
打開電源,進(jìn)入開始界面(圖2),有“參數(shù)設(shè)置”和“開始采集”兩個(gè)按鈕。點(diǎn)擊開始界面上的“參數(shù)設(shè)置”按鈕,進(jìn)入?yún)?shù)設(shè)置界面(圖3),有“模型選擇”和“拍攝條件”兩個(gè)按鈕。點(diǎn)擊“模型選擇”按鈕后進(jìn)入模型選擇界面(圖4),點(diǎn)擊蘋果后面的下拉按鈕,菜單顯示“紅富士”、“嘎啦”,點(diǎn)擊桃子后面下拉按鈕,菜單顯示“霞脆”、“湖景蜜露”,選擇所需模型后,點(diǎn)擊“確定”,返回到參數(shù)設(shè)置界面,點(diǎn)擊“取消”,可以重新選擇。點(diǎn)擊“拍攝條件”按鈕后進(jìn)入拍攝條件的選擇(圖5),點(diǎn)擊拍攝后的下拉按鈕,菜單顯示“1”“2”“3”“4”“5”“6”“7”“8”“9”“10”,如:選擇“2”即每個(gè)樣品采集兩張圖片,以這兩張圖片的平均值作為該樣品判別等級的數(shù)據(jù)。點(diǎn)擊“確定”,返回到參數(shù)設(shè)置界面,點(diǎn)擊“取消”,可以重新選擇。點(diǎn)擊開始界面上的“開始測試”按鈕,進(jìn)入圖像采集界面(圖6),有“開始測試”和“記憶”兩個(gè)按鈕。點(diǎn)擊“開始測試”按鈕,儀器對樣品進(jìn)行圖像采集,“開始測試”按鈕顯示為“照片采集中”。當(dāng)采集完畢,“照片采集中”按鈕顯示為“照片計(jì)算中”。當(dāng)計(jì)算完畢,在屏幕上顯示判別結(jié)果。點(diǎn)擊“記憶”,顯示上一次的結(jié)果,再點(diǎn)擊“記憶”,顯示上上次的結(jié)果,以此類推。所有測試結(jié)果以水果類別,按測試日期保存在Excel表中,存儲(chǔ)于儀器中的SD卡內(nèi)。