当前位置: 首页 > article >正文

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 pytesseract


def 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 cv2

def 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 denoised

processed_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 = -angle
    M = 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 Output

data = 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.kler.cn/a/614829.html

相关文章:

  • Python自动化模块:开启高效编程新时代
  • 小智AI音频开发 libopus + Eclipse C/C++ MinGW 编解码测试用例
  • 软件工程之需求工程(需求获取、分析、验证)
  • 动态规划算法题 小松鼠吃巧克力
  • Postman CORS 测试完全指南:轻松模拟跨域请求,排查 CORS 相关问题
  • Cursor 汉化教程
  • CAN 介绍
  • 在ArcGIS中导入气候tif文件出现 “输入与输出之间的基准面冲突” 警告
  • Python小练习系列 Vol.3:生成有效括号组合(回溯 + DFS)
  • 使用FastExcel时的单个和批量插入的问题
  • 【JavaScript】九、JS基础练习
  • 小红书xhs逆向算法还原(202503月更新)
  • [图论]万字解析图的最短路算法(详细带图解和代码)
  • 六十天前端强化训练之第三十五天之Jest单元测试大师课:从入门到实战
  • 数字内容体验提升用户参与策略
  • 基于dify平台批量分析excel格式信息
  • synchronized锁与lock锁的区别
  • JAVA学习*工厂模式
  • Linux课程学习一
  • 【Kafka】深入探讨 Kafka 如何保证一致性