器視覺工程應(yīng)用全解析:從成像系統(tǒng)到現(xiàn)場(chǎng)調(diào)試實(shí)戰(zhàn))
機(jī)器視覺這個(gè)概念在工程圈子里已經(jīng)不算新鮮詞了。連續(xù)幾年跟產(chǎn)線、設(shè)備、項(xiàng)目打交道的人多多少少都接觸過(guò)視覺檢測(cè)、定位引導(dǎo)這一類應(yīng)用。但要真把“機(jī)器視覺在工程領(lǐng)域的應(yīng)用研究”落實(shí)到一條具體的產(chǎn)線上你會(huì)發(fā)現(xiàn)它遠(yuǎn)不止“買套相機(jī)加個(gè)軟件跑個(gè)Demo”那么簡(jiǎn)單。技術(shù)體系怎么搭、硬件選型怎么算、現(xiàn)場(chǎng)調(diào)試怎么避坑、趨勢(shì)往哪個(gè)方向走每一項(xiàng)都有大量系統(tǒng)性的細(xì)節(jié)要處理。這篇文章從我在工程一線做視覺項(xiàng)目幾年下來(lái)的經(jīng)驗(yàn)出發(fā)把技術(shù)體系、實(shí)踐案例和后續(xù)趨勢(shì)串起來(lái)講一遍適合剛接觸視覺的工程師也適合已經(jīng)在做項(xiàng)目但想系統(tǒng)梳理細(xì)節(jié)的同行。1. 工程視角下的機(jī)器視覺技術(shù)體系先從體系說(shuō)起。很多人一提到機(jī)器視覺第一反應(yīng)是算法覺得只要把深度學(xué)習(xí)模型跑通就行。但真正在工程里交付一個(gè)視覺系統(tǒng)算法只是最后“點(diǎn)亮”那一下。一個(gè)能長(zhǎng)期穩(wěn)定運(yùn)行的視覺方案至少由四個(gè)部分構(gòu)成成像采集、計(jì)算平臺(tái)、算法軟件、工程集成。四者缺一不可哪個(gè)環(huán)節(jié)掉鏈子最后呈現(xiàn)的檢測(cè)效果都會(huì)跟著崩。下面把每一塊的實(shí)際作用和常見誤區(qū)攤開講。1.1 四大件缺一不可成像、算力、算法與集成的分工成像部分是視覺系統(tǒng)的眼睛由相機(jī)、鏡頭、光源一起組成。這里最容易出問(wèn)題的不是相機(jī)貴不貴而是三者有沒有針對(duì)同一個(gè)檢測(cè)目標(biāo)匹配到位。比如你要看一個(gè)5毫米見方的字符區(qū)域結(jié)果裝了顆500萬(wàn)像素的相機(jī)、配了個(gè)普通鏡頭還只用環(huán)境光照明拍出來(lái)的圖可能連字符和背景都分不開后面算法再?gòu)?qiáng)也是白搭。光源則常常是被低估的變量。以我在現(xiàn)場(chǎng)的經(jīng)驗(yàn)光源搞對(duì)了很多檢測(cè)難度直接下降一個(gè)量級(jí)光源沒搭配好后面調(diào)算法調(diào)到懷疑人生。一個(gè)視覺項(xiàng)目能不能順利交付在成像環(huán)節(jié)基本就能看出七成把握。計(jì)算平臺(tái)負(fù)責(zé)把圖像數(shù)據(jù)變成結(jié)果。傳統(tǒng)方案里用的是工控機(jī)或智能相機(jī)主要是跑CPU和GPU上的算子現(xiàn)在很多設(shè)備也直接嵌入到控制器里或者用邊緣計(jì)算盒子。選算力平臺(tái)時(shí)不能只看跑分還要看接口、實(shí)時(shí)性和工作溫度范圍。工業(yè)現(xiàn)場(chǎng)通常沒有機(jī)房空調(diào)設(shè)備動(dòng)不動(dòng)就在40度以上的環(huán)境里長(zhǎng)時(shí)間跑穩(wěn)定性比峰值性能更重要。我以前遇到過(guò)一臺(tái)工控機(jī)在常溫環(huán)境下跑測(cè)試模型速度飛快上了產(chǎn)線到下午就開始間歇性報(bào)錯(cuò)最后排查出來(lái)是散熱不足導(dǎo)致降頻。這個(gè)教訓(xùn)讓我后來(lái)選計(jì)算平臺(tái)都優(yōu)先看寬溫型號(hào)看實(shí)測(cè)負(fù)載曲線而不是看宣傳頁(yè)上的算力數(shù)字。算法軟件承擔(dān)核心處理邏輯包括傳統(tǒng)圖像處理算法和深度學(xué)習(xí)模型這部分后面專門展開。工程集成則涉及相機(jī)觸發(fā)、PLC通信、機(jī)器人交互、數(shù)據(jù)存儲(chǔ)等一系列非視覺但缺了就不轉(zhuǎn)的活。一套視覺系統(tǒng)的實(shí)際工作量統(tǒng)計(jì)下來(lái)我自己的經(jīng)驗(yàn)是算法只占四成左右剩下的都是成像調(diào)試、通信和穩(wěn)定性打磨。很多項(xiàng)目失敗不是敗在技術(shù)難度而是敗在“算法之外”的工程細(xì)節(jié)。換句話說(shuō)機(jī)器視覺在工程領(lǐng)域更像一個(gè)精密配合的系統(tǒng)而不是一個(gè)單純的軟件問(wèn)題。1.2 傳統(tǒng)算法與深度學(xué)習(xí)在工程現(xiàn)場(chǎng)不是取代關(guān)系在工程應(yīng)用里很多人有個(gè)誤區(qū)認(rèn)為深度學(xué)習(xí)一定比傳統(tǒng)算法高級(jí)。實(shí)際上對(duì)大量規(guī)則清晰、背景可控的檢測(cè)場(chǎng)景傳統(tǒng)算法更快、更穩(wěn)、更好解釋。比如說(shuō)透明玻璃瓶里的液位測(cè)量、圓形零件的外緣定位、固定位置上的Mark點(diǎn)識(shí)別這些場(chǎng)景用閾值分割、邊緣提取、Blob分析不僅速度快而且參數(shù)可解釋現(xiàn)場(chǎng)出了問(wèn)題也容易定位是哪個(gè)步驟的閾值漂了。尤其在做設(shè)備調(diào)試時(shí)傳統(tǒng)算法的每個(gè)中間結(jié)果都能可視化能直接看到是哪一步把邊緣弄丟了很方便。深度學(xué)習(xí)適合處理的是那些“規(guī)則說(shuō)不清楚”的場(chǎng)景比如隨機(jī)紋理上的劃傷、復(fù)雜的表面缺陷、遮擋情況下的目標(biāo)識(shí)別。這類場(chǎng)景寫規(guī)則能把你寫崩潰用深度模型反而一兩個(gè)月的標(biāo)注和訓(xùn)練就能達(dá)到可用的效果。需要注意的是深度學(xué)習(xí)模型對(duì)數(shù)據(jù)分布非常敏感產(chǎn)線上換了一種批次的材料表面反光特征變了模型就可能出現(xiàn)批量性誤判。所以我在方案設(shè)計(jì)時(shí)一般遵循一個(gè)原則能用規(guī)則說(shuō)清楚的優(yōu)先用傳統(tǒng)算法規(guī)則說(shuō)不清楚但樣本能覆蓋的再上深度學(xué)習(xí)。兩者在工程現(xiàn)場(chǎng)更多是組合關(guān)系而不是替代關(guān)系。很多實(shí)際交付的系統(tǒng)里都是先用傳統(tǒng)算法鎖候選區(qū)域再用深度學(xué)習(xí)模型做精細(xì)分類兩個(gè)環(huán)節(jié)配合起來(lái)又快又準(zhǔn)。1.3 工程集成穩(wěn)定比聰明更重要通信和時(shí)鐘機(jī)制要摳細(xì)視覺系統(tǒng)最終要服務(wù)于產(chǎn)線節(jié)拍和生產(chǎn)流程。如果相機(jī)是觸發(fā)式拍攝觸發(fā)信號(hào)怎么來(lái)、來(lái)了之后多久出結(jié)果、結(jié)果怎么發(fā)給PLC或機(jī)器人都必須提前約定清楚。這里我吃過(guò)虧某個(gè)檢測(cè)項(xiàng)本來(lái)模型推理很快但相機(jī)觸發(fā)一直被干擾信號(hào)誤觸發(fā)導(dǎo)致檢測(cè)結(jié)果和工件對(duì)不上產(chǎn)線前面堆了一大堆被誤判的料。后面加了硬件濾波、改成命令觸發(fā)模式問(wèn)題才徹底解決。這類問(wèn)題在實(shí)驗(yàn)室里根本復(fù)現(xiàn)不出來(lái)只有到了工業(yè)現(xiàn)場(chǎng)電機(jī)啟停、變頻器干擾、氣缸動(dòng)作全部疊加在一起才能暴露出來(lái)。集成層面還要注意視覺結(jié)果的一致性校驗(yàn)。簡(jiǎn)單說(shuō)就是視覺系統(tǒng)應(yīng)該把“拍了哪張圖、出了什么結(jié)果、當(dāng)前工件編號(hào)是什么”一起打包記錄。一旦出現(xiàn)誤判或漏判至少能回溯到具體的圖和當(dāng)時(shí)的參數(shù)狀態(tài)否則現(xiàn)場(chǎng)扯皮都找不到依據(jù)?,F(xiàn)在很多視覺軟件支持保存全分辨率原圖和輸出日志工程項(xiàng)目里我建議把這些功能當(dāng)成標(biāo)配而不是可選項(xiàng)。不要小看這份投入它省下來(lái)的是后面無(wú)數(shù)個(gè)售后電話。注意現(xiàn)場(chǎng)調(diào)試時(shí)保存圖像日志不是可選項(xiàng)。排查誤檢時(shí)沒有原始圖像就等于沒有依據(jù)再好的算法專家來(lái)了也只能干瞪眼。2. 從產(chǎn)線中來(lái)四類最有代表性的工程實(shí)踐技術(shù)體系講完必須落到場(chǎng)景。工程領(lǐng)域里視覺應(yīng)用看著五花八門拆開來(lái)看核心就四類缺陷檢測(cè)、測(cè)量定位、機(jī)器人引導(dǎo)、讀碼溯源。把這四類吃透絕大多數(shù)項(xiàng)目都能往這些框架里套。每一類都有不同的難點(diǎn)和驗(yàn)收邏輯下面結(jié)合我做過(guò)的具體項(xiàng)目逐個(gè)說(shuō)明。2.1 缺陷檢測(cè)類制造業(yè)里最剛需也最磨人的場(chǎng)景缺陷檢測(cè)是視覺應(yīng)用最大的一塊需求也是最容易“項(xiàng)目一直調(diào)不齊”的領(lǐng)域。以某汽車零部件供應(yīng)商的密封圈外觀檢測(cè)為例檢測(cè)項(xiàng)包括表面缺口、飛邊、劃痕、異物和色差?,F(xiàn)場(chǎng)用的是背光加環(huán)形光的組合方案背光負(fù)責(zé)找輪廓和外部缺陷環(huán)形低角度光負(fù)責(zé)找表面紋理缺陷。一開始只靠傳統(tǒng)閾值分割做飛邊和陰影混在一起誤檢率特別高。后來(lái)把疑似區(qū)域單獨(dú)裁剪出來(lái)用一個(gè)輕量分類模型做二次確認(rèn)誤檢率從8%壓到了1%以下節(jié)拍還能保持在每分鐘120個(gè)。這類項(xiàng)目有一個(gè)共性要點(diǎn)缺陷樣本的收集永遠(yuǎn)比算法調(diào)參重要。項(xiàng)目調(diào)試初期要花大量時(shí)間去現(xiàn)場(chǎng)收集真實(shí)的NG品和對(duì)應(yīng)的OK品越多越好特別是不同角度、不同光照下的樣本。只靠幾張測(cè)試圖做出來(lái)的算法上了產(chǎn)線大概率會(huì)被現(xiàn)實(shí)拍臉。缺陷檢測(cè)最難的地方在于“類內(nèi)差異大”同樣一道劃傷有時(shí)候是細(xì)線有時(shí)候是暗塊有時(shí)候幾乎看不見如果樣本里沒有覆蓋這些變化模型再怎么調(diào)都只是在盲人摸象。所以我?guī)ы?xiàng)目時(shí)都會(huì)強(qiáng)制安排一到兩周的現(xiàn)場(chǎng)樣本采集期這段時(shí)間看起來(lái)沒產(chǎn)出其實(shí)是在為后期調(diào)試鋪路。2.2 測(cè)量與定位類精度是硬指標(biāo)像素級(jí)技巧決定成敗測(cè)量類應(yīng)用對(duì)精度的要求最直接。某連接器生產(chǎn)線上需要測(cè)PIN針的間距和高度差公差要求±0.02mm。500萬(wàn)像素相機(jī)在50mm×40mm視野下每個(gè)像素對(duì)應(yīng)的物理尺寸大概0.01mm理論精度看起來(lái)夠但還要考慮鏡頭畸變、安裝傾斜、工件起伏這些現(xiàn)實(shí)誤差。我們當(dāng)時(shí)用高精度棋盤格標(biāo)定板做了標(biāo)定把畸變系數(shù)帶入矯正然后測(cè)量時(shí)才把重復(fù)性穩(wěn)定在0.008mm以內(nèi)。如果少了標(biāo)定這一步直接用像素坐標(biāo)折算物理尺寸結(jié)果可能差出好幾倍。這種情況下一定要區(qū)分“分辨率”和“精度”兩個(gè)概念。分辨率代表一個(gè)像素對(duì)應(yīng)的物理長(zhǎng)度但精度是多次測(cè)量結(jié)果與真實(shí)值的偏差兩者之間還有亞像素算法、標(biāo)定誤差、光源波動(dòng)等一大堆影響因素。做方案評(píng)估時(shí)不要只盯著分辨率算一遍就拍板最好用實(shí)物樣件在目標(biāo)光源條件下做一次重復(fù)性測(cè)試。測(cè)量類項(xiàng)目驗(yàn)收時(shí)還有一個(gè)容易被忽略的點(diǎn)要明確是“靜態(tài)重復(fù)性”還是“動(dòng)態(tài)重復(fù)性”。工件在運(yùn)動(dòng)狀態(tài)下拍攝成像有運(yùn)動(dòng)模糊測(cè)量值會(huì)比靜態(tài)時(shí)分散很多如果產(chǎn)線不能完全停穩(wěn)拍必須把這個(gè)因素提前考慮進(jìn)精度預(yù)算里。2.3 引導(dǎo)與識(shí)別類讓機(jī)器人長(zhǎng)眼睛的關(guān)鍵技術(shù)機(jī)器人引導(dǎo)是機(jī)器視覺最有“智能感”的應(yīng)用常見場(chǎng)景包括抓取上下料、裝配對(duì)位、無(wú)序分揀核心是把相機(jī)坐標(biāo)系下的目標(biāo)位置轉(zhuǎn)換到機(jī)器人坐標(biāo)系下這一步依賴手眼標(biāo)定。最穩(wěn)妥的做法是用標(biāo)定板做九點(diǎn)標(biāo)定加旋轉(zhuǎn)中心標(biāo)定把二維位置和角度偏差都補(bǔ)償?shù)簟,F(xiàn)場(chǎng)標(biāo)定時(shí)要注意標(biāo)定板固定在桌面上不能移動(dòng)機(jī)器人要在多個(gè)點(diǎn)位記錄對(duì)應(yīng)的像素坐標(biāo)和機(jī)械坐標(biāo)。標(biāo)定的本質(zhì)是找一個(gè)坐標(biāo)系之間的變換關(guān)系所以標(biāo)定點(diǎn)位選得越均勻、覆蓋范圍越大結(jié)果越準(zhǔn)。如果目標(biāo)是三維抓取就要引入3D相機(jī)和點(diǎn)云處理了復(fù)雜度比2D高不少。對(duì)大多數(shù)規(guī)則零件2D視覺加固定高度的假設(shè)就能滿足抓取需求不需要為了“看起來(lái)高級(jí)”強(qiáng)行上3D方案。我在某3C裝配線上做過(guò)一個(gè)螺絲鎖付引導(dǎo)就是2D相機(jī)配合機(jī)器人通過(guò)識(shí)別螺絲孔中心坐標(biāo)引導(dǎo)電批過(guò)去精度0.3mm以內(nèi)項(xiàng)目交付后運(yùn)行非常穩(wěn)定。建議先用最簡(jiǎn)方案滿足核心需求再考慮擴(kuò)展。引導(dǎo)類項(xiàng)目和檢測(cè)類項(xiàng)目的驗(yàn)收邏輯也不一樣檢測(cè)要的是“不誤不漏”引導(dǎo)要的是“位置準(zhǔn)確且響應(yīng)快”這些差異在需求階段就要對(duì)齊否則做到后期才發(fā)現(xiàn)方向不對(duì)返工成本很高。2.4 讀碼與溯源類看著簡(jiǎn)單實(shí)際全是坑讀碼在包裝、物流、電子行業(yè)里很常見難度看起來(lái)低真正做好了也不容易。產(chǎn)線上條碼可能有臟污、遮擋、打印對(duì)比度不足、曲面反光等問(wèn)題再加上條碼尺寸多變對(duì)讀碼器的景深要求很高。某鋰電池模組廠需要在裝配線上讀DPM碼直接零件標(biāo)記碼一開始因?yàn)榇虼a位置邊緣反光嚴(yán)重普通讀碼器的讀取率只有95%。后面換了一款支持偏振光配件的讀碼器配合特定角度安裝讀取率才提升到99.9%以上。這種情況如果只靠算法去優(yōu)化收效甚微換成像配件和安裝方式才是治本。讀碼項(xiàng)目的驗(yàn)收標(biāo)準(zhǔn)一定要事先談清楚比讀碼率更重要的一層誤讀率。讀不出來(lái)還能人工處理讀錯(cuò)碼會(huì)直接導(dǎo)致追溯數(shù)據(jù)錯(cuò)亂處理成本高得多。所以現(xiàn)場(chǎng)調(diào)試的重點(diǎn)不是把成功率從95%拉到99%而是先確認(rèn)誤讀率低到可以接受。讀碼系統(tǒng)通常還要跟MES或WMS系統(tǒng)對(duì)接所以通信協(xié)議、數(shù)據(jù)位長(zhǎng)度、觸發(fā)時(shí)序都要在開發(fā)前定好。我見過(guò)一個(gè)項(xiàng)目讀碼器本身表現(xiàn)很好但因?yàn)镻LC那邊解析字節(jié)序沒對(duì)齊導(dǎo)致產(chǎn)品二維碼信息串位查了好幾天才發(fā)現(xiàn)是字節(jié)序問(wèn)題這類系統(tǒng)層面的坑不比成像少。3. 一次工程落地的完整實(shí)操?gòu)?fù)盤上面講的都是場(chǎng)景片段接下來(lái)我把一次典型的工程落地過(guò)程完整拆一遍。這套流程我做了很多次基本可以當(dāng)成一個(gè)標(biāo)準(zhǔn)動(dòng)作來(lái)用。從需求澄清到選型、成像、調(diào)試每一步都有明確的輸入和輸出只要按流程走項(xiàng)目的成功率會(huì)有明顯提升。3.1 需求澄清先別談技術(shù)把“驗(yàn)收標(biāo)準(zhǔn)”這件事聊透所有項(xiàng)目的第一步都是需求澄清這一點(diǎn)怎么強(qiáng)調(diào)都不過(guò)分。要搞清楚幾個(gè)關(guān)鍵參數(shù)檢測(cè)對(duì)象的最小特征尺寸是多少節(jié)拍要求是多少秒一件可接受的漏檢率和誤檢率分別是多少現(xiàn)場(chǎng)的光照、溫度、震動(dòng)、空間尺寸如何設(shè)備操作人員的技術(shù)水平怎么樣。漏檢率和誤檢率一定要分開談很多時(shí)候客戶嘴上說(shuō)“不能漏也不能誤”現(xiàn)實(shí)里兩者存在矛盾漏檢壓得太低往往是以誤檢率升高為代價(jià)的。我通常會(huì)在需求階段就把方案指標(biāo)寫成一張表格明確每個(gè)檢測(cè)項(xiàng)目的判定標(biāo)準(zhǔn)、處理動(dòng)作、樣本要求。比如某個(gè)表面缺陷檢測(cè)項(xiàng)目我會(huì)和客戶約定劃傷長(zhǎng)度大于1mm判NG小于1mm判OK表面色斑面積超過(guò)0.5mm2判NG檢測(cè)節(jié)拍2秒以內(nèi)誤檢率目標(biāo)小于2%漏檢率目標(biāo)小于0.1%。這種白紙黑字的約定看著繁瑣但對(duì)后續(xù)開發(fā)和驗(yàn)收幫助非常大。說(shuō)白了需求澄清是在給項(xiàng)目劃邊界邊界越清楚后面技術(shù)方案越好做。提示漏檢率和誤檢率是兩個(gè)獨(dú)立指標(biāo)簽技術(shù)協(xié)議時(shí)一定要分開寫清楚。含糊的“盡量少誤判”最后一定會(huì)變成扯皮現(xiàn)場(chǎng)。3.2 相機(jī)、鏡頭與光源選型按這五個(gè)步驟走基本不會(huì)翻車選型的核心是拿實(shí)際需求推參數(shù)。第一步確認(rèn)最小的檢測(cè)特征尺寸。第二步確認(rèn)視野范圍。第三步計(jì)算需要的分辨率公式是視野除以最小特征尺寸再乘上魯棒性系數(shù)一般取3到5倍。舉個(gè)例子要檢測(cè)視野100mm×80mm范圍內(nèi)的0.1mm劃傷按4倍系數(shù)算X方向需要100/0.1×44000個(gè)像素所以500萬(wàn)像素2448×2048級(jí)別的相機(jī)是比較穩(wěn)妥的選擇分辨率再低細(xì)節(jié)就壓不住了。這個(gè)系數(shù)的意義在于給算法留下處理余地實(shí)際檢測(cè)時(shí)亞像素和邊緣模糊都會(huì)吃掉一部分有效信息。第四步根據(jù)工作距離選鏡頭。焦距由視野和傳感器尺寸共同決定近似公式是焦距工作距離×傳感器寬度÷視野寬度。假設(shè)傳感器寬度8.8mm工作距離200mm視野寬度100mm焦距約為17.6mm對(duì)應(yīng)選擇16mm或25mm定焦鏡頭再根據(jù)實(shí)際距離微調(diào)。用定焦鏡頭而不是變焦鏡頭是因?yàn)槎ń诡^畸變更小、穩(wěn)定性更高工程現(xiàn)場(chǎng)要盡量避免使用變焦。鏡頭接口和靶面尺寸也得匹配小傳感器配大鏡頭沒問(wèn)題但大傳感器配小鏡頭會(huì)出現(xiàn)暗角這個(gè)問(wèn)題在選型時(shí)就要查清楚。第五步定光源類型。檢測(cè)透明物體選背光檢測(cè)邊緣輪廓選低角度環(huán)形光檢測(cè)反光表面的文字和缺陷選同軸光檢測(cè)大平面均勻顏色選穹頂光或條形光加擴(kuò)散板。現(xiàn)場(chǎng)條件復(fù)雜時(shí)建議先裝上相機(jī)用不同光源做拍攝對(duì)比測(cè)試再最終敲定。選型最忌拍腦袋一定要用實(shí)物樣件在模擬光線下讓效果說(shuō)話。光源控制器最好選帶恒流驅(qū)動(dòng)和外部觸發(fā)功能的型號(hào)這樣可以把光源頻閃和相機(jī)曝光同步起來(lái)既能提高亮度又不會(huì)過(guò)度發(fā)熱。3.3 打光與成像視覺系統(tǒng)的靈魂也是最費(fèi)時(shí)間的環(huán)節(jié)很多新手拿到相機(jī)后第一件事是調(diào)算法這是順序反了。成像質(zhì)量沒到位算法做再多都是修修補(bǔ)補(bǔ)。正確順序是先打光再調(diào)焦再找曝光再拍樣本最后才寫算法。打光的目的不是“亮”而是把需要的特征和背景的對(duì)比度拉開。表面劃傷一般用低角度光把缺陷投影成暗線平整表面上的鼓包則相反用同軸光或者高角度光能讓鼓包產(chǎn)生明暗變化。光的入射角度、距離、顏色都會(huì)影響成像結(jié)果現(xiàn)場(chǎng)需要反復(fù)試沒有捷徑。調(diào)成像的時(shí)候我習(xí)慣記錄一組“固定參數(shù)”比如相機(jī)增益、曝光時(shí)間、光源亮度、光圈大小。這些參數(shù)一旦定下來(lái)就盡量寫死在程序里防止誤動(dòng)。實(shí)際運(yùn)行中如果光照環(huán)境有緩慢變化可以加入基于灰度均值的自動(dòng)曝光補(bǔ)償?shù)欢ㄒO(shè)置好上下限避免極端情況下的補(bǔ)償跑飛。成像環(huán)節(jié)做到位后面算法的效果往往是一馬平川。反過(guò)來(lái)說(shuō)如果圖像對(duì)比度不夠哪怕算法里加再多濾波和形態(tài)學(xué)操作也只會(huì)越修越奇怪。我常跟團(tuán)隊(duì)講一句話圖像里沒有的信息算法永遠(yuǎn)找不回來(lái)。3.4 現(xiàn)場(chǎng)調(diào)試與優(yōu)化小步快跑逐步收斂算法調(diào)試時(shí)不要一上來(lái)就在全圖上跑重型的深度模型。先用ROI把有效區(qū)域裁剪出來(lái)通常只需處理整幅圖的20%~30%速度能快好幾倍誤檢率也會(huì)下降因?yàn)榕懦舜罅繜o(wú)關(guān)背景。傳統(tǒng)的邊緣提取、閾值、形態(tài)學(xué)處理這些步驟建議在軟件里做成可視化的參數(shù)節(jié)點(diǎn)一邊滑參數(shù)一邊看結(jié)果現(xiàn)場(chǎng)調(diào)起來(lái)效率特別高。這種交互方式能讓你快速感知參數(shù)變化和結(jié)果之間的敏感性找到最穩(wěn)妥的取值區(qū)間。深度模型訓(xùn)練時(shí)數(shù)據(jù)要分成訓(xùn)練集、驗(yàn)證集、測(cè)試集訓(xùn)練集用來(lái)學(xué)特征驗(yàn)證集用來(lái)調(diào)超參數(shù)測(cè)試集留到最后評(píng)估真實(shí)效果。工程上建議測(cè)試集放一定比例的“未見過(guò)”的現(xiàn)場(chǎng)圖片也就是那些在調(diào)參過(guò)程中從未被人工篩選過(guò)的連續(xù)拍攝圖片這樣子訓(xùn)練出來(lái)的模型才經(jīng)得起產(chǎn)線連軸轉(zhuǎn)的考驗(yàn)。整個(gè)調(diào)試過(guò)程要有日志今天改了什么參數(shù)、調(diào)了什么閾值、效果如何全部記錄排查問(wèn)題時(shí)能省不少時(shí)間。我見過(guò)太多項(xiàng)目調(diào)到最后參數(shù)滿天飛誰(shuí)也不知道哪個(gè)版本有效果最后只能重來(lái)一遍。調(diào)試日志這個(gè)東西平時(shí)感覺不到價(jià)值一旦出問(wèn)題就是救命稻草。4. 踩坑實(shí)錄典型問(wèn)題與排查技巧做視覺項(xiàng)目沒有不踩坑的。下面這些坑我基本都踩過(guò)而且很多不是一次是反復(fù)踩。整理成速查表供參考希望能幫同行少走彎路。視覺系統(tǒng)在實(shí)驗(yàn)室跑得好到產(chǎn)線就出問(wèn)題這是常態(tài)關(guān)鍵是要有一套系統(tǒng)性的排查思路而不是頭痛醫(yī)頭腳痛醫(yī)腳。4.1 光照變化帶來(lái)的“薛定諤”誤檢最經(jīng)典的現(xiàn)場(chǎng)問(wèn)題白天調(diào)試好好的閾值到了晚上或第二天同一時(shí)段誤檢率突然飆升。原因多數(shù)是環(huán)境光變化比如門口的陽(yáng)光角度變了、旁邊設(shè)備指示燈亮了、頂棚照明燈管老化。解決思路從重到輕有幾種一是物理隔光把檢測(cè)區(qū)域用遮光罩圍起來(lái)這是最徹底的辦法二是選用帶偏振或特定波長(zhǎng)的光源減少環(huán)境光的干擾三是做灰度統(tǒng)計(jì)監(jiān)控當(dāng)圖像亮度偏離基準(zhǔn)值超過(guò)設(shè)定范圍時(shí)主動(dòng)報(bào)警提醒操作人員檢查環(huán)境或觸發(fā)參數(shù)切換。提示遮光罩雖然不“智能”但永遠(yuǎn)是最可靠的抗干擾手段之一。很多高級(jí)算法解決不了的光照波動(dòng)一塊亞克力板就搞定了。4.2 標(biāo)定誤差你以為對(duì)中了其實(shí)偏了機(jī)器人和視覺之間的坐標(biāo)變換看著是矩陣計(jì)算的事實(shí)際誤差來(lái)源非常多。標(biāo)定板不平整、標(biāo)定板放置位置與工件平面有高度差、機(jī)器人本身存在連桿誤差都會(huì)引入偏差。降低標(biāo)定誤差的經(jīng)驗(yàn)是標(biāo)定板要大覆蓋到實(shí)際工件可能出現(xiàn)的全部區(qū)域標(biāo)定點(diǎn)位要多至少分布整個(gè)視野的九宮格標(biāo)定完成后要用真實(shí)工件做幾個(gè)點(diǎn)位驗(yàn)證而不是只看標(biāo)定誤差報(bào)告。我之前遇到過(guò)一個(gè)項(xiàng)目標(biāo)定報(bào)告顯示誤差只有0.05mm但實(shí)際引導(dǎo)抓取時(shí)總是偏2mm后來(lái)發(fā)現(xiàn)是標(biāo)定板所在高度和實(shí)際抓取高度差了30mm導(dǎo)致透視誤差被放大。4.3 節(jié)拍不夠視覺系統(tǒng)成了產(chǎn)線的瓶頸算法調(diào)好后發(fā)現(xiàn)相機(jī)曝光20毫秒、傳輸30毫秒、推理50毫秒加起來(lái)已經(jīng)超過(guò)要求的節(jié)拍。優(yōu)化手段按性價(jià)比排序第一縮小ROI區(qū)域很多時(shí)候推理時(shí)間能減少一半第二降低圖像尺寸或改用中值濾波等輕量算子第三把預(yù)處理和推理放到不同線程并行第四考慮使用GPU或?qū)S玫纳疃葘W(xué)習(xí)推理加速卡。如果硬件實(shí)在無(wú)法更換也可以在流程上做軟件觸發(fā)預(yù)拍把節(jié)拍壓力均攤開。判斷瓶頸在哪一步最直接的辦法就是打時(shí)間戳分別統(tǒng)計(jì)采集、傳輸、處理、輸出每個(gè)環(huán)節(jié)的耗時(shí)先優(yōu)化占比最大的那一段。4.4 深度模型的數(shù)據(jù)陷阱樣本多不等于效果好訓(xùn)練數(shù)據(jù)不是多多益善質(zhì)量分布才是關(guān)鍵。我見過(guò)一個(gè)項(xiàng)目客戶給了幾千張圖片缺陷樣張占了三成但模型訓(xùn)練完上線檢測(cè)真實(shí)的淺劃傷時(shí)表現(xiàn)很差。原因是從工廠實(shí)際過(guò)程來(lái)看淺劃傷本來(lái)就是小概率事件而客戶給的樣本里大量是重度缺陷的圖模型只學(xué)會(huì)了“認(rèn)重傷”對(duì)輕傷無(wú)感。正確做法是先統(tǒng)計(jì)真實(shí)產(chǎn)線上的缺陷分布再按比例采集和標(biāo)注寧可數(shù)量少一些也要保證覆蓋各種嚴(yán)重程度、角度、光照條件下的范例。數(shù)據(jù)標(biāo)注也要定期抽檢一致性兩個(gè)人標(biāo)同一張圖可能一個(gè)標(biāo)NG一個(gè)標(biāo)OK這種標(biāo)注噪聲會(huì)讓模型訓(xùn)練非常不穩(wěn)定。4.5 常見問(wèn)題速查表為了方便現(xiàn)場(chǎng)排查我把上面幾類問(wèn)題整理成一張速查表遇到現(xiàn)象可以直接對(duì)照可能原因去找方向。問(wèn)題現(xiàn)象可能原因排查與解決思路白天穩(wěn)定晚上誤檢多環(huán)境光照變化遮光罩、偏振光、曝光補(bǔ)償加報(bào)警視覺定位但機(jī)器人抓偏手眼標(biāo)定不準(zhǔn)重新標(biāo)定、增加點(diǎn)位、檢查高度差檢測(cè)速度跟不上節(jié)拍算法開銷大縮小ROI、輕量算子、多線程并行深度學(xué)習(xí)模型表面效果好但現(xiàn)場(chǎng)崩訓(xùn)練數(shù)據(jù)分布失真按現(xiàn)場(chǎng)缺陷分布重新采集數(shù)據(jù)誤檢率高且隨機(jī)出現(xiàn)無(wú)明顯規(guī)律的干擾保存圖像日志、回溯異常樣本、加硬件抗擾相機(jī)畫面嚴(yán)重閃爍供電不穩(wěn)或光源頻閃獨(dú)立供電、加濾波、檢查光源驅(qū)動(dòng)5. 趨勢(shì)觀察機(jī)器視覺在工程領(lǐng)域的下一步前面講技術(shù)和案例最后聊一點(diǎn)趨勢(shì)。這部分更多是個(gè)人觀察不一定都對(duì)但可參考。機(jī)器視覺行業(yè)變化很快每年都有新概念出來(lái)但真正在工程現(xiàn)場(chǎng)留下來(lái)的一定是那些能解決實(shí)際問(wèn)題、控制好成本的東西。5.1 3D視覺正在從“高科技標(biāo)簽”變成“常規(guī)選項(xiàng)”過(guò)去3D視覺主要用于高端汽車和半導(dǎo)體行業(yè)成本高、部署復(fù)雜。近兩三年硬件價(jià)格明顯下降點(diǎn)云處理算法也越來(lái)越成熟普通3C裝配線、物流分揀、無(wú)序抓取類項(xiàng)目已經(jīng)開始大量采用3D方案。3D視覺的優(yōu)勢(shì)是能直接獲取高度、角度、平面度信息解決2D面對(duì)反光、遮擋、堆疊時(shí)的先天不足。但3D方案對(duì)部署環(huán)境的要求也比較高比如反光物體容易產(chǎn)生大量無(wú)效點(diǎn)云深色物體受環(huán)境光影響大這些都需要在項(xiàng)目評(píng)估階段做專門的驗(yàn)證。我覺得未來(lái)項(xiàng)目選型時(shí)3D會(huì)成為一個(gè)默認(rèn)考慮項(xiàng)但最終是否采用還是要看成本和回報(bào)。盲目堆3D只會(huì)讓項(xiàng)目復(fù)雜度上升實(shí)際收益卻未必比優(yōu)化過(guò)的2D方案高。5.2 算法與硬件融合視覺系統(tǒng)往端側(cè)和專用化方向走原來(lái)一臺(tái)高性能工控機(jī)掛工業(yè)相機(jī)是標(biāo)配現(xiàn)在越來(lái)越多的智能相機(jī)、邊緣計(jì)算盒子、一體化視覺傳感器出現(xiàn)在項(xiàng)目中。它們的共同特點(diǎn)是集成度更高、功耗更低、部署更方便特別適合改造項(xiàng)目。缺點(diǎn)是算法靈活性有限換一個(gè)檢測(cè)思路往往需要換設(shè)備或升級(jí)固件。所以在為新項(xiàng)目選型時(shí)要看產(chǎn)品后續(xù)的可維護(hù)性和算法擴(kuò)展能力而不能只看第一次采購(gòu)便宜。端側(cè)智能帶來(lái)的另一個(gè)變化是部署門檻降低車間電工也能按說(shuō)明書配好一臺(tái)智能相機(jī)視覺工程師的角色會(huì)更往“定義檢測(cè)邏輯”和“調(diào)優(yōu)圖像鏈路”這兩個(gè)方向上聚焦。5.3 從單機(jī)智能到系統(tǒng)智能視覺數(shù)據(jù)開始和產(chǎn)線數(shù)據(jù)打通以前視覺系統(tǒng)就是一個(gè)“檢測(cè)工具”出結(jié)果就完事?,F(xiàn)在的趨勢(shì)是視覺結(jié)果會(huì)和設(shè)備運(yùn)行數(shù)據(jù)、工藝參數(shù)、質(zhì)量追溯系統(tǒng)聯(lián)在一起形成一個(gè)完整的質(zhì)量閉環(huán)。比如某個(gè)批次材料表面缺陷多了系統(tǒng)不但能在線上攔截還能自動(dòng)統(tǒng)計(jì)缺陷類型和發(fā)生趨勢(shì)反饋給前面工藝環(huán)節(jié)進(jìn)行調(diào)整。這意味著視覺工程師除了算法也要開始了解工業(yè)通信協(xié)議、數(shù)據(jù)中臺(tái)、數(shù)據(jù)庫(kù)設(shè)計(jì)這些底層能力。工程師的能力模型正在變寬這對(duì)從業(yè)者來(lái)說(shuō)既是挑戰(zhàn)也是機(jī)會(huì)。只會(huì)調(diào)算法的人以后可能會(huì)越來(lái)越難單獨(dú)撐起一個(gè)項(xiàng)目能理解產(chǎn)線整體邏輯的人才反而更吃香。5.4 工具鏈和標(biāo)準(zhǔn)化的成熟讓項(xiàng)目交付越來(lái)越“工程化”早年做視覺項(xiàng)目靠的是個(gè)人經(jīng)驗(yàn)和一堆腳本項(xiàng)目之間復(fù)用性很低。這幾年各家廠商都推出了相對(duì)統(tǒng)一的視覺開發(fā)平臺(tái)內(nèi)置了圖像采集、標(biāo)定、測(cè)量、識(shí)別、深度學(xué)習(xí)訓(xùn)練的一整套工具鏈開發(fā)效率高了不少項(xiàng)目交付越來(lái)越像搭積木。標(biāo)準(zhǔn)化帶來(lái)的好處是穩(wěn)定性和可維護(hù)性大幅提升對(duì)甲方、乙方都是好事。當(dāng)然平臺(tái)化也會(huì)帶來(lái)門檻放低的副作用進(jìn)這個(gè)行業(yè)的人越來(lái)越多競(jìng)爭(zhēng)也更激烈。想在這個(gè)領(lǐng)域保持優(yōu)勢(shì)還得在成像系統(tǒng)設(shè)計(jì)和深入場(chǎng)景的算法能力上多做積累這兩塊是短期內(nèi)不容易被平臺(tái)替代的。平臺(tái)能幫你把標(biāo)準(zhǔn)動(dòng)作做好但真正決定項(xiàng)目上限的還是對(duì)成像的理解和對(duì)場(chǎng)景的洞察。順帶說(shuō)一句我在這行做了這么些年最深的一個(gè)體會(huì)是機(jī)器視覺工程里最值錢的不是某個(gè)算法多新多炫而是對(duì)現(xiàn)場(chǎng)問(wèn)題的判斷和經(jīng)驗(yàn)積累。參數(shù)選型會(huì)算一遍、算法框架會(huì)用一套這些都可以學(xué)但“知道這個(gè)坑在哪個(gè)環(huán)節(jié)”這件事真的只有下現(xiàn)場(chǎng)才能練出來(lái)。希望這篇文章能幫準(zhǔn)備入行或正在做項(xiàng)目的同學(xué)少走一點(diǎn)彎路也歡迎有同類經(jīng)歷的同行多交流畢竟視覺這條路上的坑一個(gè)人踩太虧了。