Tesseract OCR 是一个开源的光学字符识别(OCR)引擎,广泛用于从图像中提取文本。它支持多种语言,并可以与 Python、Java、C++ 等编程语言结合使用。Tesseract 是由 Google 维护的,支持大量图像格式,并且能够通过训练来改进识别精度。

1. 安装 Tesseract

1.1. 安装 Tesseract(Windows)

  1. 下载 Tesseract 安装程序:
  2. 安装时选择 Add Tesseract to PATH 选项,以便在命令行中直接调用 Tesseract。
  3. 安装完成后,验证安装: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 也支持将输出格式设置为 hocrtsv 或 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 精度的技巧

  1. 图像预处理:在传给 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)
  2. 使用自定义训练数据:如果你的文本风格较为特殊,可以使用自定义训练数据来提高 OCR 的识别率。
  3. 选择合适的 psm 参数:根据文档的布局调整 psm(页面分割模式)参数,有时不同的模式能大大提高识别效果。

6. 总结

Tesseract 是一个强大的 OCR 工具,能够从图像中提取文本信息。通过 Python 中的 pytesseract 库,使用它非常方便,并可以对 OCR 精度进行调整。

  • 安装 Tesseract 并配置环境。
  • 通过 Python 使用 Tesseract 进行文本提取。
  • 调整 OCR 配置参数,如 psm 和 oem,来优化不同场景下的识别效果。
  • 通过图像预处理提高识别精度。

Tesseract 是一个功能强大的工具,可以与其他图像处理工具(如 OpenCV)结合,广泛应用于文档扫描、车牌识别、票据处理等多个领域。