基于OpenCV的生產日期字符識別研究

摘要

利用OpenCV-python和開源OCR技術進行圖像預處理,并通過訓練得到一個專屬字庫,能較為精準地識別生產日期字符。針對如何提高商品標簽識別系統(tǒng)的工作效率,從改善商品標簽圖像質量和提高識別算法效率入手進行研究,目的是提高生產效率、提升產品質量。

關鍵詞:圖像預處理,OpenCV,字符識別,Tesseract-OCR



作者:李佳琪,安徽理工大學經濟與管理學院


商品的標識技術是對標簽進行編碼和標記的技術手段,也是產品可追溯性的基礎。標識技術關系到物流、食品和電子商務等多個行業(yè),影響深遠。伴隨人們生活水平的提高,對于健康和安全的關注越來越多,每個行業(yè)對產品的品質和安全性的要求也越來越高[1]。編碼標識的不統(tǒng)一阻礙了各個行業(yè)的發(fā)展,包括對產品的溯源、電子商務及對產品標簽標準化的要求,因此,國家商品生產日期標識規(guī)范體系的建立顯得尤為必要。

OCR 技術通過照相機拍攝圖片,利用檢測模式掃描圖像,從中排除干擾信息并提取文本信息,然后對文本信息進行字符識別,用一系列算法翻譯成計算機處理文本[2]。現(xiàn)在,還可直接連接攝像頭或照相機直接進行視頻識別。典型的 OCR 技術首先是對輸入圖像進行預處理,再對處理過的圖像進行文字檢測識別,在不同項目背景下,根據光照、背景顏色、產品材質和產品要求的不同,預處理和識別方法也會有所差異。

識別過程將由計算機端的 Python 程序完成。本文采用的商品標簽識別過程如圖 1 所示。

基于OpenCV的生產日期字符識別研究的圖1

圖1 商標標簽識別過程

01
預處理與識別

1.1 OpenCV

OpenCV 是一個跨平臺的輕量級開源計算機視覺庫,支持多種機器語言。OpenCV 模塊覆蓋全面,其中囊括了字符識別、圖像處理、人臉識別等。OpenCV 涵蓋300 多個 C 語言函數(shù)的中、高層 API,對于輸入圖像的格式也非常包容,用它進行應用開發(fā)非常高效和簡潔,而且包含了豐富的工業(yè)檢測類函數(shù),能夠用于實時圖像處理,使用便捷,功能完善,適用于本文實驗環(huán)境。


1.2 Tesseract-OCR


Tesseract-OCR 是 19 世紀 80 年代由惠普實驗室開發(fā)的,谷歌改進了其中的算法,通過排除引擎缺陷進行了優(yōu)化。Tesseract-OCR 的功能強大,應用廣泛,是開源的 OCR 識別系統(tǒng)[3]。Tesseract-OCR 識別引擎在開源識別引擎中占有重要地位,完整識別過程由一種頁面結構闡發(fā)方法對圖片做布局剖析,旨在辨別圖像上的表格、文本、圖片等內容,為后續(xù)識別工作做鋪墊。


02
圖像預處理

將背景信息和文本信息分開,消除圖像無關信息、加強有效信息,從而簡化后續(xù)辨認字符步調,減輕辨認難度和錯誤率。


2.1 圖像傾斜校正


產品在流水線輸送帶上運動時,經過高速攝像機拍攝照片,可能會遇到產品放置不規(guī)范的問題,導致拍攝的照片歪斜,不平行于水平線。預處理第一步是將扭曲的原始圖片進行校正。在此環(huán)境中,使用傅里葉變換做圖像的傾斜校正。


二維圖像的傅里葉變換公式:

基于OpenCV的生產日期字符識別研究的圖2

式中,f 和 F 分別為空間域值和頻域值,示出了傅立葉變換后的結果需要使用的真實圖像加虛擬圖像,或振幅圖像(magitude 圖像)加相位圖像[4](如圖 2)。

基于OpenCV的生產日期字符識別研究的圖3

圖2 校正前后對比


2.2 圖像噪聲處理


在收集、傳輸和處理圖像的過程中,圖像會產生一些不可避免的噪聲,包含與圖像無關和冗余滋擾信息。降低圖像噪聲不僅可以使圖像更加清晰,而且可以突出圖像的感興趣區(qū)域,易于識別(如圖 3)。

基于OpenCV的生產日期字符識別研究的圖4

圖3 噪聲處理前后的對比


2.3 圖像二值化


遍歷像素點,通過選取合適的值,灰度值二分為255 或 0,白色為 255,黑色為 0,如式(3)所示。分類后圖像變?yōu)楹诎祝直鎴D像中的圖形和文本,便于后續(xù)將文本信息提取出來[5]


基于OpenCV的生產日期字符識別研究的圖5

1)Otsu 算法


此算法是把背景和目標閾值的差距拉大,分裂性較強,所求的是類內方差 min,和類間方差的 max,首先遍歷所有像素點,統(tǒng)計灰度級像素的個數(shù),將圖像灰度化,再次遍歷計算出最大類間方差,程序略顯復雜[6],效果圖如圖 4 所示。


基于OpenCV的生產日期字符識別研究的圖6

圖4 Otsu對光照不均的處理


2)Sauvola 算法


該算法通過引入以像素點為中心領域的 wide 為參數(shù) windowsize 和自定義系數(shù)比例因子 k 來降低對噪聲的敏感性,也就是對 niblack 算法進行改進。它集中于當前像素,閾值是根據該像素的當前像素的附近灰度平均值和標準偏差動態(tài)計算[7]


灰度均值 m 與標準方差 s:


基于OpenCV的生產日期字符識別研究的圖7

然后是該點的閾值 Txy (, ) ,其中 T 的大小可以根據k 來調節(jié):


基于OpenCV的生產日期字符識別研究的圖8


基于OpenCV的生產日期字符識別研究的圖9

圖5 Sauvola對光照不均的處理

2.4 邊緣檢測


邊緣檢測是通過卷積或微分計算后得到的二值化圖像。


1)Laplacian 算子邊緣檢測


拉普拉斯算子被分成 4 個和 8 個鄰域,域是像素梯度需求鄰域的 4 個相鄰方向上的中央附近的方向和梯度[8](如圖 6)。


基于OpenCV的生產日期字符識別研究的圖10

圖6 Laplacian的邊緣處理


2)Canny 邊緣檢測算法


Canny 從信噪比、單邊緣和定位性能方面來判定邊緣的優(yōu)劣,Canny 邊緣檢測算法可以分為以下 5 個步驟:


①圖像灰度化

通過 RGB 三個通道,為了降維,將圖片圖像進行灰度化。


②高斯模糊處理

此步驟是對圖像進行 smooth 處理,通過濾波器將高斯函數(shù)離散化[9],高斯函數(shù)與濾波器的計算:


基于OpenCV的生產日期字符識別研究的圖11

③圖像梯度、梯度幅值、梯度方向計算該點通過計算當前像素與其附近的像素差值來進行位置判斷,接近這個差值稱為圖像梯度。首先計算一階導數(shù):


基于OpenCV的生產日期字符識別研究的圖12

計算梯度幅值 M:


基于OpenCV的生產日期字符識別研究的圖13

計算梯度值的方向:


基于OpenCV的生產日期字符識別研究的圖14


④ NMS(非極大值抑制)

留存邊緣方向上具有極大值的像素,通過 NMS 找出其中的局部最大值,將其他位置的值取 0。


⑤雙閾值的邊界選取

梯度大于任何邊緣的最大閾值是真正的邊緣,而低于最小閾值的邊緣為非邊緣,非邊緣即舍去(如圖 7)。


基于OpenCV的生產日期字符識別研究的圖15

圖7 Canny的邊緣處理


2.5本文算法的選取


中值濾波是對光滑脈沖噪聲表現(xiàn)良好,效果圖像的邊界順滑清晰。與平均灰度法比較,Sauvola 使用二值化的圖像,能解決產生照度不均的影響。拉普拉斯對噪聲敏感,分辨邊緣像素的位置表現(xiàn)優(yōu)異,但易出現(xiàn)雙像素邊界,導致日期顯示模糊不清晰;Canny 對比Laplacian 克制了噪聲引起的非邊緣,對于光照不均的圖像也能有如圖所示的效果,線條更流暢光滑,同時細化過的邊緣比較清晰,易于后續(xù)的識別工作。


綜上,根據實際檢測考慮,本項目的噪聲處理、二值化及邊緣檢測的算法分別借用的是中值濾波、Sauvola算法和 Canny 邊緣檢測法。


03
商品生產日期字符識別

3.1 識別目的


在車間生產中,生產日期是由操作工人設置噴印裝置并對生產日期進行噴印。生產日期的錯誤為后續(xù)的溯源、倉儲造成困難。為避免生產資料的浪費和后續(xù)工作的開展,制作日期字符識別數(shù)據集并校驗成果。


本文通過 jTessBoxEditor 進行字符識別訓練工作,Tesseract 深度學習樣本訓練工具基于 Java 開發(fā),當Tesseract 的 自 帶 字 符 庫 不 足 以 滿 足 需 要 時, 通 過jTessBoxEditor 訓練得到專屬字符庫,提高生產日期識別率和準確率。


3.2 字符集的創(chuàng)建和測試


在 jTessBoxEditor 編輯器中點擊 merge tiff,打開拍攝到的商品生產日期圖片,并為文件命名,以生成訓練集的 tif 文件(如圖 8)。


基于OpenCV的生產日期字符識別研究的圖16

圖8 訓練集部分樣本圖


通過輸入命令行生成 box 文件,再導入 tif 文件,然后它會主動識別 box 文件并主動導入(如圖 9)。


基于OpenCV的生產日期字符識別研究的圖17

圖9 字符識別界面


利用窗口上方的模塊,對文件內字符進行框選,調整字體坐標,標準為一字一框,并對識別的字符進行修正,最后點擊 save。


在輸入命令后創(chuàng)建字體特征文件,之后開始對字符文件進行訓練,并把生成的文件合并,即得到訓練文件(如圖 10)。


基于OpenCV的生產日期字符識別研究的圖18

圖10 字符集訓練界面


字符識別的正確率受前期圖片處理的程度和字符庫的影響,訓練集中包含英文、中文和數(shù)字三種字符,為了驗明三種字符的單獨測試效果,從以下四個方向進行觀察測試:

  • 1)中文字符正確率

  • 2)英文字符正確率

  • 3)數(shù)字字符正確率

  • 4)全部字符正確率


表1 字符識別正確率測試

基于OpenCV的生產日期字符識別研究的圖19

通過測試顯示,錯誤率最高為 5.00% 的中文字符,Tesseract 對于英文和數(shù)字字符還是比較精準的,錯誤主要在于字符“期”容易識別為分開的兩個字“其”和“月”,接下來對字符偏旁部首誤分割的判定準確率進行研究優(yōu)化。


04
結束語

本文基于 OpenCV 和開源庫 Tesseract,在 Python平臺根據現(xiàn)有的完善字符識別算法,利用訓練出的專屬字符庫初步實現(xiàn)了在簡單環(huán)境下對商品生產日期的識別功能。


本實驗項目僅針對普通場景下的圖像進行商品標簽日期字符的識別,對于復雜場景下或復雜字體、混合字體或彎曲識別界面的圖像文字識別還有待研究。后續(xù)將在圖像預處理和字符識別方面進行優(yōu)化,即將著手的工作如下:

  • 1)研究生產日期標簽污損情況下的字符識別。

  • 2)識別結果僅顯示于界面,未能聯(lián)系產品進行操控。

  • 3)進一步提高字符識別的速度和正確率。


參考文獻:

[1] 于穎.追溯無國界——追溯實施中的軟件,自動化與數(shù)據標準化[J].中國自動識別技術,2015(4):60-64.

[2] 王德青,吾守爾·斯拉木,許苗苗.場景文字識別技術研究綜述[J].計算機工程與應用,2020,56(18):1-15.

[3] 李志昂,李少波,白強,等.基于視覺的機器人目標抓取研究[J].組合機床與自動化加工技術,2020(9):108-111.

[4] 馬鎖冬,曾春梅,許峰.基于4f系統(tǒng)的光學圖像加密與解密仿真教學[J].大學物理實驗,2018,31(6):39-45.

[5] 石鵬飛,劉慧.基于OpenCV的偏光片檢測方法[J].機械管理開發(fā),2020,35(10):162-164+202.

[6] 陳飛.改進的交互式Otsu紅外圖像分割算法[J].計算機測量與控制,2020,28(9):248-251.

[7] 李藝杰,鄒坤霖,孫煒,等.基于Sauvola算法和神經網絡的圖像自適應二值化方法[J].測控技術,2020,39(8):62-69+75.

[8] 趙慧娟,姜盼松,黃文聰.基于圖像識別算法的圖像傳感器質量檢測方法改善研究[J].工業(yè)工程,2020,23(3):115-122.

[9] 白松讓,段敏,曹景勝,等.基于OpenCV的車道線智能檢測和識別[J].遼寧工業(yè)大學學報(自然科學版),2020,40(2):92-95.

*本文選自《電子產品世界》雜志2021年7月期

-END-

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP