Tesseract OCR技术初探(Python调用)
一、Tesseract OCR技术解析
1.1 核心架构与发展历程
Tesseract是由HP实验室于1985年研发的光学字符识别引擎,2005年由Google开源并持续维护至今。其核心技术经历了三个阶段演进:
- 传统模式(v3.x):基于特征匹配算法,识别准确率约85%
- LSTM时代(v4.0):引入长短期记忆神经网络(LSTM),准确率提升至95%+
- 多模态融合(v5.0+):结合传统算法与深度学习模型,支持复杂版式分析
技术特性对比:
版本 引擎类型 语言支持 识别速度 适用场景
v3.x 模式匹配 60+语言 快 印刷体文档
v4.x LSTM 100+语言 中等 自然场景文本
v5.x 混合引擎 130+语言 较慢 表格、多语言混合
1.2 核心技术原理
Tesseract的工作流程分为五个核心阶段:
- 图像预处理:灰度化、二值化、噪声消除
- 版面分析:基于连通域检测的文本区域定位
- 行分割:利用投影法划分文本行
- 字符切分:动态规划算法优化字符边界
- 识别引擎:LSTM网络生成字符概率矩阵
二、环境配置与安装指南
tesseract ocr是独立一个程序,需要先将其安装到系统中,然后python上安装pytesseract才可以调用。
访问官网github
2.1 多平台安装流程
Windows系统
官方主要发力在Linux和Mac系统,Windows上的安装包是第三方提供的,目前最新是v5.4.0。
访问UB Mannheim镜像站下载最新安装包(推荐v5.4.0)
安装时勾选Additional language data并指定中文包
配置环境变量:
PATH添加:C:\Program Files\Tesseract-OCR
系统变量:TESSDATA_PREFIX=C:\Program Files\Tesseract-OCR\tessdata
Linux系统
sudo apt install tesseract-ocr libtesseract-dev
sudo apt install tesseract-ocr-chi-sim # 中文包
macOS系统
brew install tesseract
brew install tesseract-lang
2.2 Python依赖库安装
pip install pytesseract pillow opencv-python
验证安装:
import pytesseract
print(pytesseract.get_tesseract_version()) # 应输出5.4.0.20240606
三、简单文本识别
import pytesseractdef tesseract_ocr_simple(image):config = ('--oem 3 ' # 使用LSTM+传统引擎'--psm 6 ' # 假定单行文本'-c preserve_interword_spaces=1' # 保留空格)text = pytesseract.image_to_string(image, config=config)return text.strip()img_path = 'pic001.png'
result = tesseract_ocr_simple(img_path)
print(f"识别结果:{result}")
参数说明表:
参数 | 取值范围 | 作用描述 |
---|---|---|
–oem | 0-3 | 引擎模式(0=传统, 1=LSTM, 2=混合, 3=默认) |
–psm | 0-13 | 页面分割模式(详细说明见下表) |
-l | 语言代码 | 指定识别语言(如eng+chi_sim) |
PSM(Page Segmentation Modes)详细说明
值 | 模式名称 | 适用场景描述 |
---|---|---|
0 | OSD_ONLY | 仅执行方向和脚本检测 |
1 | AUTO_OSD | 自动页面分割(带OSD) |
2 | AUTO_ONLY | 自动页面分割(无OSD) |
3 | AUTO | 完全自动页面分割(默认) |
4 | SINGLE_COLUMN | 单列文本 |
5 | SINGLE_BLOCK_VERT_TEXT | 垂直对齐的单个文本块 |
6 | SINGLE_BLOCK | 单个文本块(默认用于单行) |
7 | SINGLE_LINE | 单行文本 |
8 | SINGLE_WORD | 单个单词 |
9 | CIRCLE_WORD | 圆形/弧形文本 |
10 | SINGLE_CHAR | 单个字符 |
11 | SPARSE_TEXT | 查找尽可能多的文本(稀疏分布) |
12 | SPARSE_TEXT_OSD | 稀疏文本带OSD |
13 | RAW_LINE | 将图像视为单个文本行(忽略换行符) |
使用建议:
- 常规文档:3(AUTO)或6(SINGLE_BLOCK)
- 单行文本:7(SINGLE_LINE)
- 验证码识别:8(SINGLE_WORD)或10(SINGLE_CHAR)
- 不规则排列文本:11(SPARSE_TEXT)
四、图像预处理技术
4.1 OpenCV预处理流程
预处理是个大学问,如下只是简单的示例。
import cv2def preprocess_image(image_path):img = cv2.imread(image_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)denoised = cv2.medianBlur(binary, 3)return denoisedprocessed_img = preprocess_image('low_contrast.jpg')
4.2 多维度优化策略
几何校正(倾斜矫正):
def deskew(image):coords = np.column_stack(np.where(image > 0))angle = cv2.minAreaRect(coords)[-1]if angle < -45:angle = -(90 + angle)else:angle = -angleM = cv2.getRotationMatrix2D((w//2, h//2), angle, 1.0)rotated = cv2.warpAffine(image, M, (w, h))return rotated
对比度增强:
alpha = 1.5 # 对比度系数
beta = 30 # 亮度调整
adjusted = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
五、中文识别
如果安装时没用将中文识别库带上,也不要着急,可以将中文库下载放到Tessercact路径下的tessdata文件夹中。
chi_sim.traineddata可以到官网下载,不方便也可以到csdn的资源中下载。
使用时需在配置中增加语言选项,如下面例子:
def tesseract_ocr_chinese(image):config = ('--oem 3 ' # 使用LSTM+传统引擎'--psm 6 ' # 假定单行文本'-l chi_sim+eng+num' # 中文+英文+数字的识别'-c preserve_interword_spaces=1' # 保留空格)text = pytesseract.image_to_string(image, config=config)return text.strip()
六、高级应用场景
5.1 结构化数据提取
要想获得文字的位置和识别的置信度,需要使用结构化数据的方式提取。
from pytesseract import Outputdata = pytesseract.image_to_data(img, output_type=Output.DICT)
for i, word in enumerate(data['text']):if word.strip():print(f"Word {i}: {word}")print(f"Position: ({data['left'][i]}, {data['top'][i]})")print(f"Confidence: {data['conf'][i]}%")
输出数据:
Word 4: NAME
Position: (34, 31)
Confidence: 96%
Word 6: .github
Position: (34, 75)
Confidence: 54%
Word 10: emake
Position: (33, 120)
Confidence: 8%
5.2 验证码识别实战
def captcha_recognize(image_path):img = cv2.imread(image_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)custom_config = r'--oem 3 --psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'text = pytesseract.image_to_string(gray, config=custom_config)return text
最后
从默认中英文识别库的测试来看,识别率并不高。看来要使用它商用,必须要自己训练不可了。
相关文章:
Tesseract OCR技术初探(Python调用)
一、Tesseract OCR技术解析 1.1 核心架构与发展历程 Tesseract是由HP实验室于1985年研发的光学字符识别引擎,2005年由Google开源并持续维护至今。其核心技术经历了三个阶段演进: 传统模式(v3.x):基于特征匹配算法&a…...
黑盒测试的测试用例构成的八点要素
测试用例: 是为测试项目而设计的执行文档 作用: 防止漏测实施测试的标准 编写格式: 用例编号:项目 模块 编号用例标题:预期结果(测试点)模块/项目:所属项目或模块优先级:表示用例的重要程度或者影响力P0~p4(P0最高)前置条件:要执行此条用例…...
手撕string
目录 引言 1,成员变量 2,先建一个可以跑的 2_1,构造函数 2_2, 扩容函数reserve 2_3,push_back 2_4,append[ ] 2_5,operator << 2_6,测试一下,看猪跑 3&…...
12款星光闪光污迹艺术绘画效果Clip Studio Paint笔刷画笔+闪光纹理图片 Clip Studio Glitter Texture Brushes
这 12 种 Clip Studio 画笔 额外的闪光纹理包含闪光、污迹、星光和闪亮的斑点,为您的艺术增添额外的流行感。想想闪光胶,但已经长大了(而且更好)。想象一下:无论您是用微小的闪光还是厚实的微光涂鸦,都有适…...
5G_WiFi_CE_杂散测试
目录 一、规范要求 1、法规目录: 2、限值: (1)带外发射杂散 (2)带内发射杂散 (3)接收杂散 二、测试方法 1、带外发射杂散 (1)测试条件 (…...
蓝卓为中小制造企业注入数字化转型活力
随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加,市场竞争越来越激烈,传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识,在数字化的进程中,中小企业首要考虑生存问题,不能…...
集成 shardingsphere-jdbc 常见问题
一、报错内容 Caused by: org.apache.ibatis.executor.ExecutorException: Error preparing statement. Cause: org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException: Table or view t_xxx does not exist. 解决 1、配置 !SHARDING rules:-…...
DeepSeek接入飞书多维表格,效率起飞!
今天教大家把DeepSeek接入飞书表格使用。 准备工作:安装并登录飞书;可以准备一些要处理的数据,确保数据格式正确,如 Excel、CSV 等,也可直接存储到飞书多维表格。 创建飞书多维表格:打开飞书,点…...
AI来了,新手如何着手学习软件开发?
AI时代新手学习软件开发的7步进化指南 (附具体工具与避坑策略) 一、建立“人机协作”学习观 AI是教练,不是替身 正确姿势:用AI辅助理解概念(如让DeepSeek 、ChatGPT用生活案例解释递归),但坚持手…...
sqli-labs靶场 less5
文章目录 sqli-labs靶场less 5 报错注入 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”…...
AI基础02-图片数据采集
上篇文章我们学习了文本的数据采集,今天主要了解一下图片数据采集的方法。图片采集方法通常有网页采集和实时采集(传感器采集)两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行图片数据的实时采集。 1)cv2库简介 …...
QT音乐播放器(1):数据库保存歌曲
实现功能:用数据库保存本地导入和在线搜索的歌曲记录 目录 一. 保存本地添加的歌曲 1. 使用QSettings (1)在构造函数中,创建对象。 (2)在导入音乐槽函数中,保存新添加的文件路径,…...
Java面试黄金宝典22
1. 树的中序遍历,除了递归和栈还有什么实现方式 定义 Morris 遍历是一种用于二叉树遍历的算法,它利用树中大量空闲的空指针,在不使用额外栈空间和递归的情况下,完成树的遍历。通过建立临时的线索连接,使得可以按照中…...
英伟达GB300新宠:新型LPDDR5X SOCAMM内存
随着人工智能(AI)、机器学习(ML)和高性能计算(HPC)应用的快速发展,对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计,以满足这些严格…...
验证Linux多进程时间片切换的程序
一、软件需求 在同时运行多个CPU密集型进程时,需采集以下统计信息: 当前运行在逻辑CPU上的进程ID每个进程的运行进度百分比 实验程序设计要求: 1. 命令行参数 参数说明示例值n并发进程数量3total总运行时长(毫秒&…...
Linux学习笔记(应用篇四)
基于I.MX6ULL-MINI开发板 输入设备tslib库 输入设备 触摸屏 触摸屏设备是绝对位移设备可以上报绝对位移事件 触摸可分为单触摸和双触摸 BTN_TOUCH :按压触摸屏和松开会触发上报,滑动时不会 单触摸上报事件 ABS_X: X 轴绝对位移坐标值 ABS_Y…...
linux基本命令(1)--linux下的打包命令 -- tar 和gzip
tar 解压 ,打包 语法:tar [主选项辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。 主选项: c 创建新的档案文件。如果用户想备…...
【Linux内核系列】:文件ELF格式详解
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: “人生没有白走的路,你踩过的荆棘、蹚过的泥泞,都会在某一刻,变成你脚下的风。” ★★★ 本文前置…...
CubeMx ——新建工程
新建工程 选择芯片 设置主频 选择调试口 选择晶振口 设置 GPIO 输出 工程设置 LED 闪烁 /* USER CODE BEGIN WHILE */while (1){HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_10);HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */...
使用postcss-px-to-viewport-8-plugin将页面转响应式
使用postcss-px-to-viewport-8-plugin将页面转响应式 背景 公司最近接了个项目,其中要求部分页面在移动端正常显示,第一方案是使用响应式,但是设计稿最后出的和Web端差别较大同时两端的功能不是完全对齐的,所以决定使用两个模块…...
Java---类与对象
类与对象 前言:一、面向对象二、类的定义1.类的定义格式2.访问修饰限定符 三、类的实例化四、this引用1.this引用2.this引用的原因 五、对象的构造和初始化1.初始化对象2.构造方法(1).构造方法的概念:(2).特性:(3).this调用:3.就地初始化4.默…...
告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验
告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验 哈喽小伙伴们好,我是Stark-C~ 先如今,家里的电子产品越来越多,手机、平板、电脑三件套已经是基础配置,还有相机、Switch、智能手表等,这些产品用…...
基于springboot+vue的农产品电商平台
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0
问题描述: 从日志看出,dom0运行android_kernel,刚开始运行就会crash,引发panic 解决及其原因分析: 最终问题得到解决,发现是前期在调试汇编阶段代码时,增加了汇编打印的指令,注释掉这些指令,问题得到解决。…...
MySQL 语句
MySQL 语句教程博客 MySQL 是目前广泛应用的关系型数据库管理系统,本文将详细介绍 MySQL 中常用的 SQL 语句及其应用,内容主要涵盖以下部分: DDL(数据定义语言) DML(数据操作语言) DQL&#…...
MySQL General Log
MySQL General Log MySQL General Log General Log 的开启General Log 的用法log_output 参数 MySQL主从复制:https://blog.csdn.net/a18792721831/article/details/146117935 MySQL Binlog:https://blog.csdn.net/a18792721831/article/details/146606…...
自动关机监控器软件 - 您的电脑节能助手
## 自动关机监控器 - 您的电脑节能助手 自动关机监控器是一款基于Python开发的实用工具,旨在帮助用户节省电力资源并延长电脑使用寿命。该程序通过监控用户的鼠标和键盘活动,在设定的无活动时间后自动关闭计算机,特别适合需要长时间离开电脑但…...
基于改进粒子群算法的多目标分布式电源选址定容规划(附带Matlab代码)
通过分析分布式电源对配电网的影响,以有功功率损耗、电压质量及分布式电源总容量为优化目标,基于模糊理论建立了分布式电源在配电网中选址定容的多目标优化模型,并提出了一种改进粒子群算法进行求解。在算例仿真中,基于IEEE-14标准…...
解锁健康密码:拥抱多元养生新方式
在追求高质量生活的当下,健康养生不再是一句空洞的口号,而是融入到日常生活的方方面面。它不仅关乎我们的身体健康,更与心理状态和生活品质息息相关。下面,就为大家介绍一些实用的养生知识,帮助大家开启健康生活之旅。…...
@Slf4j注解
Slf4j注解是Lombok库提供的一个注解,用于简化日志记录器的创建。使用该注解后,无需手动创建Logger实例,编译器会自动帮你完成这一步。以下是使用Slf4j注解打印日志的步骤和示例: 使用步骤 1. 引入依赖:在项目中引入SL…...
firewall-cmd添加访问规则
若要使用 **firewall-cmd** 允许 192.168.3.0/24 网段访问本地的 8088 端口,你可以按照以下步骤操作。 临时允许访问 如果你仅需临时允许该网段访问 8088 端口,可使用如下命令: firewall-cmd --add-rich-rulerule family"ipv4" …...
【Linux网络与网络编程】02.初识Socket编程
1. 数据传输的目的 前一篇文章中我们讲解了网络传输的流程,那么网络传输的目的是什么呢?难道我们只是将数据从一台主机传输到另一台主机吗? 当然不是的!因为数据是给人用的。比如:聊天是人在聊天,下载是人…...
Python库()
1.概念 Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂 Matplotlib 图形组成: Figure:指整个图形…...
CVPR-2025 | 南洋理工基于图表示的具身导航统一框架!UniGoal:通用零样本目标导航方法
作者:Hang Yin 1 ^{1} 1, Xiuwei Xu 1 ^{1} 1, Linqing Zhao 1 ^{1} 1, Ziwei Wang 2 ^{2} 2, Jie Zhou 1 ^{1} 1, Jiwen Lu 1 ^{1} 1单位: 1 ^{1} 1南洋理工大学, 2 ^{2} 2清华大学论文标题:UniGoal: Towards Universal Zero-sho…...
Banner区域
div下 justify-content:space-between 左侧测导航left 在这里插入图片描述 在这里插入图片描述...
【C++】C++11介绍列表初始化右值引用和移动语义
个人主页 : zxctscl 如有转载请先通知 文章目录 1. C11简介2. 统一的列表初始化2.1{}初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype3.3 nullptr 4. 范围for循环4.1 范围for的语法4.2 范围for的使用条件 5. STL中一些变化6. 右…...
基于Spring Boot的高校普法系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
算法为舟 思想为楫:AI时代,创作何为?
在科技浪潮汹涌澎湃的当下,AI技术以前所未有的态势席卷各个领域,创作领域亦未能幸免。当生成式AI展现出在剧本撰写、诗歌创作、图像设计等方面的惊人能力时,人类创作者仿佛置身于文明演化的十字路口,迷茫与困惑交织,兴奋与担忧并存。在AI时代,创作究竟该何去何从?这不仅…...
GPT-4o 原生图像生成技术解析:从模型架构到吉卜力梦境的实现
最近不少 AI 爱好者、设计师、Vlogger 在社交平台晒出了 GPT-4o 生成的梦幻图像,尤其是吉卜力风格的作品——柔和光影、日系构图、治愈色彩、富有情感的角色表达,一下子击中了无数人的“童年回忆 审美舒适区”。 🎨 下面是一些 GPT-4o 实际生…...
无线通信技术(二):ITU、3GPP及传统波段对无线频谱的划分
本文介绍国际标准组织ITU、3GPP和传统波段对无线频谱的划分 。 一.ITU波段划分 国际电信联盟(ITU)将无线电频谱划分为多个频段,并根据频率范围和业务需求分配用途。 ITU对无线频谱的划分 带号频带名称频率范围波长范围波段名称典型应用…...
[Python学习日记-88] 并发编程之多进程 —— 队列与生产者消费者模型
[Python学习日记-88] 并发编程之多进程 —— 队列与生产者消费者模型 简介 队列 一、队列的介绍 二、队列的使用 生产者消费者模型 一、为什么要使用生产者消费者模型 二、什么是生产者消费者模型 三、生产者消费者模型的优势 四、生产者消费者模型的实现 JoinableQ…...
Vue学习笔记集--computed
computed 在 Vue 3 的 Composition API 中,computed 用于定义响应式计算属性 它的核心特性是自动追踪依赖、缓存计算结果(依赖未变化时不会重新计算) 基本用法 1. 定义只读计算属性 import { ref, computed } from vue;const count ref(…...
python之多线程,多进程理解
目录 一,什么是多线程多进程 1,1 多线程 1.2 多进程 二,多线程 2.1 使用threading模块 三,多进程 3.1 使用multiprocessing模块 3.2 多进程的优势 3.3 进程间的通信 四,如何选择多进程还是多线程 五,异步编程的替代方案(协程) 在开发过程中,提升程序的并…...
3月29日星期六今日早报简报微语报早读
3月29日星期六,农历三月初一,早报#微语早读。 1、全国公立医疗机构自3月31日起全面停止收取门诊预交金; 2、永辉超市“胖东来调改店”已达47家店 一线员工薪酬涨幅50%以上; 3、两孩家庭补10万,三孩家庭补20万&#…...
栈:隐匿于计算机科学长卷的璀璨明珠
目录 🚀前言🌟栈的概念🤔栈的两种实现形式💯数组栈实现💯链表栈实现 ⚙️数组栈与链表栈对比🐧递归与栈💻总结 🚀前言 大家好!我是 EnigmaCoder。 在计算机科学的宏大版图…...
【万字总结】前端全方位性能优化指南(七)——按需加载、虚拟列表、状态管理
现代框架高阶优化——突破复杂场景的性能临界点 当Web应用进入「十万级组件、百万级数据」的复杂场景时,传统优化手段开始触及框架底层瓶颈:Redux的单一Store引发级联渲染风暴、全量加载的首屏资源阻塞关键交互、长列表滚动导致内存飙升直至页面崩溃……这些痛点正在倒逼框架…...
合并石子 | 第十四届蓝桥杯省赛JavaB组
在桌面从左至右横向摆放着 N 堆石子。 每一堆石子都有着相同的颜色,颜色可能是颜色 0,颜色 1 或者颜色 2 中的其中一种。 现在要对石子进行合并,规定每次只能选择位置相邻并且颜色相同的两堆石子进行合并。 合并后新堆的相对位置保持不变&…...
【商城实战(94)】构建高并发的负载均衡与集群架构
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
鸿蒙开发:了解Canvas绘制
前言 本文基于Api13 系统的组件无法满足我们的需求,这种情况下就不得不自己自定义组件,除了自定义组合组件,拓展组件,还有一种方式,那就是完全的自绘制组件,这种情况,常见的场景有,比…...
Ubuntu和Windows实现文件互传
1.开启Ubuntu下的FTP服务: (1)终端输入: sudo apt-get install vsftpd(2)安装完成后: 终端输入: /etc 是 Linux 系统的全局配置文件目录,存储系统和应用程序的配置信息…...