65.9K
CodeProject 正在变化。 阅读更多。
Home

AI 推理软件基础:光学字符识别入门

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2022年11月1日

CPOL

5分钟阅读

viewsIcon

8031

在本文中,我将向您展示如何使用机器学习平台TensorFlow和Intel® OpenVINO™工具包发行版开始光学字符识别(OCR)。

AI/ML为开发人员提供了无限的可能性,让他们可以在应用程序中实现新的、令人兴奋的功能。但如果您真的想成为一名真正的AI开发者,首先必须了解基础知识。一个绝佳的入门步骤是熟悉光学字符识别(OCR)。OCR可能是一个基础的机器学习应用(自1965年就已存在!),但出于几个原因,它是一个重要的应用:

  1. 由于其简单性,它通常是您在学校遇到的第一个机器学习问题。
  2. 借助深度学习卷积神经网络(CNN),我们现在可以达到非常高的准确率(错误率低至约0.17%)。
  3. 它可以在现代硬件上高效运行,例如使用OpenVINO™的笔记本电脑CPU。

OCR应用程序使用户能够从文档和图像中提取、转换和再利用数据,从而消除了容易出错且耗时的人工数据输入。除了研究之外,该应用已在家用许多工业用例中找到了用武之地,从书籍和银行交易的数字化到仓库库存。

以邮件系统为例。要处理源源不断的信件和包裹需要付出巨大的努力。没有OCR,投递可能会延迟或丢失。但有了OCR功能,邮件分拣过程就可以自动化,从而按时投递更多包裹和信件。而且,正如我之前提到的,相信与否,OCR自1965年以来一直存在并被美国邮政服务(USPS)实施——请观看美国国家档案馆和记录管理局的这段视频了解更多信息。

由于其多功能性,OCR是开发人员的绝佳学习工具。在本文中,我将向您展示如何使用机器学习平台TensorFlowIntel® OpenVINO™工具包发行版开始OCR。

在此演示中,我们将运行一个简单的程序,该程序可以识别MNIST数据集中的手写数字,并在CPU等广泛可用的硬件上对其进行最优运行。(关于AI驱动数字识别理论的快速介绍,我强烈建议观看Grant Sanderson的这段教程)。

学习基础知识

您可以在一个Kaggle笔记本中找到今天演示的全部源代码,其中代码被组织成一系列非常简短的编号块。

为了简洁起见,本文仅介绍笔记本代码中最重要的一些片段。当然,您可以在您方便的时候通过块号研究整个笔记本,并了解我们如何从头开始训练一个神经网络,以达到十年前不可能达到的准确度水平。

在第1到第3个块中,笔记本设置了TensorFlow的Python环境。在第4到第14个块中,笔记本加载了我们将用于创建可以识别手写数字的模型,并训练我们的神经网络的MNIST数据库。然后,Intel今天提供的新颖且令人兴奋的部分是如何在Intel硬件上优化这些模型,以更高效、更快速地运行。

OpenVINO运行时(Core)在此命令中加载到块15中:

from openvino.runtime import Core

由于OpenVINO在处理其自身的“中间表示”(IR)格式的模型,因此也有必要声明使用TensorFlow创建的模型的位置,以及IR版本的名称和数据类型(FP16,即浮点数,16位数字)。

model_name = "mnist"
model_path = Path(model_name)
ir_data_type = "FP16"
ir_model_name = "mnist_ir"

OpenVINO也可以使用双精度模型(FP32,即每个数字只有16位而不是32位),但正如您很快会看到的,使用FP16模型运行速度更快,内存消耗更少,即使在标准CPU上,您仍然可以获得非常好的结果。

块15的中间部分组装并运行生成IR模型的模型优化器命令。

mo_command = f"""mo                 --saved_model_dir "{model_name}"
                 --input_shape "[28,28]
                 --data_type "{ir_data_type}
                 --output_dir "{model_path.parent}
                 --model_name "{ir_model_name}"
                 """mo_command = " ".join(mo_command.split())# Run the Model Optimizer (overwrites the older model)print("Exporting TensorFlow model to IR... This may take a few minutes.")mo_result = %sx $mo_commandprint("\n".join(mo_result))

接下来,块16将IR模型的拓扑(model_xml)和权重(model_bin)加载到OpenVINO推理引擎中。

# Load network to the plugin
ie = Core()
model = ie.read_model(model=model_xml)
compiled_model = ie.compile_model(model=model, device_name="CPU")
input_layer = compiled_model.input(0)
output_layer = compiled_model.output(0)

然后,它提供一些来自MNIST的数字图像进行识别。

#test against a few images from the dataset
input_list = x_test[:10]
for input_image in input_list:
res = compiled_model([input_image])[output_layer]
X = input_image
X = X.reshape([28, 28]);
plt.figure()
plt.gray()
plt.imshow(X)
plt.text(0,-1, "The prediction is "+str(np.argmax(res[0]))+" @ "+str(max(res[0])*100)+"%")

如上表所示,所有10个数字都被正确识别,在许多情况下置信度高于99.99%,但始终在99%左右!如果您向90年代的人展示这种准确度,您基本上就是一个创造不可能的巫师。

如今,机器学习为许多曾经只存在于科幻小说中的应用打开了大门。如果您看看有多少困难的问题终于得到了解决并推动了人类文明的进步,也许是时候让您参与到这场AI计算革命中来——从基础的OCR 101开始。😃

从头开始,理解基本原理,了解事物的工作方式,而不是盲目地按“魔术按钮”,这总是好的,对吧?

下一步是什么?

现在您已经亲眼看到了使用OpenVINO编写高性能OCR代码是多么容易。

要了解更多关于OCR为何以及如何成为一项基础AI概念的信息,请观看Intel® AI开发团队的这个视频。您甚至可以通过我们关于照片中文本识别如何识别移动中的文本的两个笔记本,开始练习OCR更高级但同样简单的应用。

当您准备好进一步提升您的AI技能时,请访问Intel AI开发团队的冒险之旅,我们将把这些基础概念应用于解决现实世界的问题。

资源

声明和免责声明

英特尔技术可能需要启用硬件、软件或服务激活。

没有任何产品或组件可以绝对安全。

您的成本和结果可能会有所不同。

英特尔不控制或审计第三方数据。 您应该查阅其他来源来评估准确性。

Intel对所有明示和暗示的保证不承担任何责任,包括但不限于适销性、特定用途的适用性和非侵权性的默示保证,以及任何由履约过程、交易过程或商业用途产生的保证。

本文档不授予任何知识产权的许可(明示或暗示,禁止反言或以其他方式)。

© 英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能是其他方的财产。

© . All rights reserved.