光学字符识别 (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 操作

输入

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

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

输出

文本检测模型返回一个 4 维 float32 张量,形状为 (1, 80, 80, 5) 作为边界框,以及一个 4 维 float32 张量,形状为 (1,80, 80, 5) 作为检测分数。

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

局限性

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

  • 这些模型对于野外 OCR(例如,智能手机相机在低光照条件下拍摄的随机图像)来说还不够通用。

因此,我们只选择了 3 个 Google 产品徽标来演示如何使用 TensorFlow Lite 进行 OCR。如果您正在寻找可直接使用的生产级 OCR 产品,您应该考虑 Google ML Kit。ML Kit 在底层使用 TFLite,应该足以满足大多数 OCR 使用场景,但有些情况下您可能需要使用 TFLite 构建自己的 OCR 解决方案。以下是一些示例

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

参考资料