條形碼識別(1)——基礎知識


條形碼識別(1)——基礎知識

標簽: 機器視覺 條形碼識別 Python


1.序

馬上就要放寒假了,老師那邊貌似也沒有什么任務,這一個禮拜不能閑着,思索着做一點東西練練手,看書和實踐結合起來才是最有效率的。平時記下來的點子挺多:RPG游戲、爬蟲、數字和字母識別等等。可惜時間不多,要是本科期間有現在學習的心思就好了……綜合考慮了一下難易程度和實用性,最終選擇了“條形碼識別”這個目標,一方面有圖像處理的知識,可以用在畢設上面;另一方面有一定的實用價值,而且可以長期的做下去。

其實一開始是想偷個懶的,准備下載個第三方庫(比如Zbar)調用一下API能夠識別條形碼就行了,但是后來一想這么做根本就不能學到有用的新知識,遂作罷。為了學習python,所以采用python來編寫程序。

我准備按照分析法綜合法相結合的方法執行條形碼識別的任務,具體過程如下:

  1. 條形碼圖片處於理想狀態下的識別與校驗
  2. 從一張圖片中剪裁出條形碼區域
  3. 將檢測出的條形碼進行適當的處理,使其盡量的接近理想狀態
  4. 優化整個過程,添加糾錯等功能

其中理想狀態是指使用條形碼生成器生成出來的條形碼的狀態:

  • 圖片無污損無畸變
  • 圖片只有條形碼,沒有其他任何多余的信息
  • 條形碼的兩邊分別屬於水平和豎直狀態
  • 條形碼從左到右為正向

如圖所示:

其實也是摸索着前進,分享出來是希望能夠有人一起討論討論。

你有一個蘋果,我有一個蘋果,我們交換的話每個人還是只有一個蘋果;你有一個思想,我有一個思想,我們交換的話每個人就有了兩個思想。

是以為序。

2.EAN13條形碼結構

維基百科:條形碼
條形碼或稱條碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組信息的圖形標識符。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。條形碼可以標出物品的生產國、制造廠家、商品名稱、生產日期、圖書分類號、郵件起止地點、類別、日期等信息,因而在商品流通、圖書管理、郵政管理、銀行系統等許多領域都得到了廣泛的應用。

條形碼有多種,在我國廣泛流傳的是EAN13條形碼(以下簡稱條形碼),所以主要研究該種條形碼的識別。

條形碼位數說明:

  • 條形碼一共有13位
  • 前2位或者前3位稱為前綴,表示國家、地區或者某種特定的商品類型
    • 中國區條形碼開頭:690~699
    • 圖書類條形碼開頭:978~979
  • 前綴后的4位或者5位稱為廠商代碼,表示產品制造商
  • 廠商代碼后5位稱為商品代碼,表示具體的商品項目
  • 最后1位是校驗碼,根據前12位計算而出,可以用來防偽以及識別校驗

條形碼編碼說明

  • 條形碼一共有8個區域:左側空白區->起始符->左側數據符->中間分隔符->右側數據符->校驗符->終止符->右側空白區
  • 字符為0~9
  • 除空白區外的區域和字符都采用二進制編碼表示,1表示bar(黑條),0表示space(白條)
  • 起始符,終止符編碼為101,分隔符編碼為01010
  • 0~9每種字符有3種編碼方式,AB為左側數據奇偶編碼,C為右側數據偶編碼
  • 左側數據的奇偶性由前置符決定
  • 0~9每個字符由2個bar和2個space組合而成,合計長度為7
  • 起始符到終止符一共有95個長度(95=3+7*6+5+7*6+3)
  • 起始符到終止符一共有59個bar和space(59=3+6*4+5+6*4+3)

3.檢測條形碼的基本流程

Created with Raphaël 2.1.0 開始 載入圖片 剪裁出條形碼區域 校正條形碼圖像 圖像預處理(灰度化、濾波,二值化) 掃描條形碼,獲得bar和space的寬度 根據bar和space的寬度譯碼 校驗 檢測結果是否正確 輸出條形碼 結束 糾錯 糾錯成功 提示識別失敗 yes no yes no

4.總結

  • 條形碼有規定的標准,條形碼檢測就是根據標准逆向讀出其所代表的信息
  • 條形碼檢測的難點是剪裁出條形碼區域並校正至理想狀態
  • 譯碼的依據是字符及其二進制表示的表
  • 前置碼並沒有用bar&space表示

5.思考

  • 為什么左側字符要有奇偶性?
    思考:左側字符的奇偶性由前置碼決定,所以奇偶性常見的應用就是檢測掃描方向是否相反和判斷出前置碼是多少。但是假如固定左側奇編碼,右側偶編碼那么也能判斷掃描方向是否相反;假如把前置碼放到數據區也用bar&space表示也更精確。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com