欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > Tesseract OCR技术初探(Python调用)

Tesseract OCR技术初探(Python调用)

2025/4/1 20:22:27 来源:https://blog.csdn.net/lincyang/article/details/146638803  浏览:    关键词: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

在这里插入图片描述

最后

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词