『7x24小时有问必答』
点击上方蓝字关注我们

微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
01
软件版本
- Python3.6.5

- OpenCV-Python  4.x

- Tesseract-OCR  5.0.0-alpha.20201127

- Win10  64
02
安装与配置
安装Python SDK选择默认安装,同时勾选最下面得红色矩形框内容。
安装opencv-python开发包
pip install opencv-python
安装Tesseract-OCR Python SDK支持
pip install pytesseract
下载Tesseract-OCR 5.0.0-alpha.20201127安装包并安装!然后在环境变量中添加
C:\Program Files\Tesseract-OCR
03
验证与测试
安装与配置好OpenCV-Python与Tesseract-OCR之后,需要进一步通过代码验证正确性。打开Pycharm IDE,新建一个python项目与python文件,输入以下代码
import pytesseract as tessprint(tess.get_tesseract_version())print(tess.get_languages())
运行结果如下:
第一行是版本信息,第二行是支持的语言信息,默认只支持英文。
Tesseract-OCR介绍
开源的OCR识别引擎,高版本识别基于LSTM,其整个处理流程如下:
检测与识别文本函数:
检测:
def image_to_boxes(    image,    lang=None,    config='',    nice=0,    output_type=Output.STRING,    timeout=0,)
返回所有识别文字的Box框坐标,每一行为一个BOX信息输出
每行的前五个值分别是,识别的字符、BOX框的左上角与右下角坐标
识别
def image_to_string(    image,    lang=None,    config='',    nice=0,    output_type=Output.STRING,    timeout=0,)
输入的图像通道顺序是RGB,OpenCV默认为BGR,返回的是识别结果
必输入的参数是image,其它可选
英文与数字识别
Tesseract-OCR默认支持英文与数字识别,有输入图像如下:
Python代码如下:
image  =  cv.imread("D:/cv4j.png")

image_rgb  =  cv.cvtColor(image,  cv.COLOR_BGR2RGB)

text  =  tess.image_to_string(image_rgb,  lang="eng")

content  =  text.replace("\f",  "").split("\n")

for  c  in  content:

        if  len(c)  >  0:

                print(c)

h,  w,  c  =  image.shape

boxes  =  tess.image_to_boxes(image)

for  b  in  boxes.splitlines():

        b  =  b.split('  ')

        image  =  cv.rectangle(image,  (int(b[1]),  h  -  int(b[2])),  (int(b[3]),  h  -  int(b[4])),  (0,  255,  0),  2)

cv.imshow('text  detect',  image)

cv.waitKey(0)

cv.destroyAllWindows()

运行结果如下:
英文识别对无干扰的背景效果非常好!

中文识别
默认情况下Tesseract-OCR不支持中文识别,需要下载中文识别的模型文件,然后放置到安装路径的tessdata目录下:

C:\Program Files\Tesseract-OCR\tessdata
然后在运行语言检查支持代码,运行结果如下:
其中chi_sim表示中文简体支持,eng表示英文支持!
以下图为例:
识别代码
image  =  cv.imread("D:/yanxishe.png")

image_rgb  =  cv.cvtColor(image,  cv.COLOR_BGR2RGB)

text  =  tess.image_to_string(image_rgb,  lang="chi_sim")

print(text)

h,  w,  c  =  image.shape

boxes  =  tess.image_to_boxes(image)

for  b  in  boxes.splitlines():

        b  =  b.split('  ')

        image  =  cv.rectangle(image,  (int(b[1]),  h  -  int(b[2])),  (int(b[3]),  h  -  int(b[4])),  (0,  255,  0),  2)

cv.imshow('text  detect',  image)

cv.waitKey(0)

cv.destroyAllWindows()
运行结果
正确率还不错,需要进一步处理一下,直接放大两倍,然后再测试一波
发现错误识别大大减少,基本可用!
总结一下:使用OpenCV预处理可以大大降低Tesserct-OCR的误识别率!

直接识别原图,发现图像上的灰度文字被忽视,无法识别!

君子藏器于身,待时而动

  推荐阅读  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码