天天看點

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

作者 | Raini

出品 | 北京圖特摩斯科技有限公司 (www.thutmose.cn)

也是幾個月前的項目了,由于手頭事兒多,也已經轉交給别的同僚去繼續優化。本部落格僅做個簡單的記錄用。

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

這裡是 Tesseract(LSTM)、CTPN+CRNN、Densenet三個方法測試結果對比(結果不是最優,代碼也經過優化):

PS:官方Tesseract-4.0需要Ubuntu-18.04支援,本人在Ubuntu-16.04上編譯安裝成功。

(一)Tesseract(LSTM)和Densenet

(此結果算法未經優化)

總結放前面:

  • Tesseract實作的OCR識别(可以實作衣服吊牌文字識别,對于服裝彩色背景圖有些牽強,對圖檔進行反轉之後可識别,但背景顔色不是單一色調的識别不出--這跟圖檔像素也有很大差別,300dpi+的圖檔識别度更高)
  • Densenet實作的OCR識别(衣服吊牌等複雜場景識别度低,對于服裝彩色背景圖效果卻比Tesseract好)
  • 上兩種辦法的解決方案之一可嘗試Tesseract識别不出的圖檔塊讓Densenet來識别

原圖+服裝box:

(采用目标檢測的方法識别與定位服裝,算法:Faster-RCNN)

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

OCR box:

(褲腿的logo已去除)

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域
主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

(這是去除掉的錯誤的識别)

識别效果:

(按行識别,可以取到每行字的bbox,這裡省略)

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

Tesseract識别不出文字的區域(背景為多顔色的區域):

1.

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

2.

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

3.

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

4.

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

将圖檔進行色調翻轉之後:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

Tesseract可識别出,Densenet識别不出:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

色調翻轉之後:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

Densenet可識别出,Tesseract識别不出:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

色調翻轉之後:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

Densenet可識别出,Tesseract識别不出:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

色調翻轉之後:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

Densenet可識别出,Tesseract識别不出:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

(二)CTPN+CRNN:CHINESE-OCR 和 Tesseract(LSTM)

代碼位址:https://github.com/xiaofengShi

總結:就不寫了... 看結果吧

代碼提供了keras和pytorch兩個版本的CRNN中文識别模型,經測試,pytorch版本效果要好一些。

  • 1)輸入測試圖像: 
主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域
主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

CTPN+CRNN文本識别結果(輸入的是裁剪标簽部分後的圖像,以下同理):

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

基于tesseract識别結果(有預處理,以下同理):

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域
  • 2)輸入測試圖像:
主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

CTPN+CRNN:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

基于tesseract識别結果:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域
  • 3)輸入測試圖像:
主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

CTPN+CRNN:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

基于tesseract識别結果:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域
  •   4)輸入測試圖像:
主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

CTPN+CRNN:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

基于tesseract識别結果:

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域

最後,加個openCV裡好玩的

opencv mser算法框出圖檔文字區域

主流深度學習OCR文字識别方法對比:Tesseract(LSTM)、CTPN+CRNN、Densenetopencv mser算法框出圖檔文字區域
'''
opencv mser算法框出圖檔文字區域
'''
from PIL import Image
import numpy as np
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('/home/raini/pro/LogoDetector/SIFT/PRI_Roche/Python_OpenCV/test_img/daa59b642f6a60e2995be13f495a7c45.jpg')
mser = cv2.MSER_create(_min_area=300)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
regions, boxes = mser.detectRegions(gray)

for box in boxes:
    x, y, w, h = box
    cv2.rectangle(img, (x,y),(x+w, y+h), (255, 0, 0), 2)

plt.imshow(img,'brg')
plt.show()

           

部落客w~x:lovebyz99

(交流請備注,對創業有想法歡迎聯系)

繼續閱讀