基于python实现OCR的五种方法
- 1.pytesseract
- 1.1简介
- 1.2安装部署
- 1.3应用举例
- 2.PaddleOCR
- 2.1简介
- 2.2安装部署
- 2.3应用举例
- 3.easyocr
- 3.1简介
- 3.2安装部署
- 3.3应用举例
- 4.muggle_ocr
- 4.1简介
- 4.2安装部署
- 4.3应用举例
- 5.dddd_ocr
- 5.1简介
- 5.2安装部署
- 5.3应用举例
1.pytesseract
1.1简介
Tesseract是一款开源的OCR(Optical Character Recognition,光学字符识别)引擎,最初由HP实验室开发,在2005年后由Google接手并进一步开发和完善。Tesseract支持多种语言文字的检测和识别,包括中文、英语、德语、法语、意大利语等多种主要语言,同时也支持针对特定场景或应用的领域OCR开发。
Tesseract基于机器学习技术,使用了多层神经网络以及支持向量机(SVM)等算法进行文字特征提取和识别。同时,Tesseract通过图像预处理、二值化、斑点去除和边框检测等多个环节优化页面处理流程,并且提供了多种字体、大小、旋转角度和噪声等挑战场景下的训练数据集,使得识别精度可以获得不错的性能表现。
除了提供C++ API之外,Tesseract还为多种编程语言提供了API的封装,如Python、Java、C#等,方便用户快速上手开发应用,可以广泛应用于扫描文档、电子书库入库、自动化办公、图片文字识别搜索等各个领域。
1.2安装部署
pytesseract需要配合安装在本地的tesseract-ocr.exe文件一起使用。具体步骤如下:
- python终端利用pip安装pytesseract:
pip install pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple/
由于pip默认从国外的源下载包库,速度会非常缓慢,因此可以采用国内的镜像站下载会更加快捷,此处使用的是清华的镜像站,还可以换成其他几个镜像站:
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
- 下载tesseract-ocr.exe。可以从github上下载最新版本:
github传送门 github下载可能速度较慢,这里博主已经提前下载好了:可从百度云获取~
百度云传送门(提取码:qgh2) 安装步骤:
- 选择安装语言:直接默认英语-OK
- Next
- Agree
- 由于默认的识别语言是英语,这里我们要在Additional script data中勾选中文包,才可以OCR识别中文。(注:这里的vertical指的是识别竖向文本)
安装完成之后就可以在python当中进行实践啦~
1.3应用举例
下面是python应用Tesseract进行文字识别的代码实例:
import pytesseract
from PIL import Image
#英文识别:将路径改为自己要识别的图片路径即可
text1 = pytesseract.image_to_string(Image.open(r"C:\Users\1.png"), lang='eng')
print("英文模式识别结果:",text1)
print("-------------")
#简体中文识别:
text2 = pytesseract.image_to_string(Image.open(r"C:\Users\1.png"), lang='chi_sim')
print("中文模式识别结果:",text2)
print("-------------")
#简体中文与英文混合:
text3 = pytesseract.image_to_string(Image.open(r"C:\Users\1.png"), lang='chi_sim+eng')
print("中英文混合模式识别结果:",text3)
2.PaddleOCR
2.1简介
PaddleOCR是飞桨(PaddlePaddle)推出的一个端到端的光学字符识别开源工具集,支持中文、英文、数字以及特殊符号等各种类型的文字检测、识别和词语整体识别。该工具集使用PaddlePaddle深度学习框架技术,提供了多种OCR模型和算法,包括基于CNN+CTC、DenseNet+CTC等模型,能够针对不同场景和应用提供最优的OCR解决方案。同时,PaddleOCR还集成了OCR精度评估工具,可以快速地评估OCR模型的准确率和鲁棒性。除此之外,PaddleOCR还提供了丰富的API接口和命令行工具,使得用户可以轻松地进行OCR应用的开发和部署。
PaddleOCR除了支持通用文字识别外,还具备大量针对特定领域或行业的OCR功能,例如身份证/银行卡实现、表格识别、汽车VIN码识别、发票识别、名片识别等。相比其他OCR工具,PaddleOCR在识别精度、效率和扩展性等方面都有着较好的表现和广泛的适用性,是目前业内较为流行和优秀的OCR工具之一。
2.2安装部署
PaddleOCR的安装较为简单,直接在终端用pip安装即可,共三部分:
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.3应用举例
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
#要识别图片的路径:
img_path = r"C:\\Users\\3.png"
#识别结果:
result = ocr.ocr(img_path, cls=True)
#结果输出展示:
for line in result[0]:
print(line)
paddle识别输出结果包含三部分内容:识别文字在图中的位置boxes、识别出来的文本txts、识别结果置信度scores。
这三分存放在result列表中。其结构是这样的:
[[
[第一行的位置,(第一行的内容,得分)],
[第二行的位置,(第二行的内容,得分)],
[第三行的位置,(第三行的内容,得分)]
]]
tips:识别结果为什么在一个总的列表外面又嵌套了一层列表呢?这是由于示例中待识别图片只有一个文字区域,因此我们用result[0]来获取结果,如果图片中有多个文字区域,则会有多个结果列表,所以外面会套一层大的列表来包含各个文字区域的识别结果。通常情况下直接用result[0]即可。
由于boxes、txts、scores混合在列表中不方面使用,这里我们在识别结果的基础上把三项内容提取出来:
boxes = []
txts = []
scores = []
for line in result[0]:
boxes.append(line[0])
txts.append(line[1][0])
scores.append(line[1][1])
print("scores:")
for i in range(len(scores)):
print (scores[i])
print("txts:")
for i in range(len(txts)):
#原格式文本输出
print (txts[i])
#输出不换行
#print (txts[i],end = "")
print("boxes:")
for i in range(len(boxes)):
print (boxes[i])
3.easyocr
3.1简介
EasyOCR是一款基于Python的开源OCR工具,针对中英文、韩语、日语、法语、德语、意大利语、西班牙语和葡萄牙语等多种语言提供快速有效的文字检测和识别功能。EasyOCR采用深度学习技术,使用卷积神经网络(CNN)和循环神经网络(RNN)等模型进行文字检测与识别,并且集成了多种预处理技术、数据增强等方法来优化文字识别效果。
EasyOCR在训练过程中使用了公开数据集和自己构建的实验室数据集相结合的方式,使得训练样本大大增加,从而提高了模型的泛化能力和准确率。除了通用文字识别功能之外,EasyOCR还支持多种特定领域的OCR需求,如身份证、驾驶证、名片、银行卡、车牌号码等,也可以兼容用户自定义训练数据集,满足个性化的OCR需求。
EasyOCR具有易于安装、使用方便、模型轻量化、可扩展性强等特点,在表现和使用体验上超越了Tesseract和其他一些OCR工具。同时,EasyOCR提供的API接口也非常简单易懂,因此受到了广大机器学习开发者和数据科学家的青睐,被应用于各种OCR场景与对出现较好的表现。
3.2安装部署
- 通过python终端安装easyocr库
pip install easyocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
- EasyOCR首次运行还需要安装识别模型,运行时会自动安装,但是速度极慢!!!还经常会下载失败,因此这里博主给大家准备好了。
百度云传送门(提取码:67aj) 模型下载完成后,需要将model中的文件放到C:\Users\dragon.EasyOCR\model中,这时启动程序就不需要加载模型了
3.3应用举例
import easyocr
#设为中英文混合识别:ch_sim en
reader = easyocr.Reader(['ch_sim','en'], gpu = False)
#路径改为用户需要识别的图片的路径
result = reader.readtext(r"C:\\Users3.png", detail = 0)
for i in result:
print(i, end = '')
4.muggle_ocr
4.1简介
Muggle OCR是一款基于Python的开源OCR库,能够支持多种语言文字的检测和识别,包括中文、英文、日文、韩文等多种主要语言。Muggle OCR依托于深度学习技术,采用了卷积神经网络(CNN)和循环神经网络(RNN)等模型进行文字特征提取和识别。
与其他OCR工具不同的是,Muggle OCR使用Tensorflow 2.0框架搭建,并使用Keras API进行模型构建和训练,代码风格简洁清晰易读,其中包含的API也非常直观易用。同时,Muggle OCR还使用Lecun的LeNet-5作为基础卷积神经网络模型,能够有效地降低模型复杂度,减少参数量,提高模型效率和推理速度。此外,Muggle OCR还对图片进行透视变换、二值化、字符分割等预处理方法,提高了文字识别的精度和鲁棒性。
Muggle OCR具备轻量级、快速、易扩展等特点,其被广泛应用于证件识别、汽车VIN码识别、手写数字识别、自然场景文字识别等各种OCR应用场景。由于其开源且易学,越来越多的开发者加入到Muggle OCR的贡献者行列中,这也促进了Muggle OCR全球用户社区的不断壮大。
4.2安装部署
python官网和国内各镜像站点已经将myggle_ocr的库删除了,无法通过pip install安装。博主给大家准备好啦~~
百度云传送门(提取码:deqz) 手动下载后,用vscode或其他IDE打开压缩包所在文件夹:
pip install muggle-ocr-1.0.3.tar.gz -i https://pypi.douban.com/simple --user
tips:如果是直接在cmd里面安装,则压缩包前面要指明其所在路径
4.3应用举例
import muggle_ocr
# 初始化sdk;model_type共两种模式
#1. /ModelType.Captcha 验证码识别模式
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
#2.ModelType.OCR常规图片识别
#sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)
#请把路径改为用户下需要识别的图片
with open("C:\\Users\\dragon\\Desktop\\pictures\\6.png",'rb') as f:
img = f.read()
text = sdk.predict(image_bytes=img)
print(text)
tips:经过实测,muggle_ocr识别验证码的效果要好一些,要识别文本还是建议用前几种方式
5.dddd_ocr
5.1简介
dddd_ocr(懂得都懂_ocr),是一个开源的图像识别库,它主要用于识别和提取图像中的文本信息。该库支持多种图像格式,包括JPEG、PNG、BMP、GIF等,并且可以在多种操作系统上运行。
dddd_ocr的特点包括:
高准确性:dddd_ocr在识别和提取图像中的文本信息方面具有较高的准确率,尤其是对于中文和英文文本的识别效果更佳。
多种功能:dddd_ocr不仅可以识别文本,还可以提取图像中的二维码、车牌号码、条形码等多种信息,同时支持多种语言和文件格式。
易于使用:dddd_ocr的使用非常简单,只需要导入相应的库文件并调用相应的函数即可进行图像识别。
高效性:dddd_ocr采用了分布式计算的方式,可以将识别任务分配到多个节点上进行处理,从而提高了识别速度和效率。
总的来说,dddd_ocr是一个功能强大、易于使用、高效性高的图像识别库,可以广泛应用于文本识别、数据提取、图像处理等领域。
5.2安装部署
直接在python终端用pip命令安装就可以啦~~
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
5.3应用举例
import ddddocr
ocr = ddddocr.DdddOcr()
#请将下面路径改为用户需要识别图片的路径
with open("C:\\Users\\dragon\\Desktop\\pictures\\1.png",'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)