使用生成性人工智能的发票OCR的四种数据预处理技术
通过利用生成性人工智能,实现能够处理灵活格式的OCR变得更加容易。然而,为了确保准确性,数据预处理至关重要。在本文中,我们将介绍使用生成性人工智能进行发票OCR的预处理技术。
使用生成性人工智能的OCR的好处
传统的光学字符识别(OCR)主要依赖于预定义的算法、基于规则的方法或机器学习模型来识别字符模式,以从图像中提取文本。然而,它常常面临“意外布局”、“特殊格式”和“噪声”等挑战。
相比之下,基于生成性人工智能的OCR具有全面理解图像数据以更有效地提取文本的独特优势。这使得它能够处理“复杂布局”、“手写文本”和“包含混合表格和图表的文档”——这些都是传统OCR常常无法胜任的领域。此外,基于生成性人工智能的OCR提供了更大的灵活性,甚至可以进行错误修正和解释,从而提高整体准确性。
使用生成性人工智能提高OCR的准确性
虽然基于生成性人工智能的OCR能够处理多种格式,但在准确性方面有时可能不如传统OCR稳定。
这就是数据预处理变得至关重要的地方。
在本文中,我们将介绍使用Python库和机器学习方法的数据处理技术,以增强OCR性能。
使用Python中的Pillow库裁剪图像
在将图像传递给生成性人工智能时,尽可能去除多余的信息可以显著提高准确性。
对于像发票这样的结构化文档,由于其格式相对标准化,可以使用Python的Pillow库来实现自动图像裁剪过程。这有助于消除不必要的边距或背景噪声,确保OCR仅关注必要的文本区域。
https://pypi.org/project/pillow/
此外,与其直接对裁剪后的图像应用OCR,不如使用生成性人工智能将裁剪后的图像转换为Markdown,这在准确性上显示出了改善。
from PIL import Image
# 打开图像。
image = Image.open('invoice_sample.jpg')
# 裁剪区域。
crop_area = (100,2400,1962,3100)
# 执行裁剪。
cropped_image = image.crop(crop_area)
# 保存裁剪后的图像。
cropped_image.save('invoice_sample_cropped.jpg')
# 显示裁剪后的图像。
cropped_image.show()
此外,当修剪后的图像转换为Markdown时,输出如下所示。可以确认数字被正确转换。
| 描述 | 单位 | 费率 (美元) | 金额 (美元) |
|--------------------------|-------------|------------|--------------|
| 基本服务费 | 1 个月 | 850 | 850 |
| 电力使用 | 320 千瓦时 | 25/千瓦时 | 8,000 |
| 燃料调整费 | 320 千瓦时 | 1.5/千瓦时 | 480 |
| 可再生能源费 | 320 千瓦时 | 2.2/千瓦时 | 704 |
| 环境费 | 固定费用 | 150 | 150 |
使用 OpenCV 在 Python 中调整图像对比度
通过使用 OpenCV 库来调整图像对比度,可以提高可读性并为更好的 OCR 精度预处理图像。
手动修正每张图像将是一项繁琐的任务,因此可以使用自动优化的方法将图像的平均亮度或中值调整到目标水平。例如,可以根据将图像的平均亮度接近128(0–255 范围的中点)的原则来确定合适的伽马值。
通过根据所处理图像的特征调整设置,可以进一步提高文本识别的准确性。
import cv2
import numpy as np
# 加载图像。
image = cv2.imread('invoice_sample_dark.png')
# 参数。
brightness = 70
# 调整亮度。
bright_image = cv2.convertScaleAbs(image, alpha=1.0, beta=brightness)
# 保存图像。
cv2.imwrite('invoice_sample_bright.png', bright_image)
# 显示原始图像和调整后的图像。
cv2.imshow('oringinal image', image)
cv2.imshow('adjusted image', bright_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
文本
将开源OCR与Python的pytesseract库结合
Python提供了一个名为pytesseract的开源OCR库,允许从图像中提取文本。通过使用这个库,可以将基于图像的文本转换为机器可读的文本。
将提取的文本与图像一起传递给生成性AI,可以帮助减少数字错误,例如小数点位置不正确。
尽管识别手写文本可能具有挑战性,但pytesseract是免费的,这使得实验提高OCR准确性变得简单。
import pytesseract
from PIL import Image
# 仅适用于Windows,指定Tesseract安装路径(根据实际安装路径进行调整)。
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# 加载图像。
image = Image.open('invoice_sample.jpg')
# 执行OCR以提取文本。
text = pytesseract.image_to_string(image, lang='eng')
# 显示提取的文本。
print(text)
# 将文本保存到文件(可选)。
with open('invoice_sample_text.txt', 'w', encoding='utf-8') as f:
f.write(text)
OCR 结果文本文件
—J+- AZU—yyayk 2025-03-07 13.42.53
Sample Invoice - Power Company
ABC Power Company
123 Energy Street, Tokyo, Japan
Phone: 03-1234-5678
nail sbcpower.co.jp
456 Residential Ave, Shibuya, Tokyo 150-0002
Account Number: 000123456789
Invoice Number: INV-20250307-00123
Billing Date: March 7, 2025 1 i i
Billing Period: February 1, 2025 — February 28, 2025
Usage Summary:
Description Units Rate (USD) Amount (USD) | \ iil |
Basic Service Charge 1 month 850 850. AAT |
Electricity Usage 320 kWh 25/kWh 8,000
Fuel Adjustment Charge 320 kWh 1.5/kKWh 480
Renewable Energy Fee 320 kWh 2.2/kKWh 704
Environmental Fee Flat rate 150 |) eo
Subtotal: $10,184
Consumption Tax (10%): $1,018
Total Amount Due: $11,202
结合OCR工具(Azure Vision AI)
如果pytesseract未能成功提取文本,您还可以利用现有的OCR服务。
例如,Azure Vision AI的OCR服务可以准确地从图像中提取文本。提取的文本通过API以JSON格式返回。然而,由于这种方法仅检索文本数据,图像中的表格结构和其他视觉信息可能会丢失。
通过让生成性AI补充缺失的图像信息,并将其与准确提取的文本结合,可以更高精度地提取特定信息。
以下是使用Azure Vision Studio的“从图像中提取文本”功能的结果。
SampleInvoice-PowerCompany
ABCPowerCompany
123EnergyStreet,Tokyo,Japan
Phone:03-1234-5678
Email:billing@abcpower.co.jp
Invoiceto:
JohnDoe
456ResidentialAve,Shibuya,Tokyo150-0002
AccountNumber:000123456789
InvoiceNumber:INV-20250307-00123
BillingDate:March7,2025
BillingPeriod:February1,2025-February28,2025
UsageSummary:
Description
Unit
Rate(USD)
Amount(USD)
BasicServiceCharge
1month
850
850
ElectricityUsage
320kWh
25/kWh
8,000
FuelAdjustmentCharge
320kWh
1.5/kWh
480
+
RenewableEnergyFee
320kWh
2.2/kWh
704
EnvironmentalFee
Flatrate
150
150
Subtotal:$10,184
ConsumptionTax(10%):$1,018
TotalAmountDue:$11,202
摘要:轻松将OCR集成到生成性AI的工作流程中
正如我们迄今所见,通过进行数据预处理,可以轻松实现高精度的OCR,利用生成性AI。
Python 还提供了各种强大的库。通过利用 Python 和云服务的优势,我们可以在实际应用中有效地使用生成式人工智能。