關(guān) 閉

        新聞中心

        EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 瑞薩AI視覺識(shí)別方案應(yīng)用筆記2

        瑞薩AI視覺識(shí)別方案應(yīng)用筆記2

        —— 高效二維碼檢測
        作者:瑞薩電子中國 MPU產(chǎn)品部 高級(jí)經(jīng)理 劉剛 時(shí)間:2021-09-03 來源:電子產(chǎn)品世界 收藏

        話不多說,我們開始拆解如何使用RZ/A2M的DRP實(shí)現(xiàn)在8ms時(shí)間內(nèi)檢測5中不同編碼格式的

        本文引用地址:http://www.104case.com/article/202109/427998.htm

        又稱二維條碼,常見的為QR Code,QR全稱Quick Response,是一個(gè)近幾年來移動(dòng)設(shè)備上非常流行的一種編碼方式,它比傳統(tǒng)的Bar Code條形碼能存更多的信息,也能表示更多的數(shù)據(jù)類型。除了這種常見的QR Code之外,還有一些其它編碼格式的二維碼,例如Micro QR Code, DataMatrix, AZTec和漢信碼等等,因此要求掃碼槍能夠識(shí)別多種不同編碼的二維碼。 常規(guī)的操作是循環(huán)調(diào)用不同解碼器,逐一用不同的解碼器進(jìn)行檢測和解碼,但導(dǎo)致的問題是解碼時(shí)間不穩(wěn)定性與解碼時(shí)間偏長,如果能夠在解碼之前快速識(shí)別出二維碼的編碼格式,然后有針對(duì)性的調(diào)用對(duì)應(yīng)的解碼器,則會(huì)大大提高解碼效率。

        瑞薩的RZ/A2M微處理器可以利用其獨(dú)特的動(dòng)態(tài)可配置處理器(DRP)完美解決這一問題,實(shí)現(xiàn)了1280x720(1百萬)攝像頭輸入時(shí),在8ms時(shí)間內(nèi)完成QR ,Micro QR, DataMatrix, AZTec 和漢信碼5種編碼格式的快速識(shí)別,下面讓我們看一下DRP是如何實(shí)現(xiàn)的。

        以下是示例中用到的5種二維碼的圖例,我們將利用DRP的圖像處理加速功能識(shí)別每種編碼格式的特征

        1630638420631081.png

        我們將通過9個(gè)步驟的數(shù)據(jù)處理,逐步從MIPI接口輸入的圖像數(shù)據(jù)中提取出我們希望得到的特征標(biāo)識(shí)。

        在這9個(gè)數(shù)據(jù)處理環(huán)節(jié)中,大部分由DRP硬件加速模塊處理(藍(lán)色),少量過程由CPU進(jìn)行處理(綠色),在此期間我們可以看到硬件DRP處理和軟件CPU處理之間的靈活搭配與無縫對(duì)接。

        1630638439249627.png

        步驟1

        為了加快圖像的處理速度,我們會(huì)先載入一個(gè)Bayer2GrayThinning的DRP加速庫將圖像的分辨率降采樣為原始大小的1/4,同時(shí)完成圖像格式從Bayer到灰度圖的轉(zhuǎn)換并統(tǒng)計(jì)每幀圖像的亮度值,我們會(huì)將這個(gè)亮度的統(tǒng)計(jì)結(jié)果反饋給CMOS傳感器用于調(diào)整自動(dòng)曝光參數(shù)。

        image.png

        由于Bayer2GrayThinning庫只占用1個(gè)Tile的DRP硬件資源,在此步驟中利用DRP的多Tile并行處理特性將每一幀1280x768的圖像分成6個(gè)1280x128的區(qū)域,由6個(gè)DRP處理單元進(jìn)行并行化處理,這樣處理速度可增加為原來的6倍,而且每個(gè)處理單元內(nèi)部的像素級(jí)處理也是并行化的。

        1630638515439991.png

        利用DRP的這兩個(gè)并行化特性,我們可以在0.6ms的時(shí)間內(nèi)完成1幀1280x768分辨率圖像的處理,包含0.2ms的DRP庫載入時(shí)間和0.4ms的圖像數(shù)據(jù)處理時(shí)間。經(jīng)過步驟1的處理我們得到一個(gè)320x192的灰度圖。

        image.png

        步驟2

        得到灰度圖后我們加載一個(gè)binarization_adaptive的DRP庫,將圖像轉(zhuǎn)換為只有0x00和0xFF兩種顏色的黑白圖像。這個(gè)DRP庫可以根據(jù)每個(gè)8x8像素區(qū)域的灰度值平均值動(dòng)態(tài)計(jì)算二值化的閾值,這樣可以有效解決不同亮度的場景中二值化閾值該如何選擇的問題。

        image.png

        我們可以設(shè)置二值化轉(zhuǎn)換的參數(shù),控制輸出圖像以反轉(zhuǎn)方式輸出,即二維碼圖像中黑色部分輸出為白色,這樣方便下一步對(duì)白色部分提取輪廓信息。步驟2的總處理時(shí)間是0.9ms左右,包含0.6ms的DRP庫載入時(shí)間和0.3ms的圖像數(shù)據(jù)處理時(shí)間。

        image.png

        步驟3

        得到二值化圖像后我們?cè)佥d入一個(gè)Dialte的DRP庫實(shí)現(xiàn)膨脹功能,其基本實(shí)現(xiàn)原理如下;

        image.png

        ■   用3x3區(qū)塊以步長為1像素掃描輸入圖像

        ■   掃描窗口中心點(diǎn)的新數(shù)據(jù)輸出值為3x3范圍內(nèi)的最大值

        ■   實(shí)現(xiàn)效果:將白色擴(kuò)展,吞并被包圍的黑色區(qū)域

        ■   可配置迭代次數(shù),次數(shù)越多,白色擴(kuò)展范圍越大

        經(jīng)過膨脹處理后的圖像中,包含二維碼數(shù)據(jù)的區(qū)域基本被聯(lián)通,形成一個(gè)包含整個(gè)二維碼的大區(qū)域。總處理時(shí)間是0.4ms左右,包含0.2ms的DRP庫載入時(shí)間和0.2ms的圖像數(shù)據(jù)處理時(shí)間。

        image.png

        步驟4

        此時(shí)我們對(duì)膨脹之后的圖像調(diào)用openCV的FindContour方法,它將得到這一幀圖像中所有高亮部分的外輪廓以及每個(gè)輪廓的最小外接矩形。我們會(huì)逐一判斷輪廓的寬高比,面積,位置等信息,篩選出最有可能包含二維碼的輪廓。如果條件不匹配則采集下一幀圖像。此步驟由CPU實(shí)現(xiàn),時(shí)間約為4ms。

        1630638652463426.png

        圖中帶有旋轉(zhuǎn)角度的矩形為二維碼區(qū)域的輪廓,后面我們會(huì)將這個(gè)旋轉(zhuǎn)的矩形調(diào)整為傾角為0度的圖形,用于更精細(xì)的特征檢測。而最小外接矩形的四個(gè)頂點(diǎn)坐標(biāo)將被換算成原始輸入圖像的坐標(biāo),用于從原始圖像中裁剪包含二維碼的區(qū)域。

        image.png

        步驟5

        為了保證二維碼標(biāo)識(shí)特征提取的精度,我們會(huì)從MIPI輸入buffer中裁剪Bayer格式的原始二維碼圖像。此時(shí)我們載入一個(gè)bayer2gray_cropping的DRP庫從MIPI buffer進(jìn)行圖像裁剪,裁剪的位置就是步驟4中最小外接矩形4個(gè)頂點(diǎn)在MIPI buffer中對(duì)應(yīng)的坐標(biāo)。

        這個(gè)bayer2gray_cropping只占用1個(gè)Tile的硬件資源,它具備6個(gè)tile并行運(yùn)行的能力,因此我們會(huì)用6個(gè)Tile的DRP并行處理。

        此步驟的執(zhí)行時(shí)間約為0.6ms,DRP的載入時(shí)間為0.25ms,執(zhí)行時(shí)間約為0.35ms

        image.png

        步驟6

        下圖左側(cè)為裁剪出的帶有旋轉(zhuǎn)角度的灰度圖,其中4個(gè)綠色頂點(diǎn)可以從步驟4的輪廓信息得到。在此步驟中我們由CPU實(shí)現(xiàn)一個(gè)簡易的Keystone和縮放功能,將4個(gè)綠色頂點(diǎn)中的有效圖像映射到右側(cè)的buffer中,這里的梯形校正只是簡單抽取或重復(fù)原有像素點(diǎn),不生成新的點(diǎn),因此屬于有損但快速的算法。更精確的算法可用使用DRP的仿射變換(affine)功能,但會(huì)消耗更多的時(shí)間。

        1630638700189953.png

        步驟7

        得到一個(gè)無旋轉(zhuǎn)的圖像后,我們重復(fù)步驟2中的binarization_adaptive處理,得到一個(gè)無旋轉(zhuǎn)角度的二值化圖像。這一步耗時(shí)約0.5ms

        image.png

        步驟8

        此時(shí)載入FindContour DRP庫,檢測二值化后的二維碼圖像中所有高麗部分的輪廓,檢測結(jié)果為圖像中藍(lán)色的矩形區(qū)域。

        image.png

        FindContour DRP庫會(huì)輸出每個(gè)輪廓的位置,大小信息。所有的輪廓信息將被保存起來用于下一步的二維碼標(biāo)識(shí)檢測。此過程總耗時(shí)約1.4ms,包含0.4ms的DRP庫載入時(shí)間及1.0ms的處理時(shí)間。

        1630638766865098.png

        步驟9

        此時(shí)我們已經(jīng)得到二維碼圖像中所有輪廓的坐標(biāo)信息,我們可以很容易的通過輪廓相對(duì)于二維碼的對(duì)應(yīng)位置,是否是正方形輪廓,是否包含對(duì)稱的子輪廓,是否包含偏心的子輪廓等信息來判斷出QR code, Micro QR code, 漢信碼,Aztec code。

        對(duì)于DataMatrix的檢測,我們可以利用DRP運(yùn)行時(shí)不消耗CPU負(fù)載的特性,在步驟8的DRP處理過程中(1ms的DRP執(zhí)行期間)同時(shí)由CPU計(jì)算圖像每行和每列的求和統(tǒng)計(jì),這樣可以讓DRP和CPU的處理也并行起來。

        image.png

        讓我們回顧以下以上9個(gè)步驟的處理:

        1630638830293043.png

        我們可以在8ms的時(shí)間內(nèi)完成5種不同編碼的二維碼類型的檢測主要得益于:

        ■   加載具有并行化處理能力的DRP庫

        ■   同時(shí)加載多個(gè)DRP庫對(duì)一幀圖像的多個(gè)區(qū)域同時(shí)進(jìn)行處理

        ■   DRP處理期間,并行運(yùn)行CPU運(yùn)算

        ■   硬件DRP加速處理與openCV軟件處理無縫對(duì)接

        此時(shí)如果將裁剪出來的二維碼圖像交給后續(xù)對(duì)應(yīng)的解碼器進(jìn)行解碼,將極大的縮短多類型二維碼解碼的處理時(shí)間。

        以下是對(duì)一個(gè)快速旋轉(zhuǎn)且變換編碼格式的圖像進(jìn)行實(shí)時(shí)檢測的結(jié)果。

        image.png

        【video RZA2M_Barcode_Type_Detection_30ms_gif_c1.mp4】



        關(guān)鍵詞: 二維碼 AI 視覺

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阳东县| 乐陵市| 兴海县| 乳山市| 辽阳县| 大荔县| 余干县| 佛坪县| 彝良县| 翼城县| 连江县| 大同市| 中江县| 黔江区| 黄平县| 江川县| 旬阳县| 从江县| 茌平县| 秀山| 习水县| 贵定县| 高清| 麻阳| 武冈市| 瑞安市| 伊宁市| 龙门县| 泗洪县| 海兴县| 三门峡市| 荃湾区| 惠来县| 乌什县| 应城市| 六盘水市| 乌海市| 黄冈市| 昌宁县| 彝良县| 精河县|