天天看點

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

注:本文中多處使用各位前輩的經驗,項目代碼不友善提供,可參考:

https://github.com/YCG09/chinese_ocr

實作功能

文字方向檢測 0、90、180、270度檢測

文字檢測 後期将切換到keras版本文本檢測 實作keras端到端的文本檢測及識别

不定長OCR識别

環境部署

GPU環境

sh setup.sh

CPU環境

sh setup-cpu.sh

CPU python3環境

sh setup-python3.sh

cd ./ctpn/lib/utils

./make-for-cpu.sh

運作demo

将測試圖檔放入test_images目錄,檢測結果會儲存到test_result中

Python3 demo.py

模型訓練

一共分為3個網絡

  1. 文本方向檢測網絡-Classify(vgg16)
  2. 文本區域檢測網絡-CTPN(CNN+RNN)
  3. DenseNet + CTC

文字方向檢測-vgg分類

基于圖像分類,在VGG16模型的基礎上,訓練0、90、180、270度檢測的分類模型.

詳細代碼參考angle/predict.py檔案,訓練圖檔8000張,準确率88.23%

模型位址:https://pan.baidu.com/s/1zquQNdO0MUsLMsuwxbgPYg

##文字區域檢測CTPN

關于ctpn網絡,網上有很多對其進行介紹講解的,算法是2016年提出的,在印書體識别用的很多,這裡有前輩一篇相應的博文http://xiaofengshi.com/2019/01/23/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-TextDetection/,在文章中結合本repo的代碼對ctpn的原理進行了詳細的講解。

CTPN訓練

1. 準備資料

首先,下載下傳預先訓練的VGG網絡模型并将其放在data/pretrain/VGG_imagenet.npy.

其次,準備論文提到的訓練資料。或者我們可以放置自己的資料

根據我們的資料集修改prepare_training_data/split_label.py中的path和gt_path路徑。并執行下面操作。

cd lib/prepare_training_data

python3 split_label.py

它将在目前檔案夾中生成準備好的資料,然後運作下面代碼:

Python3 ToVoc.py

将準備好的訓練資料轉換為voc格式。它将生成一個名為TEXTVOC的檔案夾。将此檔案夾移動到資料/然後運作

cd …/…/data

ln -s TEXTVOC VOCdevkit2007

2.資料集下載下傳

作者給的資料是預處理過的資料,

我們下載下傳了資料,VOCdevkit2007 隻有1.06G,但是此資料可以訓練自己的模式,要是想訓練自己的資料,那麼需要自己标注資料,找自己的資料。

作者使用的icdar17的multi lingual scene text dataset, 沒有用voc,隻是用了他的資料格式,下面給出的資料是作者實作的源資料位址。

gt_path的資料位址:http://rrc.cvc.uab.es/?com=contestant

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

  進入2017MLT 檢視如下:

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

然後我們可以發送郵件,注冊使用者,并激活,進入下載下傳頁面:

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)
chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

3. 存放資料

作者訓練使用的是7200張圖檔。使用train或者trainval是一樣的,因為用的都是這7200張圖檔。可以檢查一下VOCdevkit2007/VOC2007/ImageSets/Main下面的train.txt和trainval.txt是否正确,是否是7200張圖檔。你在用自己資料訓練的時候也要特别注意一點,資料的标注格式是不是和mlt這個資料集一緻,因為split_label這個函數是針對mlt的标注格式來寫的,是以如果你原始資料标注格式如果和它不同,轉換之後可能會是錯的,那麼得到的用來訓練的資料集可能也不對。

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

 

對原始gt檔案進一步處理的分析(也就是對txt标注資料進行進一步處理),生成對應的xml檔案部分内容截圖如下:

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

4.資料集标注

在标注資料的時候采用的是順時針方向,一次是左上角坐标點,右上角坐标點,右下角坐标點,左下角坐标點(即x1,y1,x2,y2,x3,y3,x4,y4),,這裡的标注方式與通用目标檢測的目标檢測方式一樣,這裡我标注的資料是生成到txt中,具體格式如下:

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

x1,y1,x2,y2,x3,y3,x4,y4 分别是一個框的四個角點的x,y坐标。這是因為作者用的mlt訓練的,他的資料就是這麼标注的,如果你要用一些水準文本的資料集,标注是x,y,w,h的,也是可以的,修改一下split_label的代碼,或者寫個小腳本把x,y,w,h轉換成x1,y1,x2,y2,x3,y3,x4,y4就行。

圖檔标注方法

  如果想訓練自己的資料集,那麼我們可以自己去标注圖檔。本文将推薦一個十分好用的資料标注工具LabelImg。

  這款工具是全圖形界面,用Python和Qt寫的,最牛的是其标注資訊可以直接轉化成為XML檔案,與PASCAL VOC以及ImageNet用的XML是一樣的。(具體如何使用,直接參考下面GitHub或者網上百度即可)

  它來自下面的項目:https://github.com/tzutalin/labelImg

  其中标簽存儲功能和“Next Image”、“Prev Image”的設計使用起來比較友善。

  該軟體最後儲存的xml檔案格式和ImageNet資料集是一樣的。

• Labelme 适用于圖像分割任務的資料集制作

• labellmg适用于圖像檢測任務的資料集制作

• yolo_mark适用于圖像檢測任務的資料集制作

• Vatic适用于圖像檢測任務的資料集制作

注(标注工具生成的的是xml檔案,可直接生成資料集無需執行python3 split_label.py,另外labelimg工具産生的是左上和右下坐标并非四點坐标,有能解決此問題的分享給我,謝謝)

5.訓練

簡單的運作

  你可以在ctpn/text.yml中修改一些參數,或者隻使用作者設定的參數

  作者提供的模型在GTX1070上訓練了50K iters

  如果我們正在使用cuda nms ,它每次約需要0.2秒,是以完成50k疊代需要大約2.5小時

當然,我們可以指定在那塊顯示卡上運作,比如我這裡指定選擇第一塊顯示卡上訓練,訓練的指令如下:

CUDA_VISIBLE_DEVICES=“0” python ./ctpn/train_net.py

訓練完成後 cd 項目/ctpn/ctpn/text.yml 修改模型加載路徑

chinese-ocr自然場景下不定長文字識别(ctpn + densenet)chinese-ocr自然場景下不定長文字識别(ctpn + densenet)

densenet訓練

1. 資料準備

資料集:https://pan.baidu.com/s/1QkI7kjah8SPHwOQ40rS1Pw (密碼:lu7m)

共約364萬張圖檔,按照99:1劃分成訓練集和驗證集

資料利用中文語料庫(新聞 + 文言文),通過字型、大小、灰階、模糊、透視、拉伸等變化随機生成

包含漢字、英文字母、數字和标點共5990個字元

每個樣本固定10個字元,字元随機截取自語料庫中的句子

圖檔分辨率統一為280x32

圖檔解壓後放置到train/images目錄下,描述檔案放到train目錄下

2. 訓練

cd train

python3 train.py

3.資料集制作

1.工具生成資料集

可參考SynthText_Chinese_version,TextRecognitionDataGenerator和text_renderer

2.個人制作資料集

圖檔可使用opencv處理

标注文本:手工标注文字

标注檔案格式轉換:百度網盤

連結:https://pan.baidu.com/s/13ja-547KlebHrROZmwLBWQ

提取碼:tkq8

繼續閱讀