Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

基于tensorflow實現對自然場景的文字檢測及端到端的OCR文字識別

2020 年 1 月 16 日 图像算法

實現功能

  • 文字方向檢測 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

關于ctpn網絡,網上有很多對其進行介紹講解的,算法是2016年提出的,在印書體識別用的很多,CTPN網路結構如下:

基于tensorflow實現對自然場景的文字檢測及端到端的OCR文字識別

ctpn是一種基于目標檢測方法的文本檢測模型,在本repo的ctpn中anchor的設置爲固定寬度,高度不同,相關代碼如下:

def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
                     scales=2 ** np.arange(3, 6)):
    heights = [11, 16, 23, 33, 48, 68, 97, 139, 198, 283]
    widths = [16]
    sizes = []
    for h in heights:
        for w in widths:
            sizes.append((h, w))
    return generate_basic_anchors(sizes)

基于這種設置,ctpn只能檢測水平方向的文本,如果想要ctpn可以支持垂直文本檢測,可以在anchor生成函數上進行修改。

OCR 端到端識別:CRNN

ocr識別采用GRU+CTC端到到識別技術,實現不分隔識別不定長文字

提供keras 與pytorch版本的訓練代碼,在理解keras的基礎上,可以切換到pytorch版本,此版本更穩定

此外參考了了tensorflow版本的資源倉庫:https://github.com/xiaofengShi/CTC_TF

爲什麽使用ctc

ctc是一種解碼機制,在使用ctpn提取到待檢測文本行之後,我們要識別提取到的區域內的文本內容,目前廣泛存在兩種解碼機制。

一種是seq2seq機制,輸入的是圖像,經過卷積編碼之後再使用RNN解碼,爲了提高識別的准確率,一般會加入attention機制。

另一種就是ctc解碼機制,但是對于ctc解碼要滿足一個前提,那就是輸入序列的長度不小于輸出序列的長度。ctc主要用于序列解碼,我們不需要對序列中的每個元素進行標記,只需要知道輸入序列對應的整個label是什麽即可,針對ocr項目,也就是輸入一張圖像上面寫著“歡迎來到中國”這幾個字,我們只需要是這幾個字,而沒必要知道這幾個字在輸入圖像中所在的具體位置,實際上如果知道每個字所在的位置,就是單字符識別了,的確會降低任務的複雜多,但是現實中我們沒有這麽多標記號位置的數據,這個時候CTC就顯得很重要了。

使用CNN+RNN+CTC的機制,實際上可以使用CNN+CTC的機制,CNN推薦選擇densenet或者resnet。

使用預訓練測試

運行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識別結果

基于tensorflow實現對自然場景的文字檢測及端到端的OCR文字識別

基于tensorflow實現對自然場景的文字檢測及端到端的OCR文字識別

主要是因爲訓練的時候,只包含中文和英文字母,因此很多公式結構是識別不出來的

基于tensorflow實現對自然場景的文字檢測及端到端的OCR文字識別

基于tensorflow實現對自然場景的文字檢測及端到端的OCR文字識別

文獻鏈接:https://arxiv.org/pdf/1803.00085.pdf 
數據集下載地址:https://ctwdataset.github.io/

相關文章:

  • 最受歡迎新加坡小學排行榜新鮮出爐!
  • 2016新加坡最受歡迎小學排行榜新鮮出爐!
  • 小一報名明天開始,新加坡184所小學給外國人多少名額?
  • 新加坡184所小學,究竟有多少空位給外國人?
  • 惡補!新加坡公立中小學到底有哪些類型,剩余學籍、難進的學校排名大參考
  • 惡補新加坡公立中小學到底有哪些類型剩余學籍難進的學校排名
科技

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們