天天看点

主流深度学习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

(交流请备注,对创业有想法欢迎联系)

继续阅读