Tesseract OCR 是一个开源的光学字符识别(OCR)引擎,广泛用于从图像中提取文本。它支持多种语言,并可以与 Python、Java、C++ 等编程语言结合使用。Tesseract 是由 Google 维护的,支持大量图像格式,并且能够通过训练来改进识别精度。
1. 安装 Tesseract
1.1. 安装 Tesseract(Windows)
- 下载 Tesseract 安装程序:
- 访问 Tesseract 官方下载页面。
- 选择适合你的 Windows 版本的安装包。
- 安装时选择 Add Tesseract to PATH 选项,以便在命令行中直接调用 Tesseract。
- 安装完成后,验证安装:
tesseract --version
1.2. 安装 Tesseract(macOS)
在 macOS 上,你可以通过 Homebrew 来安装 Tesseract:
brew install tesseract
1.3. 安装 Tesseract(Linux)
在 Linux 上(以 Ubuntu 为例),使用以下命令安装:
sudo apt update
sudo apt install tesseract-ocr
2. 使用 Tesseract OCR(命令行)
Tesseract 在命令行中使用非常简单。下面是基本的用法:
2.1. 从图像提取文本
tesseract input_image.png output_text
- input_image.png:需要处理的图像文件。
- output_text:输出的文本文件(Tesseract 会自动创建该文件,文件名为
output_text.txt
)。
2.2. 使用特定语言
如果你需要使用非英语的语言,首先需要安装对应的语言包。例如,中文语言包可以通过 tesseract-ocr
的包管理工具安装,或从官方网站下载。
使用中文识别时:
tesseract input_image.png output_text -l chi_sim
-l chi_sim
:指定简体中文(chi_sim
)。对于其他语言,可以使用相应的语言代码,如eng
(英语)或fra
(法语)。
2.3. 输出其他格式
Tesseract 也支持将输出格式设置为 hocr、tsv 或 pdf 等。例如,要输出为 PDF:
tesseract input_image.png output_pdf pdf
3. 在 Python 中使用 Tesseract
通过 Python 使用 Tesseract OCR,需要安装 pytesseract
包,这是 Python 的 Tesseract 接口。
3.1. 安装 pytesseract 和 PIL
首先,你需要安装 pytesseract
和 Pillow
(图像处理库):
pip install pytesseract pillow
3.2. 基本示例:从图像中提取文本
from PIL import Image
import pytesseract
# 打开图片
image = Image.open('input_image.png')
# 使用 tesseract 识别文本
text = pytesseract.image_to_string(image)
# 打印识别的文本
print(text)
3.3. 指定语言
如果你需要使用特定语言(例如中文),可以通过 lang
参数指定:
text = pytesseract.image_to_string(image, lang='chi_sim')
print(text)
3.4. 处理多语言识别
你还可以使用多个语言模型来提高识别精度。例如,识别英文和中文:
text = pytesseract.image_to_string(image, lang='eng+chi_sim')
print(text)
3.5. 获取图像的其他信息
除了文本,Tesseract 还可以提取图像的其他信息,如文本的框架信息、位置等。下面是提取 文本框 的示例:
# 获取文本框信息(包括位置)
boxes = pytesseract.image_to_boxes(image)
print(boxes)
你也可以获取 OCR 的 数据(TSV 格式):
# 获取 OCR 结果的详细信息(例如,单个字符的位置、大小)
data = pytesseract.image_to_data(image)
print(data)
3.6. 识别图像中的数字
如果你只想识别图像中的数字,可以使用 output_type
参数来进行调整:
# 只提取数字
text = pytesseract.image_to_string(image, config='outputbase digits')
print(text)
3.7. 保存 OCR 输出为图像中的文本位置
你可以将 OCR 结果标记到图像上,显示每个识别的字符位置:
# 获取每个字符的位置和大小
boxes = pytesseract.image_to_boxes(image)
# 打开图像并绘制文本框
import cv2
image = cv2.imread('input_image.png')
# 画出每个字符的框
for b in boxes.splitlines():
b = b.split()
x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
image = cv2.rectangle(image, (x, h), (w, y), (0, 255, 0), 2)
# 显示结果
cv2.imshow('Image with Textboxes', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 调整 Tesseract OCR 的配置
Tesseract 提供了一些 配置选项 来调优识别结果,常见的配置参数包括:
--psm
:页面分割模式。Tesseract 提供了多种页面分割模式,适用于不同类型的文档布局。示例:使用--psm 6
来处理大段文本:text = pytesseract.image_to_string(image, config='--psm 6')
--oem
:OCR 引擎模式(OEM)。可以选择不同的模式来优化识别精度,0 表示完全是传统引擎,1 表示 LSTM 引擎,2 表示两者结合。示例:text = pytesseract.image_to_string(image, config='--oem 1')
5. 提升 OCR 精度的技巧
- 图像预处理:在传给 Tesseract 之前,可以通过图像处理方法(如二值化、去噪、锐化等)来提升图像质量,从而提高 OCR 精度。例如,使用 OpenCV 进行二值化:
import cv2 image = cv2.imread('input_image.png') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) _, binary_image = cv2.threshold(gray_image, 150, 255, cv2.THRESH_BINARY) text = pytesseract.image_to_string(binary_image) print(text)
- 使用自定义训练数据:如果你的文本风格较为特殊,可以使用自定义训练数据来提高 OCR 的识别率。
- 选择合适的
psm
参数:根据文档的布局调整psm
(页面分割模式)参数,有时不同的模式能大大提高识别效果。
6. 总结
Tesseract 是一个强大的 OCR 工具,能够从图像中提取文本信息。通过 Python 中的 pytesseract
库,使用它非常方便,并可以对 OCR 精度进行调整。
- 安装 Tesseract 并配置环境。
- 通过 Python 使用 Tesseract 进行文本提取。
- 调整 OCR 配置参数,如
psm
和oem
,来优化不同场景下的识别效果。 - 通过图像预处理提高识别精度。
Tesseract 是一个功能强大的工具,可以与其他图像处理工具(如 OpenCV)结合,广泛应用于文档扫描、车牌识别、票据处理等多个领域。
发表回复