實作功能
● 文字方向檢測 0、90、180、270度檢測
● 文字檢測 後期将切換到keras版本文本檢測 實作keras端到端的文本檢測及識别
● 不定長OCR識别
環境部署
Bash
##GPU環境
sh setup.sh
##CPU環境
sh setup-cpu.sh
##CPU python3環境
sh setup-python3.sh
使用環境:python3.6+tensorflow1.7+cpu/gpu
模型訓練
● 一共分為3個網絡
● 1. 文本方向檢測網絡-Classify(vgg16)
● 2. 文本區域檢測網絡-CTPN(CNN+RNN)
● 3. EndToEnd文本識别網絡-CRNN(CNN+GRU/LSTM+CTC)
文字方向檢測-vgg分類
基于圖像分類,在VGG16模型的基礎上,訓練0、90、180、270度檢測的分類模型.
詳細代碼參考angle/predict.py檔案,訓練圖檔8000張,準确率88.23%
模型位址
文字區域檢測CTPN
支援CPU、GPU環境,一鍵部署
文本檢測訓練參考
https://github.com/eragonruan/text-detection-ctpn
OCR 端到端識别:CRNN
ocr識别采用GRU+CTC端到到識别技術,實作不分隔識别不定長文字
提供keras 與pytorch版本的訓練代碼,在了解keras的基礎上,可以切換到pytorch版本,此版本更穩定
如果你隻是測試一下
運作demo.py 寫入測試圖檔的路徑即可,
如果想要顯示ctpn的結果,
修改檔案./ctpn/ctpn/other.py
的draw_boxes函數的最後部分,
cv2.inwrite('dest_path',img),如此,
可以得到ctpn檢測的文字區域框以及圖像的ocr識别結果
如果你想訓練這個網絡
1 對ctpn進行訓練
● 定位到路徑--./ctpn/ctpn/train_net.py
● 預訓練的vgg網絡路徑VGG_imagenet.npy将預訓練權重下載下傳下來,pretrained_model指向該路徑即可, 此外整個模型的預訓練權重checkpoint
● ctpn資料集還是百度雲資料集下載下傳完成并解壓後,将.ctpn/lib/datasets/pascal_voc.py 檔案中的pascal_voc 類中的參數self.devkit_path指向資料集的路徑即可
2 對crnn進行訓練
● keras版本 ./train/keras_train/train_batch.py model_path--指向預訓練權重位置 MODEL_PATH---指向模型訓練儲存的位置keras模型預訓練權重
● pythorch版本./train/pytorch-train/crnn_main.py
parser.add_argument(
'--crnn',
help="path to crnn (to continue training)",
default=預訓練權重的路徑,看你下載下傳的預訓練權重在哪啦)
parser.add_argument(
'--experiment',
help='Where to store samples and models',
default=模型訓練的權重儲存位置,這個自己指定)
識别結果展示
文字檢測及OCR識别結果

主要是因為訓練的時候,隻包含中文和英文字母,是以很多公式結構是識别不出來的
看看純文字的
可以看到,對于純文字的識别結果還是闊以的呢,感覺可以在crnn網絡在加以改進,現在的crnn中的cnn有點淺,并且rnn層為單層雙向+attention,目前正在針對這個地方進行改動,使用遷移學習,以restnet為特征提取層,使用多層雙向動态rnn+attention+ctc的機制,将模型加深,目前正在進行模型搭建,結果好的話就發上來。
原文釋出時間為:2018-09-29
本文來自雲栖社群合作夥伴“
大資料挖掘DT機器學習”,了解相關資訊可以關注“
”。