100天Python进阶:Tesseract-OCR实战图片文字识别
2025.09.23 10:51浏览量:0简介:本文聚焦Python进阶学习第44天,深入探讨基于Tesseract-OCR的OCR图片文字识别技术。从Tesseract-OCR的安装配置、基础识别到高级优化,结合实战案例,助力读者掌握高效图片文字识别技能。
100天精通Python(进阶篇)——第44天:基于Tesseract-OCR实现OCR图片文字识别实战
引言
在当今数字化时代,信息以图像形式广泛存在,从扫描文档到社交媒体图片,如何高效、准确地提取图像中的文字信息成为了一项重要技能。OCR(Optical Character Recognition,光学字符识别)技术正是解决这一问题的关键。作为Python进阶学习的一部分,第44天我们将聚焦于使用Tesseract-OCR这一开源工具,实现图片文字识别的实战操作。Tesseract-OCR由Google维护,支持多种语言,且可通过Python轻松集成,是开发者进行OCR开发的理想选择。
Tesseract-OCR简介
技术背景
Tesseract-OCR最初由HP实验室开发,后转为开源项目,并被Google接管继续发展。它采用先进的图像处理和模式识别算法,能够识别多种字体和语言,包括中文、英文等。Tesseract-OCR的核心优势在于其高度的可定制性和扩展性,支持通过训练模型来提高特定场景下的识别准确率。
安装与配置
在开始实战之前,首先需要安装Tesseract-OCR及其Python封装库pytesseract
。以Ubuntu系统为例,安装步骤如下:
安装Tesseract-OCR:
sudo apt update
sudo apt install tesseract-ocr
# 如需支持中文,还需安装中文语言包
sudo apt install tesseract-ocr-chi-sim
安装Python封装库:
pip install pytesseract
同时,确保Python环境中已安装
Pillow
库用于图像处理:pip install Pillow
基础识别实战
简单图片识别
首先,我们从一个简单的英文图片识别开始。假设我们有一张包含英文文本的图片example.png
,使用pytesseract
进行识别的代码如下:
from PIL import Image
import pytesseract
# 指定Tesseract-OCR的安装路径(如果不在系统PATH中)
# pytesseract.pytesseract.tesseract_cmd = r'/usr/bin/tesseract'
# 打开图片文件
image = Image.open('example.png')
# 使用Tesseract进行OCR识别
text = pytesseract.image_to_string(image)
print(text)
运行上述代码后,控制台将输出图片中的英文文本。
中文图片识别
对于中文图片,只需在image_to_string
方法中指定语言参数为'chi_sim'
(简体中文)或'chi_tra'
(繁体中文):
text = pytesseract.image_to_string(image, lang='chi_sim')
print(text)
高级识别技巧
图像预处理
为了提高识别准确率,通常需要对图像进行预处理,包括二值化、去噪、旋转校正等。以下是一个简单的图像预处理示例:
from PIL import Image, ImageEnhance, ImageFilter
def preprocess_image(image_path):
# 打开图片
image = Image.open(image_path)
# 转换为灰度图
image = image.convert('L')
# 二值化处理
threshold = 150
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
image = image.point(table, '1')
# 去噪(可选)
image = image.filter(ImageFilter.MedianFilter())
# 增强对比度(可选)
enhancer = ImageEnhance.Contrast(image)
image = enhancer.enhance(2)
return image
# 预处理图片
processed_image = preprocess_image('example_chinese.png')
# 识别处理后的图片
text = pytesseract.image_to_string(processed_image, lang='chi_sim')
print(text)
批量识别与结果保存
在实际应用中,往往需要处理多张图片。以下是一个批量识别图片并保存结果的示例:
import os
def batch_ocr(image_folder, output_file, lang='eng'):
with open(output_file, 'w', encoding='utf-8') as f:
for filename in os.listdir(image_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
image_path = os.path.join(image_folder, filename)
try:
image = Image.open(image_path)
text = pytesseract.image_to_string(image, lang=lang)
f.write(f"Image: {filename}\n")
f.write(text)
f.write("\n" + "-"*50 + "\n")
except Exception as e:
print(f"Error processing {filename}: {e}")
# 批量识别图片文件夹中的图片,结果保存到txt文件
batch_ocr('images', 'ocr_results.txt', lang='chi_sim')
实战案例:发票信息提取
假设我们需要从一张发票图片中提取关键信息,如发票号码、日期、金额等。这通常需要结合OCR识别和后续的自然语言处理或规则匹配。以下是一个简化的发票信息提取示例:
import re
def extract_invoice_info(text):
# 假设发票号码格式为:发票号码:XXXXXX
invoice_no_match = re.search(r'发票号码[::]\s*(\d+)', text)
invoice_no = invoice_no_match.group(1) if invoice_no_match else '未找到'
# 假设日期格式为:日期:YYYY-MM-DD
date_match = re.search(r'日期[::]\s*(\d{4}-\d{2}-\d{2})', text)
date = date_match.group(1) if date_match else '未找到'
# 假设金额格式为:金额:XXXX.XX元
amount_match = re.search(r'金额[::]\s*(\d+\.\d{2})元', text)
amount = amount_match.group(1) if amount_match else '未找到'
return {
'发票号码': invoice_no,
'日期': date,
'金额': amount
}
# 假设我们已经通过OCR得到了发票文本
invoice_text = """
发票号码:123456
日期:2023-05-20
金额:1000.00元
...其他信息...
"""
info = extract_invoice_info(invoice_text)
print(info)
总结与展望
通过第44天的学习,我们掌握了基于Tesseract-OCR实现图片文字识别的基本方法和高级技巧。从简单的英文识别到复杂的中文识别,再到图像预处理和批量识别,我们逐步深入了解了OCR技术的实际应用。未来,随着深度学习技术的发展,OCR的准确率和效率将进一步提升,为更多场景下的文字识别提供有力支持。作为Python开发者,掌握OCR技术将极大地拓宽我们的应用领域,从文档数字化到智能客服,无处不在的文字识别需求正等待着我们去探索和实现。
发表评论
登录后可评论,请前往 登录 或 注册