王斌 宋樹祥 王宜瑜 龐中秋



摘? ?要:現(xiàn)存的噴碼檢測系統(tǒng)大多基于工控PC電腦實現(xiàn),其在價格、體積、功耗、靈活性等方面存在著較大的局限性。為此,設(shè)計了一種基于Qt與Arm NN的嵌入式噴碼檢測系統(tǒng),該系統(tǒng)的核心處理器采用Arm cortex-a9,搭載配置有相關(guān)軟件工具的嵌入式linux操作系統(tǒng),采用位置檢測算法來實現(xiàn)軟件檢測待測目標的位置,通過由圖像預(yù)處理、噴碼區(qū)域提取、條形碼識別、字符子串分割、基于卷積神經(jīng)網(wǎng)絡(luò)及caffe框架的噴碼字符識別模型訓(xùn)練、利用Arm NN將識別模型引入到ARM端實現(xiàn)噴碼字符識別、識別結(jié)果處理等過程組成的噴碼檢測算法來實現(xiàn)對噴碼內(nèi)容的檢測。該系統(tǒng)還基于Qt多線程技術(shù)開發(fā)了具有完善系統(tǒng)功能的圖形應(yīng)用程序,便于現(xiàn)場生產(chǎn)人員使用。經(jīng)相關(guān)測試表明該系統(tǒng)有效可行、正檢率高,能夠滿足包裝生產(chǎn)流水線噴碼檢測的實際需求。
關(guān)鍵詞:嵌入式;區(qū)域提取;字符分割;卷積神經(jīng)網(wǎng)絡(luò);Arm NN;字符識別
中圖分類號:TP752? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A
Design and Implementation of Embedded Printing Character
Inspection System Based on Qt and Arm NN
WANG Bin,SONG Shu-xiang?覮,WANG Yi-yu,PANG Zhou-qiu
(College of Electronic Engineering,Guangxi Normal University,Guilin,Guangxi 541004,China)
Abstract:Most of the existing printing character inspection systems are based on industrial PC,but they are limited in price,volume,power consumption and flexibility.To solve this problem,an embedded printing character inspection system based on Qt and Arm NN is designed. The core processor of the system is Arm cortex-a9,which is equipped with embedded Linux operating system with relevant software tools. The position detection algorithm is adopted to realize the location of the target to be tested.By image preprocessing,region extraction,bar code identification,character substring,based on convolutional neural network segmentation and caffe framework of character recognition model training,using Arm NN identification model is introduced into the Arm end realize the recognition of character recognition,the results of treatment process,such as printing inspection algorithm to implement to spurt the code content detection.The system also developed a graphic application program with perfect system function based on Qt multi-thread technology,which is convenient for field production personnel.Relevant tests show that the system is effective and feasible,with high positive inspection rate,and can meet the actual needs of the packaging production line for the printing character inspection.
Key words:embedded;area extraction;character segmentation;convolutional neural network;arm NN;character? recognition
工業(yè)產(chǎn)品的包裝上的噴碼通常包含諸多重要信息包裝在噴碼機噴碼完成之后,由于整個噴印過程中可能出現(xiàn)的機械故障、產(chǎn)線環(huán)境變化、運輸過程磨損等因素,進而造成產(chǎn)品包裝噴印質(zhì)量的變化,導(dǎo)致包裝信息噴印錯誤的產(chǎn)生。包裝信息錯誤的產(chǎn)品將會對企業(yè)的生產(chǎn)成本效率、產(chǎn)品物流倉儲、品牌形象等方面造成一系列不利影響。為了保證噴碼的正確可讀,生產(chǎn)過程中噴碼檢測的環(huán)節(jié)不可或缺。傳統(tǒng)的由人工辨別噴碼好壞并不適合應(yīng)用在企業(yè)的大規(guī)模包裝生產(chǎn)流水線上。而現(xiàn)有的噴碼檢測儀器主控平臺多基于工控PC電腦,其與滿足同等運算能力需求的嵌入式ARM工控板相比,存在價格,功耗較高、占用體積大、隨生產(chǎn)線設(shè)備移動部署能力差等問題。
近年來,卷積神經(jīng)網(wǎng)絡(luò)在圖像分類識別領(lǐng)域具有超越其他傳統(tǒng)算法的出色表現(xiàn)[1],此外,而深度學習框架的出現(xiàn)避免了從頭編寫復(fù)雜神經(jīng)網(wǎng)絡(luò)以及通用代碼的重復(fù)編寫,使用框架提供的底層標準模塊、組件進行開發(fā)能提高深度學習相關(guān)的工作效率。而Arm NN[2]是ARM官方免費推出的一套基于ARM處理器上運行的開源神經(jīng)網(wǎng)絡(luò)推理引擎及相關(guān)SDK,其作用是對框架下訓(xùn)練出的模型進行針對ARM架構(gòu)的優(yōu)化,并使之能在ARM處理器上高效運行,將其應(yīng)用于ARM端噴碼檢測的字符識別環(huán)節(jié)。
依托某醫(yī)療器械公司的試劑紙箱包裝生產(chǎn)流水線作為實際研發(fā)環(huán)境,設(shè)計了一種基于Qt與Arm NN的嵌入式噴碼檢測系統(tǒng),系統(tǒng)能夠自動識別紙箱噴碼內(nèi)容,檢測出識別異常的紙箱。本系統(tǒng)以嵌入式ARM平臺為硬件載體,結(jié)合Qt界面編程、多線程、圖像處理、卷積神經(jīng)網(wǎng)絡(luò)等技術(shù)進行嵌入式軟件開發(fā),實現(xiàn)了對運轉(zhuǎn)中的包裝紙箱生產(chǎn)線上的包裝噴碼進行自動實時檢測。
1? ?系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)硬件設(shè)計部分主要由圖像采集單元、ARM工控板、觸屏顯示模塊、報警裝置組成。圖像采集單元負責采集產(chǎn)線上運動紙箱的清晰噴碼圖像,ARM工控板為系統(tǒng)提供核心運算CPU及所需的相應(yīng)的外圍存儲、通信等資源,觸屏顯示模塊為系統(tǒng)人機交互的硬件載體,報警裝置用于識別異常時發(fā)出警報信息。
系統(tǒng)軟件設(shè)計部分主要由軟件環(huán)境搭建和檢測算法設(shè)計及應(yīng)用程序設(shè)計三個部分組成。軟件環(huán)境搭建包括嵌入式linux操作系統(tǒng)以及應(yīng)用程序開發(fā)過程中所需相關(guān)工具移的移植與配置。檢測算法設(shè)計包括紙箱位置檢測算法設(shè)計及紙箱噴碼檢測算法設(shè)計,前者用于在生產(chǎn)狀態(tài)下軟件檢測是否有紙箱經(jīng)過相機鏡頭并采集相應(yīng)的噴碼圖像,而后者用于檢測具體的噴碼內(nèi)容。應(yīng)用程序設(shè)計基于Qt多線程開發(fā)將圖像采集、紙箱位置檢測、噴碼檢測、 GUI人機交互等獨立線程集成到系統(tǒng)中。實現(xiàn)了自動檢測、單個檢測、數(shù)據(jù)入庫、可視化調(diào)試等系統(tǒng)功能。
2? ?系統(tǒng)硬件設(shè)計
本系統(tǒng)采用基于ARM cortex-A9內(nèi)核的三星Exynos-4412處理器,運行主頻 1.5GHz,能流暢運行嵌入式linux系統(tǒng),CPU外圍模塊包括DDR3內(nèi)存和eMMC閃存,microUSB 接口、串口、網(wǎng)口、SD卡、電源、觸控屏、USB工業(yè)相機等。串口接報警裝置,相機接圖像輔助采集模塊共同構(gòu)成圖像采集單元,圖像輔助采集模塊包含了遮光罩、補光燈、調(diào)位桿等設(shè)備,用于采集盡量清晰,外部干擾少的噴碼圖片。系統(tǒng)硬件設(shè)計如圖1所示。
■
圖1? ?系統(tǒng)硬件結(jié)構(gòu)圖
3? ?系統(tǒng)軟件設(shè)計
3.1? ?軟件環(huán)境搭建
首先需要搭建嵌入式linux系統(tǒng):在宿主機上安裝交叉編譯環(huán)境后,再依次編譯并移植Bootloader、linux內(nèi)核、根文件系統(tǒng)到ARM端。本文移植的嵌入式系統(tǒng)是基于linux3.8內(nèi)核的Xubuntu Desktop13.10,該系統(tǒng)支持 Xfce 圖形桌面環(huán)境、電容觸摸屏等功能。
3.1.1? ?OpenCV、Qt、Zbar、SQLite移植
OpenCV能很方便處理噴碼檢測過程中涉及到的圖像處理及通用算法[3]。Qt是一款優(yōu)秀的使用C++語言開發(fā)的跨多平臺的應(yīng)用程序及圖形界面開發(fā)框架,適合用于開發(fā)本系統(tǒng)的圖形應(yīng)用程序。zbar是一個開源的條形碼識別庫,可以從攝像頭、圖像文件、視頻等來源讀取條形碼[4],并支持多種常用條碼類型的識別,這里將其用于紙箱噴碼中條形碼的識別。SQLite是一款以能在嵌入式系統(tǒng)有限的硬件資源下正常使用為設(shè)計目標的輕量型的數(shù)據(jù)庫,故將其用于滿足本系統(tǒng)檢測結(jié)果的入庫、查詢等需求。因此我們通過依次執(zhí)行下載相關(guān)源碼、使用cmake或./configure等生成Makefile、make及 install、 生成相關(guān)的bin及庫文件、拷貝到ARM端相應(yīng)目錄并配置系統(tǒng)環(huán)境等步驟即可將這些軟件工具移植到ARM中。
3.1.2? ?為caffe框架構(gòu)建并配置Arm NN SDK
如圖2所示,Arm NN建立起了現(xiàn)有深度學習框架(TensorFlow 、Caffe[5]等)與底層ARM處理器之間的連接。它可以加載、轉(zhuǎn)換、優(yōu)化在現(xiàn)有的深度學習框架下訓(xùn)練出來的模型,使其再無需修改地能夠在Arm Cortex CPU和Arm Mali GPU上高效運行。本次配置Arm NN SDK版本號為18_11。
■
圖2? ?Arm NN SDK作用示意圖
在宿主機Ubuntu已經(jīng)配置好caffe、protobuf 等環(huán)境的前提下,為caffe配置并構(gòu)建Arm NN SDK開發(fā)環(huán)境可以分為如下幾個步驟:首先:從ARM官方GitHub下載Arm NN SDK和Arm Compute Library文件,并且配置好Cmake,SCons等編譯安裝工具。其次,指定armnn所需的依賴項的路徑,包括boost、caffe。然后,構(gòu)建armnn,具體包括使用scons 編譯Arm Compute Library以及使用Cmake構(gòu)建Arm NN SDK(通過CMakeLists.txt傳遞armnn構(gòu)建所需的諸多配置參數(shù))生成主要的3個庫文件libarmnn.so libarmnnCaffeParser.so libarmnnUtils.a。最后,運行上一步生成的UnitTests測試文件以便驗證Arm NN SDK是否完全構(gòu)建成功。
3.2? ?檢測算法設(shè)計
3.2.1? ?紙箱位置檢測
進行紙箱噴碼內(nèi)容檢測的前提是采集到清晰完整噴碼的紙箱圖像。本系統(tǒng)以生產(chǎn)線上紙箱運到相機鏡頭相對中心位置作為觸發(fā)條件來觸發(fā)紙箱噴碼內(nèi)容檢測。因此需要進行紙箱相對相機鏡頭位置的檢測,本文利用紙箱與背景的亮度差異作為特征使用圖像處理方法進行軟件上的位置檢測。
在本系統(tǒng)固定環(huán)境下大量測試統(tǒng)計表明,相機采集到不含紙箱的背景圖像,轉(zhuǎn)換到HSV色彩空間后[6],其V明度分量值大于0.6的像素點數(shù)約占全圖像素的40%,而采集到的紙箱圖像相應(yīng)的的占比約為90%。據(jù)此設(shè)定閾值判別一個圖像區(qū)域內(nèi)是否含有紙箱。將采集到的圖像左邊1/4區(qū)域設(shè)定為in區(qū)域,將圖像右邊1/4區(qū)域設(shè)定為out區(qū)域。具體步驟:(1)設(shè)置標志位g_flag_in、g_flag_match表明當前采集到的幀圖像內(nèi)的紙箱狀態(tài),均初始化為0。(2)獲取相機采集到的幀圖像,并將尺寸縮減到原幀的1/3以減少運算量(3)將源RGB圖轉(zhuǎn)換到HSV色彩空間,提取明度V分量并計算當前幀圖像的in、out區(qū)域明度百分比P_in、P_out。
(4)進行判別:
當(g_flag_in=0)且(g_flag_match=0)且(P_in>0.9)且(P_out<0.4)時認為此幀圖像屬于"有紙箱進入鏡頭并充滿了in區(qū)域"的情形,令g_flag_in=1。
當(g_flag_in=1)且(g_flag_match=0)且(P_in>0.9)且(P_out>0.9)時認為此幀圖像屬于"有紙箱在進入in區(qū)域之后又進入并充滿out區(qū)域"的情形,此時,整個紙箱應(yīng)處于鏡頭的相對中心,能采集到當前紙箱上的完整噴碼內(nèi)容,認為匹配一幀有效紙箱圖像,發(fā)送此幀圖像到相關(guān)顯示、識別線程,且令g_flag_match=1防止對同一個紙箱重復(fù)匹配。
當(g_flag_in=1)且(g_flag_match=1)且(P_in<0.4)且(P_out<0.4)時認為此幀圖像屬于"匹配紙箱后首次出現(xiàn)in、out區(qū)域均不含紙箱"的情形,此時,說明匹配紙箱走出鏡頭范圍。令g_flag_in、g_flag_match標志清零等待新幀繼續(xù)進行判別。整個紙箱位置檢測算法簡潔有效,能在嵌入式平臺上實時運行,一次紙箱位置檢測流程如圖3所示。
■
圖3? ?紙箱位置檢測流程圖
3.2.2? ?紙箱噴碼檢測
紙箱噴碼檢測的內(nèi)容包括圖像預(yù)處理、噴碼區(qū)域提取、條形碼識別、字符子串分割、噴碼字符識別模型訓(xùn)練、Arm端字符識別,識別結(jié)果處理。
3.2.2.1? ?圖像預(yù)處理
噴碼圖像的預(yù)處理步驟為:對如圖4(a)所示的原始彩色圖像進行轉(zhuǎn)灰度變換,使用檢測水平邊緣的Sobel算子進行邊緣檢測,再使用OTSU算法進行全局二值化。如圖所示3-1,使用邊緣檢測減少無關(guān)信息后的OTSU全局二值化效果良好,如圖4(b)所示。
■
(a)原始圖? ? ? ? ? ? ? ? ? ? ? ? (b)Otsu算法后二值圖
圖4? ?噴碼圖像預(yù)處理
3.2.2.2? ?噴碼區(qū)域提取
為了去除紙箱上除待識別噴碼區(qū)域以外的干擾信息,需要對中心噴碼區(qū)域進行提取。對此,使用形態(tài)學操作后提取連通域提取的算法可以實現(xiàn)。具體的,對由預(yù)處理得到二值圖使用3*3的形態(tài)學操作核開操作消除點狀噪聲以及增大中心噴碼與外圍無關(guān)噴碼之間的距離,再使用25*25的操作核膨脹將各個噴碼子串形成連通域,如圖5(a)所示,查找圖中輪廓,排序輪廓面積,最大者即為該連通域,獲取該輪廓的外接矩形,再使用ROI框選即可提取到中心噴碼區(qū)域,如圖5(b)所示。提取到中心噴碼區(qū)域后,需要進一步提取各噴碼子串。首先,進行開操作濾波去除散落的小點狀噪聲后再進行水平投影分割大致分割出4個噴碼子串區(qū)域。其次,分別在各子串區(qū)域內(nèi)使用25*1的操作核膨脹使得各子串自身橫向聯(lián)通,再查找輪廓及通過面積、縱橫比等篩選輪廓。最后,使用opencv中的RotatedRect類獲取輪廓的最小外接旋轉(zhuǎn)矩形即可實現(xiàn)各噴碼子串區(qū)域的精確提取,結(jié)果如圖5(c)所示。利用getRectSubPix()提取出對應(yīng)的噴碼子串的矩形ROI區(qū)域。由于提取到的矩形ROI區(qū)域可能存在一定的傾斜角度,故采用仿射變換對每個旋轉(zhuǎn)矩形進行傾斜校正。
計算機圖形學中一般按照公式(1)的方式處理仿射變換:
i′1 = A? b0? 1i1? ? ? ? (1)
其中A = a11? a12a21? a22 ,i = xy,b = a13a23,i′ = x′y,A? b,為仿射變換矩陣。旋轉(zhuǎn)矩形的傾斜校正后即完成了各噴碼子串的提取,如圖5(d)所示。
■
(a)二值圖形態(tài)學操作結(jié)果? ? ? ? ? ? ? ? ? ? ?(b)中心噴碼區(qū)域
■
(c)提取到的噴碼子串區(qū)域? ? ? ? ? ?(d)傾斜校正后的噴碼子串
圖5? ?噴碼區(qū)域提取
3.2.2.3? ?字符子串分割
由于光照的并不能做到完全的均勻,子串左右兩端存在一定的灰度差異,全局二值化產(chǎn)生的閾值會使得端點附近字符二值化效果較差,所以這里需采取局部自適應(yīng)二值化。最后,對二值化后微量的散落的黑斑塊采取形態(tài)學操作核為5*5的閉操作,獲得干擾最小化的子串,如圖6(a)所示。其中,經(jīng)過同等處理的條形碼子串已經(jīng)可以調(diào)用zbar庫進行條碼識別。
本系統(tǒng)環(huán)境下出現(xiàn)投影分割異常的基本都是相鄰字符粘連的情形,故采用帶有粘連處理的垂直投影分割法進行噴碼子串字符分割:首先,按列統(tǒng)計各列黑色字符點數(shù)到數(shù)組,創(chuàng)建同尺寸純背景圖,根據(jù)統(tǒng)計的列點數(shù)逐列繪制垂直投影直方圖。然后,從左到右按列遍歷,再設(shè)定標志位inBlock以表達當前遍歷點是否位于字符區(qū)域內(nèi)部。最后,以列的黑像素點數(shù)為0時,inBlock是否為真來判定當前遍歷點是字符區(qū)域的起點還是終點,從而分割字符。在上述過程中,遍歷到終點時進行字符粘連情形判斷,即:(1)取原圖寬的1/9作為平均字符寬度Width_avr,設(shè)定Width_max=1.25*Width_avr。(2)若投影寬度為i*Width_max與(i+1)*Width_max之間時認為有i個相鄰字符粘連。(3)在當前投影段橫向上[1/2i,3/2i]、[3/2i,5/2i]...[2i-3/2i,2i-1/2i]等區(qū)間內(nèi)分別尋找該區(qū)間內(nèi)列黑像素數(shù)點和最少的列,將其視作區(qū)間內(nèi)相鄰粘連字符的實際分割列,再使用ROI提取實際分割區(qū)域以完成分割。效果如圖6(b)所示。
■
(a)噴碼子串的全局與局部自適應(yīng)二值化效果
■
(b)粘連噴碼子串分割效果
圖6? ?字符子串分割
3.2.2.4噴碼字符識別模型訓(xùn)練
在大量生產(chǎn)的過程中,難免地會產(chǎn)生規(guī)整性較差的噴碼字符,如圖7所示。
■
圖7? ?規(guī)整性較差的噴碼字符
相對于傳統(tǒng)機器學習,卷積神經(jīng)網(wǎng)絡(luò)不需要手動或使用特征提取算法來進行特征提取,而是用多個不同的卷積核在訓(xùn)練階段就完成了特征提取及抽象。此外,由于其采用了局部連接、權(quán)值共享、下采樣層等能大幅降低參數(shù)總量的特性,能夠在參數(shù)量可接受的情況下加深網(wǎng)絡(luò)層數(shù),使得網(wǎng)絡(luò)整體的表達能力更強,實現(xiàn)更好的學習效果。LeNet是一種經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu) ,已經(jīng)在手寫數(shù)字數(shù)據(jù)集Mnist上取得的優(yōu)異的識別效果,所以我們在lenet-5網(wǎng)絡(luò)的基礎(chǔ)上作出調(diào)整后用于噴碼字符的識別:根據(jù)分割后噴碼字符的縱橫比,將輸入層數(shù)據(jù)尺寸改為32*16。這樣可以減少形變丟失特征信息也減少了參數(shù)量,加快了網(wǎng)絡(luò)訓(xùn)練及推理的速度。此外,池化層的池化方式改用最大值池化,激活函數(shù)改用PReLU[7-8]函數(shù),輸出層的分類器改用Softmax回歸分類器。 調(diào)整后lenet網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。其中,由于標準RELU函數(shù)在訓(xùn)練過程中可能出現(xiàn)部分神經(jīng)元“壞死”現(xiàn)象,PReLU近年被提出,PReLU表示帶參數(shù)的ReLU函數(shù),ReLU、PReLU函數(shù)如公式(2)、(3)所示,PReLU相對于 ReLU的不同在于新引入了可訓(xùn)練的參數(shù)ai作用于x負半軸,這避免了函數(shù)在x負半軸范圍內(nèi)倒數(shù)變成0,從而修正了數(shù)據(jù)的分布,解決了訓(xùn)練過程中可能出現(xiàn)的神經(jīng)元“壞死”問題,而更新參數(shù)ai時,使用帶動量的BP算法進行更新,如公式(4)所示,式中μ、η兩個系數(shù)分別表示動量系數(shù)與學習率。
RELU(xi) = xi? ?if xi > 00? ?if xi ≤ 0? ? ? ? (2)
PRELU(xi) = xi? ?if xi > 0aixi? ?if xi ≤ 0i? ? ? ? (3)
Δai = μΔai + η■? ? ? ? (4)
■
圖8? ?調(diào)整后的lenet網(wǎng)絡(luò)結(jié)構(gòu)
噴碼數(shù)據(jù)集制作,將系統(tǒng)硬件架設(shè)于生產(chǎn)線上,驅(qū)動相機持續(xù)采集包裝噴碼圖片,從中選取出各型號及批次紙箱1000多幅原始噴碼圖片,經(jīng)過預(yù)處理,區(qū)域提取,噴碼分割及尺寸歸一化后,得到大量32*16尺寸的單字符圖片,于其中手動篩選數(shù)字0至9十類圖片使每類圖片都達560張(取決于出現(xiàn)較低頻率的數(shù)字的數(shù)量),再在一定范圍內(nèi)隨機平移和旋轉(zhuǎn)擾動增強數(shù)據(jù)集,使數(shù)據(jù)集總數(shù)達到22400張,按比例分成訓(xùn)練集和測試集存放于caffe對應(yīng)目錄下,并從文件名提取各圖片標簽。以shuffle打亂文件順序方式生成數(shù)據(jù)集lmdb文件。拷貝數(shù)據(jù)集、網(wǎng)絡(luò)定義文件、超參數(shù)文件等到caffe相關(guān)目錄,執(zhí)行網(wǎng)絡(luò)訓(xùn)練命令。本文調(diào)整后的lenet網(wǎng)絡(luò)在自制的噴碼字符數(shù)據(jù)集上迭代約6000輪后訓(xùn)練結(jié)果趨向穩(wěn)定,準確率達到了99.37%。
此外,還在宿主機環(huán)境下構(gòu)建了基于模板匹配和傳統(tǒng)的三層BP神經(jīng)網(wǎng)絡(luò)的噴碼字符識別實驗,使用相同的測試集數(shù)據(jù)進行測試,得到識別率及性能對比如表1所示。
表1? ?不同識別算法的識別率比較
■
顯然,基于lenet5調(diào)整的卷積神經(jīng)網(wǎng)絡(luò)在噴碼字符的識別上相較基于模板匹配及傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的算法識別率有明顯提高,雖然識別耗時也相應(yīng)變長,但對系統(tǒng)整體的的實時性影響較小,屬于可接受的范圍內(nèi)。
3.2.2.5? ?Arm端字符識別
在ARM端通過Arm NN SDK加載由宿主機環(huán)境下訓(xùn)練出的caffemodel執(zhí)行噴碼字符識別步驟如下:
(1)使用opencv加載分割出的噴碼字符圖片逐像素輸入到輸入張量InputTensors。
(2)調(diào)用Arm NN接口ICaffeParserPtr::CreateNetworkFromBinaryFile()從前述步驟中訓(xùn)練出的caffemodel文件中讀取網(wǎng)絡(luò)結(jié)構(gòu)及權(quán)值參數(shù)等信息。同時通過GetNetworkInputBindingInfo()接口為網(wǎng)絡(luò)中的data輸入層、prob輸出層尋找綁定結(jié)點,并返回給armnnCaffeParser::BindingPointInfo類型變量。
(3)根據(jù)ARM底層處理器類型(gpu、cpu、無neon優(yōu)化cpu)選擇網(wǎng)絡(luò)優(yōu)化參數(shù)(GpuAcc、CpuAcc、CpuRef),本文硬件平臺ARM cortex-A9內(nèi)核處理器基于ARMv7-A架構(gòu),屬于可開啟neon運算加速的ARM CPU,選擇CpuAcc優(yōu)化參數(shù)。Optimize(*network,CpuAcc,runtime->GetDeviceSpec())。
(4)創(chuàng)建Arm NN runtime并加載優(yōu)化過的網(wǎng)絡(luò):runtime->LoadNetwork(networkIdentifier,std::move(optNet))。
(5)調(diào)用runtime->EnqueueWorkload(networkIdentifier,InputTensors,OutputTensors)執(zhí)行單向推斷識別噴碼字符。
3.3? ?應(yīng)用程序設(shè)計
由于系統(tǒng)在使用自動檢測模式時需要處理相機的實時采集、紙箱位置檢測、噴碼內(nèi)容檢測、主界面的人機交互4個模塊的任務(wù),為提升系統(tǒng)運行效率以及防止Qt主界面的凍結(jié),需采取Qt的多線程技術(shù)來應(yīng)對[9-10]。在主界面線程的基礎(chǔ)上新開辟3個線程,并使用Qt的信號與槽、線程同步實現(xiàn)線程間通信、數(shù)據(jù)傳輸。
如圖9所示,圖像采集子線程負責循環(huán)的采集幀圖片并且發(fā)給主界面及紙箱位置檢測子線程,紙箱位置檢測子線程負責循環(huán)的對接收到的幀圖片進行檢測是否含有有效紙箱,若是則將其發(fā)送給噴碼檢測子線程,噴碼檢測子線程負責循環(huán)的對收到的有效紙箱幀圖片進行內(nèi)容識別并返回結(jié)果到主界面。主界面線程與各子線程的交互分為顯示控件與功能控件兩部分:主界面上將各子線程返回信息實時顯示到相應(yīng)的顯示控件和用主界面上的功能控件實現(xiàn)對各子線程內(nèi)容的調(diào)用。
圖9? ?Qt多線程應(yīng)用程序結(jié)構(gòu)
4? ?系統(tǒng)功能實現(xiàn)及應(yīng)用測試
4.1? ?系統(tǒng)功能實現(xiàn)
系統(tǒng)菜單主要由“檢測”、“查詢”、“設(shè)置”、“調(diào)試”四個功能模塊組成。
檢測模塊分為自動檢測與單個檢測,其中自動檢測為系統(tǒng)的核心功能。具體的,界面左上方的圖形視圖窗口用來實時顯示相機采集,右上方的QLabel窗口用來顯示匹配到的有效紙箱,點擊“自動檢測”按鈕開啟系統(tǒng)的自動檢測模式。檢測中會將檢測信息返回到主界面實時顯示,如圖所示,識別結(jié)果欄會顯示識別出的噴碼內(nèi)容。當前編號欄的值會根據(jù)識別過的紙箱數(shù)遞增,當前結(jié)果欄會顯示識別是否成功。實時信息輸出欄會輸出程序運行過程的實時打印信息。失敗列表欄輸出識別失敗的紙箱編號,同時報警提示產(chǎn)線人員確認復(fù)檢及檢出。
單個檢測,主要用于單個紙箱檢測、自動檢測模式下的遺漏復(fù)檢、檢測本地紙箱噴碼圖片等需求。
查詢模塊分為屬性查詢與統(tǒng)計查詢.系統(tǒng)會將每次識別的紙箱信息自動保存到本地數(shù)據(jù)庫。屬性查詢按照檢測日期、紙箱序列號、檢測編號、型號容量、是否成功等屬性來查詢某條檢測記錄。如圖所示。而統(tǒng)計查詢可以進行設(shè)定首尾日期內(nèi)的檢測的成功率,型號、容量檢測數(shù)量的統(tǒng)計。
調(diào)試模塊可以實時顯示檢測算法各步驟運行的結(jié)果以及對一些步驟的參數(shù)進行調(diào)整。系統(tǒng)整體的軟件功如圖10所示。
圖10? ?系統(tǒng)軟件功能圖
4.2? ?系統(tǒng)應(yīng)用測試
分別在6組不同型號、容量的包裝紙箱進行生產(chǎn)時,調(diào)節(jié)好對應(yīng)的相機距離,讓系統(tǒng)進入自動檢測模式進行持續(xù)測試,當系統(tǒng)識別異常報警時,進行人工復(fù)檢,確認該紙箱噴碼是否噴印異常,最后依據(jù)公式(5)統(tǒng)計得出系統(tǒng)的正檢率。統(tǒng)計結(jié)果如表2所示。
正檢率=(1 - ■) × 100%
(5)
測試結(jié)果基本達到了系統(tǒng)預(yù)設(shè)的指標,表明本系統(tǒng)在生產(chǎn)線上運轉(zhuǎn)良好,能實現(xiàn)對多種型號、容量下的紙箱噴碼檢測。
表2? ?系統(tǒng)運行正檢率
5? ?結(jié)? 論
針對目前的噴碼檢測系統(tǒng)的一些不足,設(shè)計了一套基于Qt與Arm NN的嵌入式噴碼檢測系統(tǒng),分別進行了系統(tǒng)軟硬件的設(shè)計。硬件上,設(shè)計了以高性能ARM處理器為運算核心與其他外設(shè)組成硬件平臺。軟件上,首先進行了軟件環(huán)境的搭建。其次設(shè)計了位置檢測算法來用于檢測待測目標位置、噴碼檢測算法用于檢測噴碼內(nèi)容,其中,在字符識別環(huán)節(jié)利用Arm NN將在caffe框架下訓(xùn)練出的噴碼字符識別模型引入到ARM端并實現(xiàn)了對噴碼字符準確識別。最后根據(jù)生產(chǎn)人員的需求分析開發(fā)了功能完善的人機交互軟件。實際使用表明,本系統(tǒng)運作良好,噴碼檢測過程中的識別率、正檢率均較高,可以滿足實際生產(chǎn)中的需求。
參考文獻
[1]? ? 劉海龍,李寶安,呂學強,等. 基于深度卷積神經(jīng)網(wǎng)絡(luò)的圖像檢索算法研究[J].計算機應(yīng)用研究,2017,34(12):3816—3819.
[2]? ? Arm Limited. About arm NN SDK[EB/OL].https://developer.arm.com/ip-products/processor s/machine-learning/arm-nn,2018-02-09.
[3]? ? 毛星云. OPENCV3編程入門[M]. 北京:電子工業(yè)出版社,2015.
[4]? ? 吳兆林. 基于Zbar條形碼圖像識別的實現(xiàn)[J]. 數(shù)字技術(shù)與應(yīng)用,2016(8):128—129.
[5]? ? 歐先鋒,向燦群,郭龍源,等. 基于Caffe深度學習框架的車牌數(shù)字字符識別算法研究[J].四川大學學報:自然科學版,2017(05):83—89.
[6]? ? 李潘,吳少波,王麗娜. 基于機器視覺的寬厚板噴碼自動識別系統(tǒng)[J]. 冶金自動化,2013(4):12—15.
[7]? ? COLNAGHI S,HONEINE J L,SOZZI S,et al. Body sway increases after functional inactivation of the cerebellar vermis by cTBS[J]. Cerebellum,2017,16(1):1—14.
[8]? ? ZHANG H,YING L,ZHANG Y,et al. Spectral-spatial classification of hyperspectral imagery using a dual-channel convolutional neural network[J]. Remote Sensing Letters,2017,8(5):438—447.
[9]? ? 張慶.車牌識別算法及其在QT平臺上的實現(xiàn)[D]. 北京:北方工業(yè)大學,2017.
[10]? 姚宇樂,陳強,張九衛(wèi),等. 基于ARM920T的嵌入式圖像處理平臺搭建及應(yīng)用[J]. 計算機系統(tǒng)應(yīng)用,2016(7):208—212.