Tesseract-OCR 文字识别
什么是 Tesseract-OCR?
Tesseract-OCR 是一个由 Google 维护的开源 OCR 引擎,其最初由 HP 开发,后来在 2006 年被 Google 开源。它支持多种语言的文本识别,并不断优化提升识别精度。Tesseract 支持从简单的命令行调用到与复杂项目集成,是一个灵活而强大的工具。
Tesseract-OCR 的主要特性
- 多语言支持:Tesseract 内置了 100 多种语言的数据包,并支持用户自定义训练,识别如手写体等特定需求的字体。
- 开源与跨平台:作为一个开源项目,Tesseract 可以在 Windows、Linux 和 macOS 上运行,满足了广泛用户的需求。
- 高度可扩展:支持通过训练和微调增加对特殊字符或特定语言的识别能力,尤其适合企业定制需求。
- 多种输出格式:Tesseract 不仅能输出纯文本,还支持 PDF、HTML 和可选的带有位置信息的输出格式。
安装
Windows下个版本tesseract工具下载:Index of /tesseract
点击tesseract-ocr-setup-4.00.00dev.exe,选择安装目录,然后下一步直至完成:
安装完毕后,目录如下:
添加环境变量:
测试环境变量是否生效:
下载中文简体字库:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata
放在如下目录:
基本使用方法
安装完成后,您可以直接在命令行运行 Tesseract:
tesseract input_image.png output_text
其中,input_image.png 是输入图片文件,output_text 是输出的文本文件。
要指定语言,可以使用 -l
参数。例如:
tesseract input_image.png output_text -l eng
如果要同时识别多种语言,可以用加号分隔:
tesseract input_image.png output_text -l eng+chi_sim
验证
用Windows自带的画图工具写一行文字:
截图后,放在如图所示目录:
然后在当前文件夹下右键打开终端,输入命令:tesseract 1.png jieguo -l chi_sim
终端打印结果如下:
Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows
PS D:\OCR-test> tesseract 1.png jieguo -l chi_sim
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
PS D:\OCR-test>
在图片同级目录下多个一个txt文件:
还差一个字未识别出来,增加参数 -psm 7再次测试。终端打印如下:
Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows
PS D:\OCR-test> tesseract 1.png jieguo2 -l chi_sim -psm 7
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
PS D:\OCR-test>
结果:
参数 psm
的作用是什么
Tesseract-OCR 提供了一个 psm
参数,用于设置页面分割模式(Page Segmentation Mode),以指定 Tesseract 如何理解输入图像中的文本布局。这是一个非常重要的参数,因为不同的页面布局可能需要不同的分割策略。例如,一段连续的文本与包含表格的文档在处理方式上会有所不同。
psm
参数的取值与含义
psm
参数后接一个数字,表示不同的页面分割模式。以下是每个模式的含义:
数值 | 模式描述 |
---|---|
0 | 仅检测方向和脚本,不进行 OCR 识别。 |
1 | 假定是单列文本的自动分割(默认模式)。 |
2 | 自动分割,但图片可能包含多个文本块。 |
3 | 全自动页面分割(但不执行 OCR 方块之间的文本流检测)。 |
4 | 假定是单个文本块的垂直对齐文本。 |
5 | 假定整个图像是一个水平文本行。 |
6 | 假定整个图像是一个统一的文本块。 |
7 | 将图像视为一组独立文本行(无结构化文本块)。 |
8 | 将图像视为单个文本字母(适合字符级 OCR)。 |
9 | 假定图像是圆形文本,例如封印或硬币上的字符。 |
10 | 处理一个单词。 |
11 | 处理一个单字符。 |
12 | 自动分割图像(默认模式),同时检测水平和垂直文字块的方向。 |
示例用法
在命令行中使用 psm
参数,可以根据图像内容调整分割模式:
tesseract input_image.png output_text -psm 6
场景 1:扫描文档 如果输入是一个扫描文档,使用默认的 -psm 3
或 -psm 6
一般足够,Tesseract 会自动分析布局。
场景 2:单行文本 如果输入图像中只包含单行文本,可以使用:
tesseract input_image.png output_text -psm 7
场景 3:单个字符识别 如果需要精确提取单个字符的内容,可以使用:
tesseract input_image.png output_text -psm 10
psm
参数的选择对 OCR 的准确性影响很大。例如,当处理复杂布局(如多列文档)时,默认的页面分割模式可能无法正确理解文档结构,此时可以尝试模式 2 或模式 3 以改进结果。