天天看點

4 物流集裝箱字元識别探索和實踐

4.1 集裝箱箱号識别項目概述

在對集裝箱箱号識别進行研究的過程中,使用CTPN來進行字元檢測,使用CRNN模型對框選的文本進行識别。

最終使用了81張單個集裝箱的圖檔作為測試集,最終CTPN的檢測效果:在IoU=0.5的情況下達到0.836,而CRNN模型的識别效果:字元正确率0.821,整圖正确率為0.135。

進一步計劃:

(1)CPTN在該場景下,不适用于做目标區域檢測,因為存在多個集裝箱同時存在的場景,同時單個集裝箱也存在多處字元(如企業商标等),是以需要另外訓練一個模型去獲更完善的目标文本框區域。然後用CPTN或者其他方法将框選的文本區域分割為文本條,然後使用CRNN進行識别。

(2)增加後處理環節,通過識别出的數字,算出校驗碼,用來提高整圖正确率。

4.2 集裝箱箱号識别介紹

4.2.1 集裝箱箱号

總計十個字元,前三個字元(即上圖的“SUD”)為擁有者的代碼,對應的是HAMBURG SUD,即漢堡南美航運公司,第四個字元(“U”)代表的是集裝箱類型,一般都會為U。

第5到第10個字元,即(“307007”)為箱體注冊碼,是集裝箱箱體持有的唯一辨別。

第11個字元(即“9”)為校驗碼,有前4位字母和6位數字通過校驗規則運算得到,用于識别在校驗時是否發生錯誤。

雖然隻要識别10個字元,即得到集裝箱箱号,但在商用産品中,一般也都會将校驗碼識别出來,

4.2.2 集裝箱箱号識别難點

(1)箱号位置不統一,字元之間距離間隔不統一

(2)箱号的印刷字型不一緻

4.2.3 集裝箱箱号識别流程

對于單個集裝箱圖檔而言,從圖檔中檢測到集裝箱箱号位置區域,對箱号區域進行分割,然後識别,再進行後處理(校驗碼檢驗等),最終輸出集裝箱的箱号。

4.3 資料整理

4.3.1 資料搜集

4.3.1.1 集裝箱資料

通過google的以圖搜圖,并通過篩選後,有200張左右的圖檔。但對于神經網絡模型來說,資料量太少。

4.3.1.2 字元識别資料相關

因搜集到的集裝箱圖檔資料太少,是以,使用圖檔生成的方法制作資料集。

(1)字型

通過對上述200張集裝箱圖檔的觀察,發現最起碼存在四種字型。

目前,通過線上字型搜尋,隻找到了兩種近似字型,另外兩種暫未獲得。

① SaaSeriesBD

② U59

(2) 工具
字元識别資料使用的是TextRecognitionDataGenerator。樣例如下:
           

4.3.1.3 字元檢測資料

目前網絡上公開的資料集有ICDAR(International Conference on Document Analysis and Recognition)曆年的比賽資料。

4.3.2 資料處理——生成、增廣等

(1)為英文字元與數字字元設定合适的比例,2:3

(2)圖檔随機旋轉角度:[0, 10]

(3)圖檔背景:較為幹淨的集裝箱圖檔

4.4 字元識别

4.4.1 評價名額

整圖正确率。假設一張圖檔中,含有多處多個字元,按從左往右順序,沒處的每個字元都正确,則該圖檔識别正确。整圖正确率 = 圖檔識别正确數 / 圖檔識别測試總數。

字元正确率。每一個标注區域,按從左往右順序,正确識别出的字元數,除以總字元數。

4.4.2 方法 —— CRNN_STN

CRNN_STN是帶有STN(Spatial Transformer Networks)的CRNN(Convolutional Recurrent Neural Network)網絡。

選用的源碼來自于這裡。但原作者的代碼中,模型部分有錯誤,需要更正,見小節4.3.1。

4.4.2.1 STN

STN即空間變換網絡,普通的CNN能夠顯示的學習平移不變性,以及隐式的學習旋轉不變性,但注意力機制模型告訴我們,與其讓網絡隐式的學習到某種能力,不如為網絡設計一個顯示的處理子產品,專門處理各種變換。

4.4.2.2 CRNN

CRNN網絡分為三個部分,① 用于提取圖像特征的CNN,② 用于提取文字序列特征的BLSTM(Bidirectional Long Short-Term Memory),③ 用于選擇最佳序列,剔除多餘字元的CTC(Connectionist Temporal Classification)

4.4.3 訓練踩坑

4.4.3.1 報錯

(1)InvalidArgumentError (see above for traceback): sequence_length(0) <= 30

原因是CTC網絡的loss計算,要求所有輸入序列的長度(sequence_length)要小于max_time_step,通常max_time_step等于CTCLoss的輸入序列資料的最大長度,報錯的是因為存在sequence_length大于了max_time_step。

解決辦法:檢查CTCLoss的輸入資料和sequence_length是否對應,通常由于資料先進入了CNN導緻輸入到CTC的資料次元發生了變化,而sequence_length還對應CNN前的資料序列長度,故按照CNN結構縮放原始sequence_length即可。

(2)提示加載的預訓練模型與模型不比對

原因是作者的代碼有錯誤,将下圖中的conv_1改成batchnorm_1即好。

4.4.3.2 調整資料集

(1)CRNN隻支援單行字元檢測

在一開始時,使用多行文本圖檔直接輸入網絡,導緻識别沒有效果。

(2)使用生成的資料集訓練,但同時又使用生成的資料集驗證

這導緻在訓練過程中效果很好,acc到達0.72,但使用真圖測試時,效果較差,是以又截選真實圖檔,然後增廣資料,提升訓練效果。

4.5 字元位置檢測

4.5.1 評價名額

IoU(Intersection-over-Union),是預測的框與原标記框的交疊率,即它們的交集與并集的比值,最理想的情況是完全重疊,即比值為1。

計算公式:

4.5.2 方法 —— CTPN

CTPN(Connectionist Text Proposal Network)模型實作流程包含三個部分,① 檢測最小尺度文本框, ② 循環連結文本框,③ 文本行邊細化

本文中所使用的CTPN模型來源于這裡。

因該開源庫提供了預訓練模型,且CTPN模型對資料集标注的要求較高(不規則四邊形框),以及在集裝箱上存在多處非目标文本框,是以,并未進一步标注資料進行訓練。

4.6 總結

4.6.1 結論

本研究最終使用了81張單個集裝箱的圖檔作為測試集,最終CTPN的檢測成果:在IoU=0.5的情況下達到0.836,字元正确率0.821,整圖正确率為0.135。

字元正确率與整圖正确率差距較大的原因可能在于CTPN所擷取的目标框文本不全、分割。同時,在本預研過程中,一半多的時間是用于處理和标注資料集,但由于總時間投入較少,資料品質仍然較差。

集裝箱識别是比較具有現實意義的問題,是以也需要結合實際場景進行研究,如果能擷取大量真實場景的集裝箱圖檔,整體效果預計将會有顯著提升。

4.6.2 下一步計劃

(1)CPTN在該場景下,不适用于做目标區域檢測,因為存在多個集裝箱同時存在的場景,同時單個集裝箱也存在多處字元(如企業商标等),是以需要另外訓練一個模型去獲更完善的目标文本框區域。然後用CPTN或者其他方法将區域分割為文本條,然後使用CRNN進行識别。

4.6.3 風險

(1)目前CPTN檢測到的框因為間隔原因,會使得擷取的文本框文本不全。

正确擷取文本框(左)和錯誤擷取文本框(右)

4 物流集裝箱字元識别探索和實踐

繼續閱讀