Python实现文字识别OCR

news/2025/2/14 5:06:53/

Python实现文字识别OCR可选的库很多,这里介绍了Tesseract、ddddocr、CnOCR、paddleocr等。

Tesseract

Tesseract是一个开源的ocr引擎,可以开箱即用,项目最初由惠普实验室支持,1996年被移植到Windows上,1998年进行了C++化。在2005年Tesseract由惠普公司宣布开源。2006年到现在,都由Google公司开发。

import pytesseract
from PIL import Image, ImageEnhance
"""
步骤①:定位图片的元素,并且截取当前浏览器的页面图片
步骤②:获取验证码坐标点,以及验证码图片、浏览器、截图的长和宽
步骤③:截取截图里的验证码图片,获得的验证码图片并保存
步骤④:获得验证码code
"""
# imagePng = "../img/test.png"
# 原图路径
imagePng = "../img/test.png"
# 处理之后图片的路径
savePngPath = "../img/savePng.png"# 原图转对象
resource_img = Image.open(imagePng)# 转换模式:L | RGB
resource_img = resource_img.convert('L')# 提高识别率
enhancer = ImageEnhance.Color(resource_img)
enhancer = enhancer.enhance(0)
enhancer = ImageEnhance.Brightness(enhancer)
enhancer = enhancer.enhance(2)
enhancer = ImageEnhance.Contrast(enhancer)      # 增强对比度
enhancer = enhancer.enhance(8)
enhancer = ImageEnhance.Sharpness(enhancer)
resource_img = enhancer.enhance(20)resource_img = ImageEnhance.Contrast(resource_img)  # 增强对比度
resource_img = resource_img.enhance(2.0)
resource_img.save(savePngPath)# 识别图片
code = pytesseract.image_to_string(Image.open(savePngPath)).strip()
#code = pytesseract.image_to_string(Image.open('../img/xin.png')).strip()
print(f"提取的文字为:{code}")

ddddocr

ddddocr(Deep Double-Digital Digits OCR)是一个基于深度学习的数字识别库,专门用于识别双重数字(双位数字)的任务。它是一个开源项目,提供了训练和预测的功能,可用于识别图片中的双位数字并输出其具体的数值。

pip install ddddocr
import ddddocrocr = ddddocr.DdddOcr(old=True)
with open('../img/test.png', 'rb') as f:img_bytes = f.read()
res = ocr.classification(img_bytes)
print('识别出的文字为:' + res)
import ddddocr# 初始化 OCR 引擎
ocr = ddddocr.DdddOcr()# 读取身份证图像
image_path = 'path_to_your_image.jpg'
image = ddddocr.imread(image_path)# 图像预处理
# TODO: 进行图像预处理操作,如裁剪、缩放、灰度转换等# 文字区域检测
text_boxes = ocr.detect(image)# 文字识别
results = []
for box in text_boxes:text = ocr.recognize(image, box)results.append(text)# 结果解析
# TODO: 对识别结果进行解析和后处理,提取身份证上的关键信息# 输出识别结果
for result in results:print(result)

CnOCR

CnOCR 是 Python 3 下的文字识别(Optical Character Recognition,简称OCR)工具包,支持简体中文、繁体中文(部分模型)、英文和数字的常见字符识别,支持竖排文字的识别。自带了20+个训练好的识别模型,适用于不同应用场景,安装后即可直接使用。同时,CnOCR也提供简单的训练命令供使用者训练自己的模型。欢迎加入 交流群。

$ pip install cnocr[ort-cpu]
from cnocr import CnOcrimg_fp = './docs/examples/huochepiao.jpeg'
ocr = CnOcr()  # 所有参数都使用默认值
out = ocr.ocr(img_fp)print(out)

paddleocr

参考链接

https://github.com/tesseract-ocr/tesseract
https://github.com/sml2h3/ddddocr
https://aka.ms/vs/16/release/VC_redist.x86.exe
https://aka.ms/vs/16/release/VC_redist.x64.exe
https://cnocr.readthedocs.io/zh/latest/
https://github.com/PaddlePaddle/PaddleOCR


http://www.ppmy.cn/news/1148533.html

相关文章

java 常量、变量、数据类型

常量 * 指在程序执行期间其值不能发生变化的数据。例如数学中的π 3.1415……又如:整数123,小 数1.23,字符’A’,布尔常量 true、false等,程序开发中,常量名一般规则全部大写,声明常量时必 须赋…

深入解剖线程池(ThreadPoolExecutor)

目录 1 线程池(ThreadPoolExecutor)2 线程池的使用(Executors)2.1 newFixedThreadPool2.2 newCachedThreadPool2.3 newSingleThreadExecutor2.4 newScheduledThreadPool 多线程应用程序中,线程的创建和销毁开销相对较高…

文件上传 [极客大挑战 2019]Upload 1

题目来源&#xff1a;buuctf [极客大挑战 2019]Upload 1 打开题目 是一道文件上传题 我们上传png和jpg格式的一句话木马上去看看 上传失败了&#xff0c;应该是在后端也对我们的文件内容进行了检测&#xff0c;检测到我们的一句话木马里面包含<? 那我们重新换个一句话木…

c++ 学习之 强制类型转换运算符 const_cast

看例子怎么用 int main() {int a 1;int* p a;// 会发生报错// 如果学着 c的风格类型转换int* pp (int*)a;*pp 1; // 编译不报错&#xff0c;但是运行报错// const_castconst int n 5;const std::string s "lalal";// const cast 只针对指针&#xff0c;引用&…

MS4344:24bit、192kHz 双通道数模转换电路

MS4344 是一款立体声数模转换芯片&#xff0c;内含插值滤波器、 multi-bit 数模转换器、输出模拟滤波器。 MS4344 支持大部分 的音频数据格式。 MS4344 基于一个带线性模拟低通滤波器的 四阶 multi-bit Δ-Σ 调制器&#xff0c;而且本芯片可以通过检测信号频率 和主时钟频…

panads操作excel

panads简介 pandas是基于Numpy创建的Python包&#xff0c;内置了大量标准函数&#xff0c;能够高效地解决数据分析数据处理和分析任务&#xff0c;pandas支持多种文件的操作&#xff0c;比如Excel&#xff0c;csv&#xff0c;json&#xff0c;txt 文件等&#xff0c;读取文件之…

多线程并发篇---第五篇

系列文章目录 文章目录 系列文章目录一、什么是线程安全二、Thread类中的yield方法有什么作用?三、Java线程池中submit() 和 execute()方法有什么区别?一、什么是线程安全 线程安全就是说多线程访问同一段代码,不会产生不确定的结果。 又是一个理论的问题,各式各样的答案有…

第二章:OSI参考模型与TCP/IP模型

OSI参考模型与TCP/IP模型 一、OSI参考模型二、TCP/IP模型2.1 四层分法&#xff08;书上&#xff09;2.2 五层分法&#xff08;实际厂商&#xff09;2.3 数据封装和解封装2.3.1 封装2.3.2 解封装2.3.3 TCP/IP分层封装2.3.4 数据封装和解封装过程 一、OSI参考模型 1.物理层 定义电…