郭永平,劉淑娟
(1.寶雞文理學(xué)院計(jì)算機(jī)學(xué)院,陜西寶雞721016;2.寶雞文理學(xué)院圖書(shū)館,陜西寶雞721016)
基于機(jī)器視覺(jué)的產(chǎn)品缺陷檢測(cè)系統(tǒng)是使用計(jì)算機(jī)攝取圖像模擬人的視覺(jué)功能用來(lái)處理真實(shí)物體的圖像。通過(guò)分析圖像獲得所需信息,進(jìn)而控制機(jī)器運(yùn)動(dòng)裝置,實(shí)現(xiàn)產(chǎn)品質(zhì)量檢測(cè)的應(yīng)用系統(tǒng)。一個(gè)完整的基于機(jī)器視覺(jué)的缺陷檢測(cè)系統(tǒng)是由光學(xué)系統(tǒng)、圖像采集單元、圖像處理單元、執(zhí)行機(jī)構(gòu)及人機(jī)界面等眾多功能模塊共同組成,所有功能模塊相輔相成,缺一不可。如果將光學(xué)系統(tǒng)和圖像采集模塊比作人體的眼睛,下位機(jī)分揀等執(zhí)行機(jī)構(gòu)比作手臂,那么以數(shù)字圖像技術(shù)為主體的軟件處理模塊就是系統(tǒng)的大腦,是分析和指揮系統(tǒng),是開(kāi)發(fā)缺陷檢測(cè)系統(tǒng)的核心[1-2]。
缺陷檢測(cè)軟件處理模塊首先將被攝取目標(biāo)轉(zhuǎn)換成圖像信號(hào),傳送給專用的圖像處理系統(tǒng),根據(jù)像素分布和亮度、顏色等信息,轉(zhuǎn)變成數(shù)字化信號(hào);再由圖像系統(tǒng)對(duì)這些信號(hào)進(jìn)行各種運(yùn)算來(lái)抽取目標(biāo)的特征,進(jìn)而根據(jù)判別的結(jié)果來(lái)控制現(xiàn)場(chǎng)的設(shè)備動(dòng)作[3]。近年來(lái),隨著中國(guó)工業(yè)4.0版本的推出,智能制造風(fēng)生水起,引發(fā)了一場(chǎng)技術(shù)和產(chǎn)業(yè)革命,基于機(jī)器視覺(jué)的各種系統(tǒng)廣泛的應(yīng)用在測(cè)量、運(yùn)動(dòng)控制、物流篩選、農(nóng)產(chǎn)品優(yōu)選等各個(gè)領(lǐng)域,工業(yè)生產(chǎn)過(guò)程中的質(zhì)量檢測(cè)尤為廣泛[4]。
但對(duì)位于制造業(yè)末端的零部件制造中小代工企業(yè)來(lái)說(shuō),如何檢測(cè)多種規(guī)格不同、形狀各異的零件,降低基于機(jī)器視覺(jué)的產(chǎn)品缺陷檢測(cè)系統(tǒng)的使用成本,是破解自動(dòng)檢測(cè)系統(tǒng)在這些企業(yè)普及的關(guān)鍵。在檢測(cè)系統(tǒng)中由于檢測(cè)標(biāo)的物的形狀、運(yùn)動(dòng)過(guò)程、照明和檢驗(yàn)要求不同,尚未有具備通用能力的單一算法,不同的標(biāo)的物圖像處理過(guò)程基本是一事一議,不同的標(biāo)的物都需要開(kāi)發(fā)處理過(guò)程不同檢測(cè)處理模塊[5]。中小代工企業(yè)的產(chǎn)品是根據(jù)客戶訂單,生產(chǎn)多種規(guī)格不同、形狀各異的零件,不同的產(chǎn)品需要進(jìn)行相應(yīng)的投資改造,使用成本過(guò)高。為此,本文提出了機(jī)器視覺(jué)系統(tǒng)中軟件一種新的設(shè)計(jì)方案,通過(guò)軟件配置組合不同的圖像處理算法,完成多種零部件的缺陷檢測(cè),降低開(kāi)發(fā)成本和使用成本。
缺陷檢測(cè)系統(tǒng)的軟件模塊是據(jù)外媒觸發(fā)信號(hào)進(jìn)行圖像采集,繼而完成圖像的畸形校正,增強(qiáng)、分割、提取分析、測(cè)量,融合處理判定,將判定結(jié)果傳送至下位機(jī),由下位機(jī)執(zhí)行分揀。一個(gè)典型的檢測(cè)執(zhí)行過(guò)程如圖1所示。

圖1 機(jī)器視覺(jué)程序整體執(zhí)行流程圖
軟件模塊包括參數(shù)設(shè)置、圖像處理與特征提取、綜合判定和人機(jī)交互等功能模塊[2]。
1.2.1 參數(shù)設(shè)置
為了保障程序高效、準(zhǔn)確地執(zhí)行檢測(cè)任務(wù),設(shè)置相關(guān)的相機(jī)參數(shù)、閾值及為了減少運(yùn)算量而進(jìn)行的劃分感興趣區(qū)域(Region Of Interest,ROI)設(shè)置。
1.2.2 圖像處理與特征提取
根據(jù)選定的算法、閾值等參數(shù),進(jìn)行圖像校正,增強(qiáng)、分割、特征提取、測(cè)量等過(guò)程[6-8]。
1.2.3 綜合判定
融合各部位的處理結(jié)果進(jìn)行判定,將處理指令傳送至下位機(jī)進(jìn)行分揀操作。
1.2.4 人機(jī)交互
進(jìn)行檢測(cè)監(jiān)控和檢測(cè)結(jié)果的統(tǒng)計(jì)分析等內(nèi)容。
目前市場(chǎng)上缺陷檢測(cè)系統(tǒng)的軟件模塊大部分是針對(duì)某一檢測(cè)標(biāo)的進(jìn)行的定制化開(kāi)發(fā)。功能上包括設(shè)置模塊和檢測(cè)模塊兩部分,前者完成相機(jī)標(biāo)定,相機(jī)參數(shù)設(shè)置、ROI及各種閾值設(shè)置等[9-12];后者執(zhí)行根據(jù)閾值設(shè)置和選定算法進(jìn)行圖像分析處理,完成檢測(cè)任務(wù)。這種設(shè)計(jì)方式優(yōu)點(diǎn)是程序執(zhí)行效率高,對(duì)某一具體產(chǎn)品的檢測(cè)有很好的應(yīng)用效果。同時(shí),這種設(shè)計(jì)存在很多問(wèn)題,描述如下。
1.3.1 通用性差
無(wú)論是設(shè)置模塊,還是檢測(cè)模塊,均為執(zhí)行具體的檢測(cè)標(biāo)的物展開(kāi)的,是經(jīng)過(guò)分析檢測(cè)環(huán)境條件和檢測(cè)需求而展開(kāi)的,采用的算法是以硬編碼的形式固化到檢測(cè)程序中,當(dāng)檢測(cè)需求發(fā)生變化時(shí),必須更改原有代碼來(lái)完成擴(kuò)展操作,違背了軟件開(kāi)發(fā)的開(kāi)閉原則。
1.3.2 擴(kuò)展困難
設(shè)置模式和檢測(cè)模式的應(yīng)用場(chǎng)景不同,將二者集成到一套軟件中,使得二者緊密耦合,擴(kuò)展設(shè)置模式時(shí),必須連同檢測(cè)模塊進(jìn)行修改,增加了擴(kuò)展難度和測(cè)試成本。如:設(shè)置模塊增加機(jī)器學(xué)習(xí)功能時(shí),只是要取得和記錄缺陷的特征信息,代碼和檢測(cè)模塊無(wú)關(guān),但集成測(cè)試時(shí)需要連同檢測(cè)模塊一起做功能測(cè)試。
1.3.3 實(shí)施難度大
算法選擇、參數(shù)設(shè)置和閾值率定、ROI設(shè)置,通常依賴于實(shí)施人員的經(jīng)驗(yàn)和水平,實(shí)施人員缺乏必要的分析實(shí)施工具。
1.3.4 處理算法改造困難,使用成本高
這些軟件大部分選用HALCON、VISIONPRO商業(yè)的算法庫(kù)算法包,無(wú)法對(duì)其內(nèi)部的算法進(jìn)行改造,不利用對(duì)圖像處理算法庫(kù)進(jìn)行擴(kuò)展。同時(shí)采用定制開(kāi)發(fā)和商業(yè)算法庫(kù),造價(jià)高,不利于小企業(yè)推廣使用。
設(shè)計(jì)一種針對(duì)空洞、褶皺、劃痕、斑點(diǎn)、顏色等缺陷檢測(cè)的在線檢測(cè)軟件(以下簡(jiǎn)稱檢測(cè)程序),使其能夠動(dòng)態(tài)的按照配置文件設(shè)定的執(zhí)行步驟和處理算法進(jìn)行執(zhí)行處理,完成缺陷的檢測(cè)過(guò)程,滿足不同標(biāo)的物的檢測(cè)需求。此種方式的設(shè)計(jì)使得檢測(cè)程序職責(zé)單一化,并使得檢測(cè)程序依賴于算法接口,而非具體的算法,具體的算法通過(guò)類的反射技術(shù),在運(yùn)行時(shí)根據(jù)配置文件進(jìn)行創(chuàng)建[13-14]。同時(shí)增加用于現(xiàn)場(chǎng)分析實(shí)驗(yàn)工具(以下簡(jiǎn)稱實(shí)驗(yàn)程序),使實(shí)施人員能夠根據(jù)檢測(cè)要求,完成參數(shù)、閾值率定、ROI設(shè)置,圖像處理算法優(yōu)選等,并將設(shè)置的結(jié)果按照檢測(cè)項(xiàng)目進(jìn)行持久化存儲(chǔ)。經(jīng)過(guò)分離設(shè)計(jì)后實(shí)驗(yàn)程序不再是檢測(cè)程序附屬的設(shè)置模塊,而是成為運(yùn)行維護(hù)人員用于比較分析的實(shí)驗(yàn)工具,同時(shí),檢測(cè)程序職責(zé)也進(jìn)行單一化處理,降低了維護(hù)成本。
試驗(yàn)程序?qū)⒚糠N標(biāo)的物的檢測(cè)定義為一個(gè)檢測(cè)項(xiàng)目,其后專注此項(xiàng)目各種參數(shù)、閾值率定、ROI設(shè)置和圖像算法優(yōu)選,將最終的結(jié)果持久化存儲(chǔ)[15]。檢測(cè)程序讀取配置文件(CONFIG)中的項(xiàng)目信息,由持久化存儲(chǔ)提取該項(xiàng)目的存儲(chǔ)設(shè)置信息,匹配執(zhí)行相應(yīng)算法,生成實(shí)例執(zhí)行檢測(cè)過(guò)程,并將檢測(cè)結(jié)果進(jìn)行輸出。系統(tǒng)設(shè)計(jì)架構(gòu)如圖2所示。

圖2 實(shí)驗(yàn)平臺(tái)和檢測(cè)平臺(tái)工作示意圖
以下設(shè)計(jì)要點(diǎn),是檢測(cè)程序正確執(zhí)行的保障。
一種檢測(cè)標(biāo)的為一個(gè)檢測(cè)項(xiàng)目,閾值、參數(shù)、ROI、算法優(yōu)選等結(jié)果均是針對(duì)指定的項(xiàng)目展開(kāi)。標(biāo)的物發(fā)生變化時(shí),只需在實(shí)驗(yàn)平臺(tái)新建一個(gè)項(xiàng)目,將設(shè)置的結(jié)果存儲(chǔ)到數(shù)據(jù)庫(kù)中。
將圖像處理算法按照?qǐng)D像矯正、二值化、濾波、邊緣提取、梯度、分割、提取等進(jìn)行分類封裝,將不同的算法封裝成具有相同接口的具體類,便于動(dòng)態(tài)調(diào)用。
檢測(cè)程序采用設(shè)計(jì)模式中的策略模式和工廠模式,利用類的反射技術(shù)完成設(shè)置部分實(shí)例的創(chuàng)建,實(shí)現(xiàn)對(duì)不同算法的可配置化動(dòng)態(tài)利用。
試驗(yàn)程序和檢測(cè)程序圖像處理算法使用同一的算法庫(kù)的算法,確保執(zhí)行的正確性。
OPENCV(Open Source Computer Vision Library),是Intel公司面向應(yīng)用程序開(kāi)發(fā)者開(kāi)發(fā)的計(jì)算機(jī)視覺(jué)庫(kù),實(shí)現(xiàn)了圖像處理、計(jì)算機(jī)視覺(jué)、機(jī)器學(xué)習(xí)方面很多通用算法,輕量級(jí)而且高效。它提供了python、C++、Mat Lab等語(yǔ)言的接口,極大地方便了實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺(jué)以及模式識(shí)別程序的二次開(kāi)發(fā)[16-17]。Open CV的絕大部分模塊遵循較寬松的BSD協(xié)議。即對(duì)商業(yè)應(yīng)用較為友好,允許在商業(yè)軟件中使用甚至修改遵循該協(xié)議的代碼或庫(kù),而商業(yè)軟件本身代碼無(wú)須開(kāi)源,即允許閉源商業(yè)化應(yīng)用,僅要求保留原有開(kāi)源版權(quán)聲明[2]。OpenCV可以對(duì)其內(nèi)部的算法進(jìn)行改造,利于形成自己獨(dú)立的視覺(jué)應(yīng)用算法庫(kù),因此選擇OpenCV。
將傳統(tǒng)的檢測(cè)程序中的檢測(cè)運(yùn)行模式和設(shè)置運(yùn)行模式進(jìn)行分離,使得獨(dú)立出來(lái)的試驗(yàn)程序擴(kuò)展性增強(qiáng),如:提供圖像處理算法對(duì)比和優(yōu)選,增加機(jī)器學(xué)習(xí)等功能。檢測(cè)程序職能單一化,程序結(jié)構(gòu)更加明晰。同時(shí)降低了二者之間的耦合度,試驗(yàn)程序和檢測(cè)程序獨(dú)立開(kāi)發(fā),互不影響,降低了維護(hù)和測(cè)試成本,提高了軟件復(fù)用度。
實(shí)驗(yàn)程序開(kāi)發(fā):實(shí)驗(yàn)程序?qū)?shí)時(shí)性要求不高,同時(shí)考慮后續(xù)機(jī)器學(xué)習(xí)的擴(kuò)展性及開(kāi)發(fā)成本,開(kāi)發(fā)語(yǔ)言選擇python3.4,交互界面選擇wxPython。
檢測(cè)程序開(kāi)發(fā):采集過(guò)程不能影響原有生產(chǎn)線的工作效率,選擇VS2012中的C++。
數(shù)據(jù)庫(kù)選擇:持久化存儲(chǔ)選用SQLLite3,主要用來(lái)存儲(chǔ)配置信息和檢測(cè)結(jié)果信息,數(shù)據(jù)量不大,而SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù),具有占用資源低、運(yùn)行速度快等特點(diǎn),可以直接打包到安裝文件中,因此選擇SQLite。
試驗(yàn)程序?qū)γ糠N標(biāo)的物分別創(chuàng)建一個(gè)項(xiàng)目,在項(xiàng)目管理的基礎(chǔ)上,進(jìn)行相機(jī)參數(shù)設(shè)置及相機(jī)標(biāo)定系數(shù)計(jì)算、ROI的設(shè)置;處理算法優(yōu)選、閾值設(shè)置、機(jī)器學(xué)習(xí)等功能。功能上主要由項(xiàng)目管理、參數(shù)設(shè)置、算法優(yōu)選和機(jī)器訓(xùn)練等模塊。如圖3所示。

圖3 配置程序功能組成及關(guān)系圖
3.2.1 項(xiàng)目管理
針對(duì)不同的檢測(cè)需求,即不同的零部件,設(shè)置為一個(gè)項(xiàng)目,記錄項(xiàng)目名稱、零部件的規(guī)格參數(shù)、檢驗(yàn)要求、標(biāo)準(zhǔn)圖像等信息。項(xiàng)目管理內(nèi)容包括相機(jī)標(biāo)定、相機(jī)參數(shù)設(shè)置、ROI設(shè)置、檢測(cè)流程設(shè)置、詳細(xì)參數(shù)設(shè)置等。
3.2.2 項(xiàng)目參數(shù)設(shè)置
設(shè)置相機(jī)曝光度、分辨率等,同大部分檢測(cè)程序相機(jī)參數(shù)設(shè)定;使用方框、圓、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域,完成ROI的設(shè)置。
3.2.3 圖像分析算法優(yōu)選
對(duì)于某一類問(wèn)題的圖像處理算法很多,但每種算法均具有一定的使用條件和場(chǎng)景,本模塊給系統(tǒng)維護(hù)人員提供了一系列篩選工具,在根據(jù)需求的基礎(chǔ)上,實(shí)施人員需要仔細(xì)甄別和優(yōu)選,對(duì)圖像處理算法進(jìn)行優(yōu)選組合,提高檢測(cè)精度。如:二值化處理算法中,封裝了簡(jiǎn)單閾值、自適應(yīng)閾值、Otsus二值化等方法,用戶可以根據(jù)圖像分析工具,查看處理結(jié)果,率定閾值和方法選擇。目前可供選擇的算法如表1所示。
3.2.4 機(jī)器學(xué)習(xí)
利用OPENCV提供的機(jī)器學(xué)習(xí)算法及python中numpy和scipy類庫(kù)提供的強(qiáng)大計(jì)算功能,使用一組樣本訓(xùn)練機(jī)器,記錄缺陷的特征值,使檢測(cè)程序在分析判斷時(shí)更準(zhǔn)確,減少誤檢和漏檢幾率。

表1 系統(tǒng)內(nèi)置算法一覽表
檢測(cè)程序用于實(shí)際檢測(cè),按照設(shè)置程序設(shè)置內(nèi)容,執(zhí)行檢測(cè)任務(wù),記錄檢測(cè)信息以及檢測(cè)信息的統(tǒng)計(jì)輸出等,功能包括系統(tǒng)自檢、檢測(cè)監(jiān)控和統(tǒng)計(jì)分析3部分,功能框圖如圖4所示。

圖4 檢測(cè)程序結(jié)構(gòu)及功能框圖
3.3.1 系統(tǒng)自測(cè)
檢測(cè)前的準(zhǔn)備工作,系統(tǒng)對(duì)檢測(cè)生產(chǎn)線上的軟硬件設(shè)備進(jìn)行檢測(cè),確認(rèn)所有指定的相機(jī)已經(jīng)開(kāi)啟。
3.3.2 檢測(cè)監(jiān)控
包括圖像采集顯示和檢測(cè)結(jié)果展示。前者是相機(jī)在對(duì)生產(chǎn)線上進(jìn)行圖像采集的同時(shí),需將采集的圖像一并清晰顯示在軟件界面上,以便使用者觀察當(dāng)前采集狀態(tài);后者是系統(tǒng)后臺(tái)對(duì)圖像進(jìn)行運(yùn)算處理,在準(zhǔn)確處理的基礎(chǔ)上,將實(shí)時(shí)檢測(cè)結(jié)果統(tǒng)計(jì)信息反饋在軟件界面上,以便使用者了解當(dāng)前處理信息。
3.3.3 統(tǒng)計(jì)分析
在系統(tǒng)運(yùn)行過(guò)程中,需每次對(duì)標(biāo)的處理結(jié)果進(jìn)行保存,并以報(bào)表的形式反饋給使用人員,以方便使用人員日后對(duì)檢測(cè)結(jié)果進(jìn)行分析核查。
利用PYTHON、C++和OPENCV及軟件模式等技術(shù)設(shè)計(jì)的用于中小代工企業(yè)產(chǎn)品缺陷檢測(cè)程序,有效地降低了程序開(kāi)發(fā)難度,破解了機(jī)器視覺(jué)系統(tǒng)軟件開(kāi)發(fā)過(guò)程中“一事一議”帶來(lái)的高成本問(wèn)題。為中小代工企業(yè)普及自動(dòng)化檢測(cè)系統(tǒng),進(jìn)行生產(chǎn)技術(shù)改造,提高生產(chǎn)的柔性和自動(dòng)化程度,具有一定的現(xiàn)實(shí)意義。同時(shí)試驗(yàn)程序?qū)Υ笮蜋C(jī)器視覺(jué)檢測(cè)系統(tǒng)的調(diào)研、實(shí)施和改造提供了強(qiáng)有力的支持。