Tesseract OCR技术初探(Python调用)

发布于:2025-03-30 ⋅ 阅读:(35) ⋅ 点赞:(0)

一、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}")

在这里插入图片描述

参数说明表:

参数 取值范围 作用描述
–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 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

在这里插入图片描述

最后

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


网站公告

今日签到

点亮在社区的每一天
去签到