光学字符识别 (OCR)

光学字符识别 (OCR) 是利用计算机视觉和机器学习技术从图像中识别字符的过程。此参考应用演示了如何使用 TensorFlow Lite 进行 OCR。它使用文本检测模型文本识别模型的组合作为识别文本字符的 OCR 流水线。

开始

如果您是 TensorFlow Lite 新用户,并且使用的是 Android 平台,我们建议您研究以下可以帮助您入门的示例应用。

Android 示例

如果您使用的不是 Android 平台,或者您已经熟悉 TensorFlow Lite API,则可以从 TF Hub 下载模型。

工作原理

OCR 任务通常分为两个阶段。首先,我们使用文本检测模型来检测可能的文本周围的边界框。其次,我们将处理后的边界框送入文本识别模型,以确定边界框内的特定字符(在文本识别之前,我们还需要进行非最大抑制、透视变换等)。在我们的示例中,这两个模型都来自 TensorFlow Hub,它们都是 FP16 量化模型。

性能基准

性能基准数值使用此处所述工具生成。

模型名称 模型大小 设备 CPU GPU
文本检测 45.9 Mb Pixel 4 (Android 10) 181.93ms* 89.77ms*
文本识别 16.8 Mb Pixel 4 (Android 10) 338.33ms* N/A**
  • 使用 4 个线程。

** 此模型无法使用 GPU 委托,因为我们需要 TensorFlow 算子来运行该模型

输入

文本检测模型接受形状为 (1, 320, 320, 3) 的四维 float32 张量作为输入。

文本识别模型接受形状为 (1, 31, 200, 1) 的四维 float32 张量作为输入。

输出

文本检测模型返回形状为 (1, 80, 80, 5) 的四维 float32 张量作为边界框,并返回形状为 (1,80, 80, 5) 的四维 float32 张量作为检测分数。

文本识别模型返回形状为 (1, 48) 的二维 float32 张量,作为到字母列表 '0123456789abcdefghijklmnopqrstuvwxyz' 的映射索引。

函数式模型示例:

  • 当前的文本识别模型使用英文字母和数字的合成数据进行训练,因此只支持英语。

  • 这些模型还不够通用,无法随意进行 OCR(比如,在光线较弱的情况下,由智能手机摄像头拍摄的随机图像)。

因此,我们选择了 3 个 Google 产品徽标,只是为了演示如何使用 TensorFlow Lite 进行 OCR。如果您正在寻找现成的生产级 OCR 产品,您应该考虑 Google ML Kit。在底层使用 TFLite 的 ML Kit 对于大多数 OCR 用例来说应该足够了,但在某些情况下,您可能希望使用 TFLite 构建自己的 OCR 解决方案。以下是一些示例:

  • 您希望使用自己的文本检测/识别 TFLite 模型
  • 您有特殊的业务需求(即识别颠倒的文本),并且需要自定义 OCR 流水线
  • 您想要支持 ML Kit 未涵盖的语言
  • 您的目标用户设备不一定安装了 Google Play 服务

参考文献