在处理纸质发票、传单、小册子和表格时,经常会遇到这些文件的硬拷贝或以.jpg、.png或.pdf格式保存的文本图像。手动处理这些文件中的数据不仅繁琐耗时,而且容易出错。这些文件不能直接编辑,需要先将其转换为可编辑格式,或者使用能够从图像中读取内容并提取出来以供进一步处理的工具。可能都使用过在线或离线工具将图像转换为可编辑文本格式,以简化工作流程。这是通过光学字符识别(OCR)或Optical Character Recognition实现的。
OCR是Optical Character Recognition的缩写,通常被称为“文本识别”,这是一种从图像中提取文本的流行技术。OCR程序是一个工具,它从扫描文档、相机图像和仅图像的PDF中提取并重新利用数据。OCR系统使用硬件(如光学扫描仪)和能够处理图像的软件的组合。在文本提取方面,OCR工具(OCR库)采用多种机器算法进行模式识别,以识别图像文件中文本的存在和布局。这些工具被训练以识别图像中字符或数字的形状,以识别图像中的文本。然后,这些工具可以将提取的文本重建为机器可读的格式。因此,提取的文本可以像常规文本一样被选择、编辑或复制粘贴。简而言之,OCR将图像格式的数字数据转换为可编辑的文档处理文件。幸运的是,许多免费和商业工具(离线和在线)允许OCR技术从图像中提取文本。
目前,由于实施了智能字符识别(ICR)等技术,OCR工具相当先进,可以识别语言、笔迹风格等。在本文中,将讨论OCR、OCR的好处、为什么需要从文档中提取文本、Python中可用的OCR库,以及使用Keras-OCR库从图像中提取文本的示例。
如上所述,OCR技术的主要好处是它自动化了手动和耗时的数据输入任务。这是因为通过使用OCR,可以创建可以按要求编辑和存储的数字文档。OCR工具处理图像以识别文本,并在图像背后创建一个隐藏的文本层。这个额外的层可以被计算机轻松读取,从而使图像可识别和可搜索。这对于企业来说至关重要,因为它们每天必须处理媒体和内容。OCR还提供以下好处:
OCR应用的一个典型例子可以在医疗保险索赔表处理中看到。有了OCR,更容易将保险索赔与被保险人的详细信息进行比较。配备OCR的系统可以向相关团队标记数据中的任何异常,并防止可能的欺诈行为。
尽管OCR可以轻松从图像中提取文本,但有时也会面临挑战。当文本出现在代表自然环境的图像中时,这种情况就会发生,图像中存在几何失真、过多的噪声或杂乱和复杂的背景,以及不同于常规字体的不同字体。尽管如此,OCR技术在深度学习应用中具有越来越强大的潜力,可以构建用于读取车辆牌照、数字化发票或菜单、扫描身份证、比较索赔表等的工具。
现在已经了解了OCR及其用途,让看看一些常用的开源Python库用于文本识别和提取。
也称为‘Python-tesseract’,它是Python的OCR工具,作为Tesseract-OCR引擎的包装器。这个库可以读取所有图像类型(.jpeg、.png、.gif、.bmp、.tiff等),并识别图像中的文本。因此,它通常用于OCR图像到文本转换的用例。
另一个相当受欢迎的Python库是EasyOCR。顾名思义,该库专为初学者设计,易于使用。它是一个通用的OCR Python模块,支持80多种语言,可以读取自然场景和文档中的密集文本。安装后,用户只需要初始化两个类——一个reader()和另一个通过readtext()函数读取图像中的文本。
这是一个与上述两个库同样强大的开源库。Keras-OCR库提供了一个高级API和端到端训练管道,用于构建新的OCR模型。在下一节中,将看到一个使用Keras-OCR从多个图像中提取文本的逐步教程。可以在这里找到文档。
在本节中,将构建一个Keras-OCR管道,从一些示例图像中提取文本。在这个教程中使用Google Colab。
让首先使用以下代码安装keras-ocr库(支持Python >= 3.6和TensorFlow >= 2.0.0):
!pip install -q keras-ocr
也可以使用以下命令从主位置安装该包。
pip install git+https://github.com/faustomorales/keras-ocr.git#egg=keras-ocr
必须导入matplotlib和新安装的Keras-ocr库来处理图像并从中提取文本。
import keras_ocr
import matplotlib.pyplot as plt
让用Keras-ocr设置一个管道。模型是一个预训练的文本提取模型,加载了检测器和识别器的预训练权重。
pipeline = keras_ocr.pipeline.Pipeline()
将使用两张图像来测试Keras-ocr库的能力。可以尝试使用任何其他带有文本的图像。
# 从文件夹路径读取图像到图像对象
images = [
keras_ocr.tools.read(img) for img in ['/content/Image1.png',
'/content/Image2.png',]
]
以下是在这个Keras-ocr库教程中使用的两张图像。一张是使用手写风格字体的纯文本图像,另一张是包含文本的图像。
现在,让在图像上运行管道识别器,并对这些图像中的文本进行预测。
# 从图像生成文本预测
prediction_groups = pipeline.recognize(images)
可以使用以下代码绘制模型的预测:
# 绘制文本预测
fig, axs = plt.subplots(nrows=len(images), figsize=(10, 20))
for ax, image, predictions in zip(axs, images, prediction_groups):
keras_ocr.tools.drawAnnotations(image=image,
predictions=predictions,
ax=ax)
得到的预测输出是——
Keras-OCR库在两张图像上都表现良好。它能够正确识别文本的位置,并从输入图像中提取单词。
还可以像这样打印图像中识别出的文本:
predicted_image = prediction_groups[1]
for text, box in predicted_image:
print(text)
如果需要,上述识别的文本可以从上述图像中转换为.csv或.txt格式以供进一步使用。