强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Tesseract OCR 完整教程 / 第 3 章:基本使用

第 3 章:基本使用

掌握 Tesseract 命令行工具的核心用法。

3.1 命令行基础

3.1.1 基本语法

tesseract <input_image> <output_base> [options...]

参数说明:

参数 说明 示例
input_image 输入图片路径 image.png
output_base 输出文件基本名(不含扩展名) output
stdout 直接输出到标准输出 stdout
-l lang 指定语言 -l chi_sim+eng
--psm N 页面分割模式 --psm 6
--oem N OCR 引擎模式 --oem 1

3.1.2 基础示例

# 最简单的用法 — 识别英文,输出到文件
tesseract image.png output
cat output.txt

# 直接输出到终端
tesseract image.png stdout

# 指定语言
tesseract image.png output -l chi_sim

# 多语言
tesseract image.png output -l chi_sim+eng

# 从 URL 识别(先下载再识别)
curl -s https://example.com/image.png -o temp.png
tesseract temp.png stdout
rm temp.png

3.2 页面分割模式(PSM)

PSM(Page Segmentation Mode)告诉 Tesseract 如何分析页面布局。

3.2.1 所有 PSM 模式

# 查看所有 PSM 模式
tesseract --help-psm
PSM 模式名称 说明 适用场景
0 OSD only 仅检测方向和脚本 预处理阶段
1 Auto + OSD 自动分割 + 方向检测 不确定布局
2 Auto 自动分割,无 OSD 一般场景
3 Fully auto 全自动(默认) 通用场景
4 Single column 假设单列文本 单栏文档
5 Vertical block 假设垂直文本块 竖排文本
6 Uniform block 假设统一文本块 单一区域
7 Single line 假设单行文本 单行识别
8 Single word 假设单个词 单词识别
9 Single word (circle) 圆形中的单词 印章、徽标
10 Single character 单个字符 字符识别
11 Sparse text 稀疏文本 图片中零散文字
12 Sparse text + OSD 稀疏文本 + OSD 不规则文本
13 Raw line 原始行 不做预处理

3.2.2 PSM 使用示例

# 默认模式(PSM 3)
tesseract image.png output

# 单行文本
tesseract line.png output --psm 7

# 单个词
tesseract word.png output --psm 8

# 稀疏文本(如照片中的文字)
tesseract photo.png output --psm 11

# 扫描件(单列)
tesseract scan.png output --psm 4

# 表格
tesseract table.png output --psm 6

3.2.3 PSM 选择指南

你的输入是什么?
│
├── 完整文档/扫描件
│   ├── 单栏 → PSM 4
│   ├── 多栏 → PSM 3(默认)
│   └── 不确定 → PSM 1
│
├── 部分区域
│   ├── 文本块 → PSM 6
│   ├── 单行 → PSM 7
│   ├── 单词 → PSM 8
│   └── 单字符 → PSM 10
│
├── 照片/自然场景
│   ├── 稀疏文字 → PSM 11
│   └── 需要 OSD → PSM 12
│
└── 不做预处理
    └── PSM 13

3.3 OCR 引擎模式(OEM)

# 查看可用引擎模式
tesseract --help-oem
OEM 模式名称 说明
0 Legacy only 仅使用旧引擎(Tesseract 4.x)
1 LSTM only 仅使用 LSTM 引擎(推荐)
2 Legacy + LSTM 同时使用两个引擎
3 Default 自动选择(通常是 LSTM)
# 使用 LSTM 引擎(推荐)
tesseract image.png output --oem 1

# 使用旧引擎(Tesseract 4.x)
tesseract image.png output --oem 0

# 自动选择
tesseract image.png output --oem 3

3.4 输出格式

3.4.1 文本输出(默认)

# 输出纯文本
tesseract image.png output
cat output.txt

3.4.2 hOCR 输出(HTML + 坐标)

# 输出 hOCR 格式(含位置信息)
tesseract image.png output hocr
cat output.hocr

# hOCR 结构示例
# <div class='ocr_page' id='page_1' ...>
#   <div class='ocr_carea' id='block_1_1' ...>
#     <span class='ocr_line' id='line_1_1' ...>
#       <span class='ocrx_word' id='word_1_1' ...>Hello</span>
#       <span class='ocrx_word' id='word_1_2' ...>World</span>
#     </span>
#   </div>
# </div>

3.4.3 TSV 输出(制表符分隔)

# 输出 TSV 格式(含置信度)
tesseract image.png output tsv

TSV 格式字段:

字段 说明
level 层级(1=page, 2=block, 3=para, 4=line, 5=word)
page_num 页码
block_num 块编号
par_num 段落编号
line_num 行编号
word_num 词编号
left 左边距(像素)
top 上边距(像素)
width 宽度(像素)
height 高度(像素)
conf 置信度(-1 表示失败)
text 识别文本
# 查看 TSV 输出
tesseract image.png stdout tsv | head -20

# 过滤高置信度结果
tesseract image.png stdout tsv | awk -F'\t' '$12 > 80 {print $12, $13}'

3.4.4 PDF 输出(可搜索)

# 输出可搜索 PDF
tesseract image.png output pdf

# 多页 PDF
tesseract page1.png page2.png output pdf

# PDF + 文本层
tesseract image.png output pdf --pdf

3.4.5 ALTO XML 输出

# 输出 ALTO XML 格式
tesseract image.png output alto

3.4.6 输出格式对比

格式 命令 扩展名 包含位置信息 包含置信度
文本 (默认) .txt ❌ ❌
hOCR hocr .hocr ✅ ✅
TSV tsv .tsv ✅ ✅
PDF pdf .pdf ✅ ❌
ALTO alto .alto ✅ ✅

3.5 多语言识别

3.5.1 指定语言

# 单语言
tesseract image.png output -l eng
tesseract image.png output -l chi_sim

# 多语言组合(用 + 连接)
tesseract image.png output -l chi_sim+eng
tesseract image.png output -l chi_sim+chi_tra+eng

3.5.2 语言组合策略

场景 推荐语言组合 说明
中英文混合 chi_sim+eng 最常用
中英日混合 chi_sim+jpn+eng 需确认语言包
纯中文 chi_sim 简体中文
纯英文 eng 英文
多欧洲语言 eng+deu+fra 欧洲语言混合

注意事项:

  • 语言越多,识别速度越慢
  • 语言组合可能降低精度
  • 排在前面的语言权重更高

3.5.3 脚本检测

# 使用 OSD 检测脚本类型
tesseract image.png stdout --psm 0

# 输出示例:
# Page number: 0
# Orientation in degrees: 0
# Rotate: 0
# Orientation confidence: 3.94
# Script: Han
# Script confidence: 2.28

3.6 图片格式支持

3.6.1 支持的格式

格式 扩展名 说明
PNG .png 推荐格式
JPEG .jpg/.jpeg 常见格式
TIFF .tif/.tiff 扫描件常用
BMP .bmp 位图格式
PNM .pnm/.pgm/.ppm Netpbm 格式
WebP .webp Web 格式
# 不同格式示例
tesseract image.png stdout
tesseract photo.jpg stdout
tesseract scan.tiff stdout
tesseract raw.bmp stdout

3.6.2 多页文档

# 多页 TIFF
tesseract multipage.tiff output

# 多个图片文件
tesseract page1.png page2.png page3.png output

3.7 配置文件

3.7.1 使用配置文件

# Tesseract 配置文件位于 tessdata/configs/
ls /usr/share/tesseract-ocr/5/tessdata/configs/

# 使用配置文件
tesseract image.png output hocr

# 自定义配置文件
# 创建 myconfig
echo '--psm 6' > /usr/share/tesseract-ocr/5/tessdata/configs/myconfig
echo '-c tessedit_char_whitelist=0123456789' >> /usr/share/tesseract-ocr/5/tessdata/configs/myconfig
tesseract image.png output myconfig

3.7.2 常用配置参数

# 字符白名单(只识别指定字符)
tesseract image.png output -c tessedit_char_whitelist=0123456789

# 字符黑名单(不识别指定字符)
tesseract image.png output -c tessedit_char_blacklist=|[]

# 设置最小置信度
tesseract image.png output -c tessedit_min_confidence=50

# 调试模式
tesseract image.png output -c tessedit_write_images=true

3.8 批量处理

3.8.1 Shell 脚本批量处理

#!/bin/bash
# batch_ocr.sh - 批量处理图片

INPUT_DIR="./images"
OUTPUT_DIR="./output"
LANG="chi_sim+eng"

mkdir -p "$OUTPUT_DIR"

for img in "$INPUT_DIR"/*.{png,jpg,tiff}; do
    if [ -f "$img" ]; then
        filename=$(basename "$img" | sed 's/\.[^.]*$//')
        echo "Processing: $img"
        tesseract "$img" "$OUTPUT_DIR/$filename" -l "$LANG" --psm 6
    fi
done

echo "Done! Results in $OUTPUT_DIR/"

3.8.2 使用 xargs 并行处理

# 并行处理(4 个进程)
find ./images -name "*.png" | xargs -P 4 -I {} bash -c '
    filename=$(basename "{}" .png)
    tesseract "{}" "./output/$filename" -l chi_sim+eng
'

3.8.3 使用 GNU Parallel

# 安装 parallel
sudo apt install parallel

# 并行处理
find ./images -name "*.png" | parallel -j 4 '
    filename=$(basename {.} .png)
    tesseract {} ./output/$filename -l chi_sim+eng
'

3.9 识别精度影响因素

3.9.1 关键因素

因素 影响度 说明
图片分辨率 ⭐⭐⭐⭐⭐ 300 DPI 最佳
图片清晰度 ⭐⭐⭐⭐⭐ 模糊严重影响识别
对比度 ⭐⭐⭐⭐ 黑白分明效果好
文字大小 ⭐⭐⭐⭐ 字体过小识别困难
倾斜角度 ⭐⭐⭐ 需要倾斜校正
噪声 ⭐⭐⭐ 噪声需要去噪处理
字体 ⭐⭐ 标准字体效果好
语言选择 ⭐⭐ 选择正确语言

3.9.2 分辨率建议

# 检查图片分辨率
identify image.png    # ImageMagick
file image.png

# 调整分辨率到 300 DPI
convert image.png -density 300 output.png

# 放大小图
convert small.png -resize 200% large.png

推荐分辨率:

文档类型 推荐 DPI 最小 DPI
打印文档 300 200
手写文档 300 200
普通照片 - 长边 1000px+
表格 300 300
小字体 400+ 300

3.10 常用命令速查

# === 基础识别 ===
tesseract image.png stdout                          # 输出到终端
tesseract image.png output                          # 输出到文件
tesseract image.png output -l chi_sim+eng           # 指定语言

# === 页面分割 ===
tesseract image.png output --psm 3                  # 全自动(默认)
tesseract image.png output --psm 6                  # 统一文本块
tesseract image.png output --psm 7                  # 单行
tesseract image.png output --psm 11                 # 稀疏文本

# === 输出格式 ===
tesseract image.png output hocr                     # hOCR
tesseract image.png output tsv                      # TSV
tesseract image.png output pdf                      # 可搜索 PDF
tesseract image.png output alto                     # ALTO XML

# === 参数调优 ===
tesseract image.png output -c tessedit_char_whitelist=0123456789  # 数字白名单
tesseract image.png output -c tessedit_write_images=true         # 写出调试图像

# === 信息查询 ===
tesseract --version                                 # 版本信息
tesseract --list-langs                              # 可用语言
tesseract --help                                    # 帮助信息
tesseract --help-psm                                # PSM 说明
tesseract --help-oem                                # OEM 说明

3.11 本章小结

要点 说明
基本语法 tesseract input output [options]
PSM 选择 根据文档布局选择合适模式
多语言 -l chi_sim+eng,语言越多越慢
输出格式 文本、hOCR、TSV、PDF、ALTO
精度关键 分辨率 300 DPI、清晰、黑白分明
批量处理 使用 Shell 脚本 + parallel

3.12 扩展阅读


上一章: 安装与配置 | 下一章: 图像预处理