目前,,在市場上通常使用的條形碼是一維條形碼,它含有的信息量很小,,一般需要后臺數(shù)據(jù)庫支持,。二維條形碼則有很大的數(shù)據(jù)容量,在一定情況下不需要后臺數(shù)據(jù)庫的支持,,并且可以形成便攜式數(shù)據(jù)文件進行離線傳輸,,它的糾錯能力極強,文件的局部破損,、污染不會影響數(shù)據(jù)的準(zhǔn)確讀出,。二維條碼可對字符、漢字,、圖像,、簽字等進行編碼,應(yīng)用范圍十分廣闊,。
系統(tǒng)框圖
系統(tǒng)以DSP56F826芯片為核心控制模塊,, 使用CMOS數(shù)字圖像傳感芯片,圖像采集分辨率可達640×480像素,。當(dāng)需要進行高分辨率的圖象采集時,,可改用1024×1024像素的芯片(成本將隨之增加)。譯碼可靠性高,。目前得到的誤碼率不超過6萬分之一,,并且還在不斷改進,期望誤碼率不超過2000萬分之一,。采用RS-232通訊接口,,將獲取的二維條碼信息實時上傳給計算機顯示處理。糾錯等級達到8級,,糾錯能力強,。
二維條碼掃描器系統(tǒng)框圖如圖(1)所示,。CMOS圖像傳感芯片為光電轉(zhuǎn)換元件,用與采集二維條碼圖像,,直接輸出為數(shù)字信號,。由外部擴展SRAM存儲該數(shù)據(jù),再送到DSP,,進行圖像處理,、碼字分割,、碼字識別,、信號糾錯等,當(dāng)一組二維條碼信息的識別完成以后,,服務(wù)程序控制I/O接口給出中斷申請信號,,DSP響應(yīng)此中斷申請,進入中斷服務(wù)程序,。譯碼后的二維條碼數(shù)據(jù)從I/O口經(jīng)SCI RS-232傳送至計算機,,并在屏幕上顯示。軟件程序和PDF417碼本都儲存在DSP芯片中的FLASH內(nèi),,而動態(tài)采集到的二維條碼圖象數(shù)據(jù)則儲存在SRAM內(nèi),。
圖1 二維條碼掃描器框圖
系統(tǒng)硬件設(shè)計
系統(tǒng)硬件電路主要包括以下七個部分:條碼圖象采集電路、DSP主控電路,、存儲器擴展電路,、輸出接口電路、復(fù)位與時鐘電路,、電源控制電路,、照明控制電路。
條碼圖象采集電路
該電路以O(shè)V7120黑白圖像傳感芯片為核心,,該芯片分辨率達到640×480像素,,成像速度為30幀/秒,采取逐行掃描方式,,輸出為數(shù)字信號,。此芯片功耗低,價格便宜,,雖然CCD芯片在信噪比,、靈敏度、成像質(zhì)量等方面優(yōu)于CMOS芯片,,但在本系統(tǒng)設(shè)計中,,采用CMOS芯片較為合適。
條碼圖像采集電路(圖2)中,,Y0-Y7為總線數(shù)字輸出,,HREF為水平參考信號,,即行掃描信號;VSYN為垂直同步信號,,即場同步信號,。PCLK為像素時鐘輸出。該電路使用5V直流電,,由電源控制電路提供,。雖然該芯片使用5V工作電壓,但它提供3.3V的I/O口,,所以它可以與I/O電壓為3.3V的DSP直接相連接,,不需要電平轉(zhuǎn)換。當(dāng)DSP接收到VSYN信號時,,表示芯片開始采集第一幀條碼圖像數(shù)據(jù),,隨后接收到HREF信號,芯片開始進行第一行的數(shù)據(jù)采集,,每來一個PCLK信號,,芯片就采集一個像素點的信號,當(dāng)DSP接收到下一個HREF信號,,芯片就進行第二行的數(shù)據(jù)采集,,直到采集完640行的數(shù)據(jù),芯片停止采集,。當(dāng)DSP收到下一個VSYN信號時,,表示芯片采集下一幀的數(shù)據(jù)。
圖2 條碼圖象采集電路框圖
DSP主控電路
如圖1所示,,該電路以DSP56F826為核心,。當(dāng)OV7120圖像傳感芯片準(zhǔn)備采集條碼圖像數(shù)據(jù)時,DSP發(fā)出一個初始信號,,控制SRAM重新分配地址塊,,同時圖像傳感芯片開始采集條碼圖象數(shù)據(jù)。采集完數(shù)據(jù)并送到SRAM中儲存后,,DSP開始調(diào)用處理程序?qū)?shù)據(jù)進行譯碼,,譯碼完成后,通過SCI RS-232將數(shù)據(jù)傳輸?shù)接嬎銠C,。
存儲器擴展電路
由于DSP56F826片內(nèi)提供的RAM只有4.5K字,,而RAM中需存放大量動態(tài)采集到的條碼圖象數(shù)據(jù),從條碼采集電路傳送過來的數(shù)據(jù)按如下計算:
640×480×4-bit = 1228800 bits
所以我們選用128K×16-bit 的IS61LV12816作為外部擴展,,來滿足系統(tǒng)需要,。
DSP56F826為外部地址總線和外部數(shù)據(jù)總線分別提供了16個引腳,為總線控制提供了4個引腳,,給擴展外圍電路提供了方便,。我們采用分開程序區(qū)和數(shù)據(jù)區(qū)的接口方法,,采用程序選通線(/PS)接SRAM的A0地址線來實現(xiàn)。因此,,數(shù)據(jù)區(qū)為SRAM的前64K(0000H_FFFFH),,程序區(qū)為SRAM的后64K(10000H_1FFFFH)。對DSP而言,,數(shù)據(jù)區(qū)和程序區(qū)的地址均為0000H_FFFFH,。
輸出接口電路
該電路使用異步串口RS-232,選用MAX202E芯片作為電平轉(zhuǎn)換收發(fā)器,。該芯片最高數(shù)據(jù)處理速率可達120Kbps,,滿足傳送二維條碼數(shù)據(jù)的要求。經(jīng)過DSP譯碼后的數(shù)據(jù)信號TXD0通過T1IN引腳進入MAX202E,,信號的電平被提高后,,經(jīng)T1OUT引腳輸出,,再通過SCI RS-232接口中的TXD口,,將譯碼后數(shù)據(jù)傳送給計算機。R1IN為接收輸入信號,,R1OUT為接收輸出信號,。
復(fù)位與時鐘電路
雖然DSP內(nèi)置了COP模塊,可以完成watchdog功能,,當(dāng)DSP內(nèi)核電壓VDD低于2.2V或者I/O口電壓VDDIO低于2.7V,,系統(tǒng)自動復(fù)位。我們還專門加了外部RESET,,防止系統(tǒng)受到外界干擾或電源波動時出現(xiàn)死機現(xiàn)象,。
DSP56F826的系統(tǒng)時鐘由晶振提供。我們用DSP芯片內(nèi)部提供的晶振電路,,在EXTAL和XTAL之間接一外部晶體(4MHz),。
電源控制電路
輸入5V的直流電作為整個系統(tǒng)的電源。由于圖像傳感芯片OV7120使用5V電源,,MAX202E用5V電源,,外部SRAM用3.3V電源,DSP56F826 Core用2.5V電源,,而DSP56F826 的I/O口用3.3V電源,,所以電源分三路輸出。
照明控制電路
采用主動光源,,用三個發(fā)光二極管給條碼采集提供照明,,便于二維條碼圖象的定標(biāo)。當(dāng)開始采集圖象數(shù)據(jù)時,,DSP輸出一控制信號,,驅(qū)動發(fā)光二極管工作,。采集結(jié)束后,在DSP控制下停止工作,。
系統(tǒng)部分電路圖示于圖3,。
圖3 部分硬件電路圖
系統(tǒng)軟件設(shè)計
二維條碼掃描器開始工作時,首先采集二維條碼圖象數(shù)據(jù),,由于實際工作中條碼圖象會出現(xiàn)污損等情況,,對碼字的正確譯出造成影響,所以必須對采集到的圖象進行降噪,、校正等處理,。條碼圖象為灰度圖象,對其進行二值化才能進行碼字識別,。在將PDF417碼的所有碼字正確分割后,,以查表方式在碼本中查找與碼字相對應(yīng)的值,將編碼數(shù)據(jù)譯出,。為確認掃描的有效性,,必須進行前向錯誤校驗。如出錯,,則進行糾錯,。最后,將譯碼的正確數(shù)據(jù)傳輸?shù)缴衔挥嬎銠C或直接進行處理顯示,。軟件框圖如圖4所示,。
圖4 軟件框圖
降噪處理
圖象采集芯片OV7120成像速度為30幀/秒,但是在實際操作過程中,,會有人手抖動,、條碼圖象移動等情況產(chǎn)生,采集時間過長,,就會導(dǎo)致每幀圖象之間的差別相當(dāng)大,,進而造成很大的識別誤差,所以在每一次掃描時,,我們只取三幀圖象,,所用時間為 :(1 / 30 ) × 3 = 0.1 s ,可以忽略人手抖動等影響,。設(shè)采集到的三幀圖象為I1 (x , y) ,、I2 (x , y) 、I3 (x , y) , 每幀的噪聲方差為σ2,,取平均可得到:
I (x , y) = I (x , y)的噪聲方差為σ2/3 ,。
可見此方法可以有效降噪。我們不采用常見的中值濾波,、Butterworth濾波等方法,,是因為一個碼字占有3,、4個像素點,用中值或Butterworth濾波處理污損的圖象,,將對圖象造成結(jié)構(gòu)性的破壞,。
圖象二值化
首先統(tǒng)計出圖象的直方圖,然后用Bayesian最佳分類器,,確定最佳二值化門限電平,,實現(xiàn)對圖象的二值化處理。此二值化門限電平必須是動態(tài)調(diào)整的,,因為每次的光
照等外界條件是不同的,,每掃描一次條碼,就必須確定一個新的二值化門限電平,。動態(tài)采集到的條碼圖象有300K像素點,,但只需要取圖象中間區(qū)域進行統(tǒng)計直方圖,取中間的64×64個像素點,,平均每統(tǒng)計一個像素點需要2個指令周期,,可算得統(tǒng)計直方圖總共需要64×64×2=8192個指令周期。確定二值化門限電平需要約2000個指令周期,,由此可計算所用時間約為:(8192+2000)/ 40000000 = 0.00025 s,。
碼字識別與信號糾錯
在碼字分割完成之后,采用模板匹配方式,,在固定的碼本中查找與碼字相對應(yīng)的值,將碼字譯出,。這里不需要用到神經(jīng)網(wǎng)絡(luò),,因為PDF417碼字模式非常標(biāo)準(zhǔn),用簡單的模板匹配即可完成,,不需復(fù)雜化,。對一個碼字進行模板匹配需要8000個指令周期,平均每個二維條碼包含500個碼字,,則進行模板匹配總共需要時間為:8000×500 / 40000000 = 0.1 s ,。為確保譯碼的有效性,使用R-S錯誤控制碼對碼字進行檢錯和糾錯,,每個碼字的檢錯和糾錯需要用100個指令周期,,所以總共需要100×500 / 40000000 = 0.00125 s的時間來完成二維條碼數(shù)據(jù)糾錯。
結(jié)語
所設(shè)計的二維條碼掃描器用DSP56F826芯片為系統(tǒng)核心,,采用優(yōu)化算法,,可以快速高效地對二維條碼進行識別處理。