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 扩展阅读
上一章: 安装与配置 | 下一章: 图像预处理