使用Python,OpenCV进行Tesseract-OCR绑定及识别

  • 1. 效果图
  • 2. 安装Tesseract+Python“绑定”及识别
  • 3. 源码
  • 参考

上一篇博客介绍了Windows上Tesseract-OCR的安装,并使用命令行参数进行了OCR数字和字母的识别。这一篇将介绍如何使用Python应用Tesseract-OCR绑定,并进行图像上字符的识别。当前景文本与背景进行(非常)清晰的分割时,Tesseract-OCR将获得好的效果。

  • 最大的缺点是Tesseract本身的局限性。当前景文本与背景之间有非常清晰的分割时,Tesseract效果最佳。

  • 这些分割需要尽可能高的分辨率(DPI),并且分割后输入图像中的字符不能出现“像素化”。如果字符确实出现像素化,那么Tesseract将难以正确识别文本。

  • 将OCR应用于真实世界的无约束图像时,仍有挑战。深度学习和卷积神经网络(CNN)将能够获得更高的精度

  • 在将OCR应用于项目时,建议首先尝试Tesseract,如果结果不理想,可使用Google 在线API。

  • 如果Tesseract和Google Vision API都没有获得合理的准确度,则需要重新评估数据集,并决定是否要培训自定义字符分类器。

1. 效果图

原始图如下:

命令行Tesseract-OCR结果如图:

tesseract版本 v5.0.0,可以看到高于v4,使用的是长短时记忆(LSTM)OCR模型,该模型比Tesseract的早期版本精确得多!
Python+Tessearct-OCR绑定识别,预处理(阈值化)后的效果图如下:

可以看到阈值化后的图像相当清晰,分辨率也很高,因此成功识别。

Python+Tessearct-OCR绑定识别,预处理(中值模糊)后的效果图如下:
可以看到成功识别~

效果图2——原始图VS 阈值化后的图像:

噪音更多一些的Tesseract-OCR命令行也能成功识别:

python+Tesseract-OCR预处理(阈值化后)识别效果图如下:

python+Tesseract-OCR预处理(中值模糊后)识别效果图如下:
可以看到中值模糊后有不少噪音,依然成功识别~

更多的文本也可以成功识别,Python+Tesseract-OCR效果图如下:

2. 安装Tesseract+Python“绑定”及识别

  • 安装pillow,它是一个对Python更友好的PIL(一个依赖项)端口
  • 安装tesseract

pip install pillow
pip install pytesseract

pytesseract 不提供真正的Python绑定。相反,它只是提供了一个到tesseract的调用映射接口。然后调用tesseract二进制文件,并捕获结果输出。

可以使用Tesseract for OCR获得良好或可接受的结果,但最好的准确度将来自对实际图像中出现的特定字体集的自定义字符分类器进行训练。

通过升级Tesseract版本来提高OCR准确性。

如果在输出中看到Tesseract v4或更高版本,则使用的是长短时记忆(LSTM)OCR模型,该模型比Tesseract的早期版本精确得多!
如果看到任何低于v4的版本,则应升级Tesseract安装-使用Tesseract v4 LSTM引擎将获得更准确的OCR结果。

3. 源码

# 使用pytesseract调用tesseract-ocr进行OCR识别
# 命令行ocr
# tesseract D:\deepLearning\py-demo\20210822\images\example_01.png stdout# USAGE
# python ocr.py --image images/example_01.png
# python ocr.py --image images/example_01.png --preprocess blur# 导入必要的包
from PIL import Image  #以PIL格式加载磁盘图像
import pytesseract
import argparse
import cv2
import os# 构建命令行参数及解析
# --image 输入图像路径
# --preprocess:预处理类型,thresh或blur
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image to be OCR'd")
ap.add_argument("-p", "--preprocess", type=str, default="thresh",help="type of preprocessing to be done")
args = vars(ap.parse_args())# 加载图像并转换为灰度图
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 预处理以便将前景与背景分割开来
# 检测是该用阈值还是模糊预处理步骤
if args["preprocess"] == "thresh":gray = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
# 检测是否应该用中值模糊
# 应用中值模糊有助于减少椒盐噪声,使Tesseract更容易正确地对图像进行OCR。
elif args["preprocess"] == "blur":gray = cv2.medianBlur(gray, 3)# 将灰度图临时写入磁盘以调用OCR识别
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)# 以PIL(pillow)格式加载图像,应用OCR,删除临时文件
# 将图像的内容转换为所需的字符串文本
text = pytesseract.image_to_string(Image.open(filename))
os.remove(filename)
# 输出识别的文本值
print(text)# 展示原始图像和预处理图像
cv2.imshow("Image", image)
cv2.imshow("Output", gray)
cv2.waitKey(0)

参考

  • eng.traineddata,chi_sm.traineddata语言训练包下载
  • https://www.pyimagesearch.com/2017/07/10/using-tesseract-ocr-python/
  • https://github.com/UB-Mannheim/tesseract/wiki

使用Python,OpenCV进行Tesseract-OCR绑定及识别相关推荐

  1. 用Python+OpenCV+PyQt开发的答题卡识别软件

    用Python+OpenCV+PyQt开发的答题卡识别软件 软件使用说明 软件设计思路 如何设置答案 界面风格 备注 这是一个可以识别定制答题卡的软件,它可以根据用户自定的答案来进行识别,校对正误并统 ...

  2. python+opencv图像处理之边缘检测车道线识别

    python+opencv图像处理之边缘检测车道线识别 1.自行安装python和opencv 2.导入我们要使用的相关库 import cv2 from matplotlib import pypl ...

  3. Python+Opencv身份证号码区域提取及识别实现

    前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出.现在实训结束了将代码发布出来供大家参考,识别 ...

  4. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  5. iOS实践:OpenCV、Tesseract OCR结合 识别图片中文字

    前言: 前天领导问,类似扫描文件识别图中文字的功能如何实现,找一下第三方的开源库,尝试下,于是有了这篇文章: 分析: 识别场景中,识别身份证信息当属典型,查阅了几篇文章,后续的实现中也多导入了其代码: ...

  6. android自动识别文字,Android文字识别tesseract ocr -训练样本库 识别字库

    目录 安装tesseract ocr引擎和jTessBoxEditor 安装jTessBoxEditor 开始制作box 准备好训练的图片 将图片转为tif格式的样本图片 合并样本图片 修改box文件 ...

  7. 使用python+opencv写一个简单的条形码识别代码

    这是一段使用 Python OpenCV 库识别条形码的示例代码: import cv2# 读入图片 img = cv2.imread("barcode.jpg")# 创建条形码检 ...

  8. 关于Tesseract OCR 中文训练识别小试(java调用Tess4j)

    2017.9.20日小结 最近接到是关于消防系统协议解析仪器的项目,目的是从协议解析仪器获取有效数据,并解析数据(目的是不希望消防主机的数据信息再传给主机厂商而是最后能给自己收集调用).由于各个消防器 ...

  9. Python+OpenCV实现图像处理OCR手写数字识别原理

    文章目录 一.基本原理 1.载入训练图片: 2.图片分割: 3.灰度处理: 4.数据矩阵化: 5.分配训练集与测试集: 6.将训练测试集进行标定: 7.创建KNN邻近: 8.使用测试集: 二.具体代码 ...

  10. 小白都能学会的python+opencv,带你从人脸识别做到车牌识别,成为别人口中赞叹的高手!

    一.第一步,对于小白来说,用什么编辑很难选择,怎么下载免费的编辑器也不会,会用电脑下载的又总是被下载许多附带的垃圾软件,这个问题让我来解决,这里我们首先需要安装两个软件以及配置一个pip豆瓣源,第一个 ...

最新文章

  1. 全球比特币和区块链领域创业企业全景图
  2. 数字图像处理——形态学图像处理及图像分割
  3. .NET开发框架(二)-框架功能简述
  4. ASP.NET Core 2.0 MVC项目实战
  5. FPGA(0)--quartusⅡ安装
  6. Exynos4412 文件系统制作(三)—— 文件系统移植
  7. python内核死亡的原因_Python xgboost:内核死亡
  8. gallery3d 代码分析之 glsurfaceview
  9. [漏洞案例]thinkcmf 2.x从sql注入到getshell实战
  10. java;break语句
  11. citrix终端linux,Citrix XenDesktop发布Centos 7.2桌面(六)--安装Linux VDA
  12. 学嵌入式职业发展方向有哪些?
  13. c语言转义字符总结,C语言转义字符总结
  14. Java生成和解析二维码
  15. PDF转换成html的完美方法
  16. 【重拾Typora】
  17. 外环最低13000/平 虎年新春楼市成交排行榜
  18. cellpadding的用法和定义
  19. 常用的Joomla扩展 模块 插件
  20. C# 仿360悬浮球开发demo程序

热门文章

  1. 员工信息管理系统java6_职工信息管理系统java源代码【可修改】.doc
  2. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法
  3. MySQL下载与安装教程以及环境变量配置
  4. No view found for id 0x7f0900d8
  5. Python的数据库操作(Sqlalchemy)
  6. [转载]Surging 分布式微服务框架使用入门
  7. day1---while循环语句和练习
  8. Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度
  9. STL map 简介
  10. JQuery操作下拉框