Tesseract OCR技术初探(Python调用)

一、Tesseract OCR技术解析

1.1 核心架构与发展历程

Tesseract是由HP实验室于1985年研发的光学字符识别引擎,2005年由Google开源并持续维护至今。其核心技术经历了三个阶段演进:

  1. 传统模式(v3.x):基于特征匹配算法,识别准确率约85%
  2. LSTM时代(v4.0):引入长短期记忆神经网络(LSTM),准确率提升至95%+
  3. 多模态融合(v5.0+):结合传统算法与深度学习模型,支持复杂版式分析

技术特性对比:
版本 引擎类型 语言支持 识别速度 适用场景

v3.x 模式匹配 60+语言 快 印刷体文档
v4.x LSTM 100+语言 中等 自然场景文本
v5.x 混合引擎 130+语言 较慢 表格、多语言混合

1.2 核心技术原理

Tesseract的工作流程分为五个核心阶段:

  1. 图像预处理:灰度化、二值化、噪声消除
  2. 版面分析:基于连通域检测的文本区域定位
  3. 行分割:利用投影法划分文本行
  4. 字符切分:动态规划算法优化字符边界
  5. 识别引擎: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}")

在这里插入图片描述

参数说明表:

参数取值范围作用描述
–oem0-3引擎模式(0=传统, 1=LSTM, 2=混合, 3=默认)
–psm0-13页面分割模式(详细说明见下表)
-l语言代码指定识别语言(如eng+chi_sim)

PSM(Page Segmentation Modes)详细说明

模式名称适用场景描述
0OSD_ONLY仅执行方向和脚本检测
1AUTO_OSD自动页面分割(带OSD)
2AUTO_ONLY自动页面分割(无OSD)
3AUTO完全自动页面分割(默认)
4SINGLE_COLUMN单列文本
5SINGLE_BLOCK_VERT_TEXT垂直对齐的单个文本块
6SINGLE_BLOCK单个文本块(默认用于单行)
7SINGLE_LINE单行文本
8SINGLE_WORD单个单词
9CIRCLE_WORD圆形/弧形文本
10SINGLE_CHAR单个字符
11SPARSE_TEXT查找尽可能多的文本(稀疏分布)
12SPARSE_TEXT_OSD稀疏文本带OSD
13RAW_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

在这里插入图片描述

最后

从默认中英文识别库的测试来看,识别率并不高。看来要使用它商用,必须要自己训练不可了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43233.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动语音识别(ASR)技术详解

语音识别&#xff08;Automatic Speech Recognition, ASR&#xff09;是人工智能和自然语言处理领域的重要技术&#xff0c;旨在将人类的语音信号转换为对应的文本。近年来&#xff0c;深度学习的突破推动语音识别系统从实验室走入日常生活&#xff0c;为智能助手、实时翻译、医…

Cursor 汉化教程

# 问题 想把 cursor 改成中文 我这里是汉化过的 # 【第一种方法】安装插件 然后重启 # 【第二种方法】Ctrl Shift P 打开配置项 然后搜索输入 Configure Display Language 点一下 切换到 zh-cn 重启 cursor 即可 重启后就好了~

用 pytorch 从零开始创建大语言模型(三):编码注意力机制

从零开始创建大语言模型&#xff08;Python/pytorch &#xff09;&#xff08;三&#xff09;&#xff1a;编码注意力机制 3 编码注意力机制3.1 建模长序列的问题3.2 使用注意力机制捕捉数据依赖关系3.3 通过自注意力关注输入的不同部分3.3.1 一个没有可训练权重的简化自注意力…

Linux之基础知识

目录 一、环境准备 1.1、常规登录 1.2、免密登录 二、Linux基本指令 2.1、ls命令 2.2、pwd命令 2.3、cd命令 2.4、touch命令 2.5、mkdir命令 2.6、rmdir和rm命令 2.7man命令 2.8、cp命令 2.9、mv命令 2.10、cat命令 2.11、echo命令 2.11.1、Ctrl r 快捷键 2…

Java学习------源码解析之StringBuilder

1. 介绍 String中还有两个常用的类&#xff0c;StringBuffer和StringBuilder。这两个类都是专门为频繁进行拼接字符串而准备的。最先出现的是StringBuffer&#xff0c;之后到jdk1.5的时候才有了StringBuilder。 2. StringBuilder解析 从这张继承结构图可以看出&#xff1a; S…

数据化管理(一)---什么是数据化管理

目录 一、什么是数据化管理1.1 “聪明”的销售人员1.2 数据化管理的概念1.3 数据化管理的意义1.4 数据化管理的四个层次1.4.1 业务指导管理1.4.2 营运指导管理1.4.3 经营策略管理1.4.4 战略规划管理 1.5 数据化管理流程图1.5.1 分析需求1.5.2 收集数据1.5.3 整理数据1.5.4 分析…

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

笔记本电脑更换主板后启动出现2203:System configuration is invalid,以及2201、2202系统错误的解决 自用的一台ThinkpadT490笔记本电脑 ,由于主板故障,不得不更换主板,通过某宝购置主板后进行了更换。 具体拆卸笔记本可搜索网络视频教程。 注意: 在更换主板时,注意先拍…

微型导轨和普通导轨有哪些区别?

微型导轨和普通导轨都是常用的工业机械传动装置&#xff0c;目前&#xff0c;市场上有各种各样的导轨产品。那么微型导轨和普通导轨有哪些区别呢&#xff1f; 1、尺寸&#xff1a;微型导轨尺寸较小&#xff0c;滑座宽度最小可达 8MM&#xff0c;长度最小可达 11MM 左右&#xf…

GMP调度模型

Golang调度器的由来 1.协程提高CPU利用率 线程分为用户态和内核态&#xff1b;协程其实就是用户态的线程。 协程和线程的映射关系 N:1关系 N个协程绑定一个线程&#xff0c;优点就是协程在用户态线程即完成切换&#xff0c;不会陷入到内核态&#xff0c;这种切换非常轻量快速…

jetson orin nano super AI模型部署之路(三)stable diffusion部署

先看一下部署后的界面和生成的图片。 在jetson orin nano super上部署stable diffusion比较简单&#xff0c;有现成的docker image和代码可用。 docker image拉取 使用的docker image是dustynv/stable-diffusion-webui&#xff0c;对于jetson orin nano super的jetpack6.2来说…

react如何引用(按需加载)百度地图,并结合and组件化封装

1.技术选项: vitereactantdesign load-script 2.实现思路&#xff1a; 1.按需加载如何实现? 要实现按需加载就不能直接在项目的入口文件这种地方去通过script标签引入&#xff0c;这里使用load-script封装了一个加载百度地图的Bmap.js方法,实现动态的插入script脚本。 根…

Java虚拟机(JVM)详解

Java虚拟机&#xff08;JVM&#xff09;详解 JVM内存结构垃圾收集算法标记-清除 算法复制 算法标记 - 整理 算法分代收集算法 类加载类加载过程加载器类型双亲委派模型 Java对象如何判断存活引用计数法可达性分析法 方法分派模型静态分派动态分派 JVM内存结构 方法区&#xff1…

AI知识补全(八):多模态大模型是什么?

名人说&#xff1a;人生如逆旅&#xff0c;我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知识补全&#xff08;七&#xff09;&#xff1a;AI Agent 智能…

从 Word 到 HTML:使用 Aspose.Words 轻松实现 Word 文档的高保真转换

从 Word 到 HTML&#xff1a;使用 Aspose.Words 轻松实现 Word 文档的高保真转换 前言一、环境准备二、核心代码实现1. 将 Word 转换为 HTML 文件流2. 优化超链接样式 三、测试效果四、总结 前言 在日常开发中&#xff0c;我们经常需要将 Word 文档转换为 HTML&#xff0c;用于…

观察者模式:解耦对象间的依赖关系

观察者模式&#xff1a;解耦对象间的依赖关系 JDK 中曾直接提供对观察者模式的支持&#xff0c;但因其设计局限性&#xff0c;现已被标记为“过时”&#xff08;Deprecated&#xff09;。不过&#xff0c;观察者模式的思想在 JDK 的事件处理、spring框架等仍有广泛应用。下面我…

人工智能之数学基础:矩阵的相似变换的本质是什么?

本文重点 矩阵的相似变换是线性代数中一个至关重要的概念&#xff0c;它揭示了矩阵之间的一种特殊关系。并提供了通过可逆矩阵将一个矩阵转化为另一个矩阵的方法&#xff0c;&#xff0c;同时保持矩阵的某些本质特征不变。但是&#xff0c;你有没有想过&#xff0c;矩阵相似变…

C++中ShellExecute函数使用方法说明,如果一开始参数为隐藏,后面还能再显示出来吗

文章目录 一、ShellExecute基础用法函数原型关键参数 nShowCmd示例代码&#xff1a;启动程序并隐藏窗口 二、隐藏后能否重新显示窗口直接答案 三、实现隐藏后显示窗口的步骤1. 获取目标窗口句柄2. 显示窗口 四、完整流程示例五、注意事项六、总结 在C中使用ShellExecute函数时&…

[ 工具使用指南 ] | Visual Studio 2019 调试

目录 什么是BUG 启动调试 逐过程&#xff0c;逐语句的区别&#xff1f; 打断点 条件断点 小结 之前推荐刚刚学习C/C的小伙伴使用 Visual Studio 2019 这款工具来写代码。这篇博客就来简单介绍一下Visual Studio 2019 的调试方法~ 什么是BUG 在最开始的晶体管的计算机的…

基于javaweb的SpringBoot水果生鲜商城系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

【深度学习】GAN生成对抗网络:原理、应用与发展

GAN生成对抗网络&#xff1a;原理、应用与发展 文章目录 GAN生成对抗网络&#xff1a;原理、应用与发展1. 引言2. GAN的基本原理2.1 核心思想2.2 数学表达2.3 训练过程 3. GAN的主要变体3.1 DCGAN (Deep Convolutional GAN)3.2 CGAN (Conditional GAN)3.3 CycleGAN3.4 StyleGAN…