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