0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用TensorFlow Lite从Android设备图像提取文本

Tensorflowers 来源:TensorFlow 作者:魏巍 2021-11-02 15:34 次阅读

俗话说:“一图胜千言”。图像包含丰富的视觉信息,但有时关键信息位于图像的文本当中。虽然识字的人可以轻松理解图像中嵌入的文字,但我们如何利用计算机视觉机器学习来教计算机做到这一点呢?

今天,我们将向您展示如何使用 TensorFlow Lite 从 Android 设备上的图像中提取文本。我们将引导您完成最近开源的光学字符识别 (OCR) Android 参考应用的关键步骤,您可参考该处获取完整代码。在下方动画中,可以看到该应用如何从三款 Google 产品徽标图片中提取产品名称。

该处

https://github.com/tensorflow/examples/tree/master/lite/examples/optical_character_recognition/android

从图像中识别文本的过程即为 OCR,该技术在多个领域中广泛使用。例如,Google 地图运用 OCR 技术从地理定位图像中提取信息,进而完善 Google 地图。

Google 地图运用 OCR 技术

https://ai.googleblog.com/2017/05/updating-google-maps-with-deep-learning.html

一般来说,OCR 是一个包含多个步骤的流水线。相关步骤通常包含文本检测和文本识别:

使用文本检测模型查找文本周围的边界框;

执行一些后处理操作,以转换边界框;

将这些边界框内的图像转换为灰度图像,如此一来,文本识别模型便可绘制出文字和数字。

在示例中,我们将利用 TensorFlow Hub 中的文本检测和文本识别模型。多个不同的模型版本可用来权衡速度/准确率的取舍;我们在此使用的是 float16 量化模型。如需有关模型量化的更多信息,请参阅 TensorFlow Lite 量化文档。

文本检测

https://hub.tensorflow.google.cn/sayakpaul/lite-model/east-text-detector/fp16/1

文本识别

https://hub.tensorflow.google.cn/tulasiram58827/lite-model/keras-ocr/float16/2

TensorFlow Lite 量化

https://tensorflow.google.cn/lite/performance/model_optimization

我们还会使用 OpenCV,这是一款广泛使用的计算机视觉库,适用于非极大值抑制 (NMS) 和透视变换(我们稍后会对此展开讨论),以对检测结果进行后处理。此外,我们还会使用 TFLite 支持库对图像进行灰度和标准化处理。

非极大值抑制

https://www.coursera.org/lecture/convolutional-neural-networks/non-max-suppression-dvrjH

TFLite 支持库

https://tensorflow.google.cn/lite/inference_with_metadata/lite_support

对于文本检测,由于检测模型支持 320x320 的固定像素,我们会使用 TFLite 支持库调整输入图像的大小并对其进行标准化处理:

检测模型

https://hub.tensorflow.google.cn/sayakpaul/lite-model/east-text-detector/fp16/1

val imageProcessor =

ImageProcessor.Builder().add(ResizeOp(height, width, ResizeOp.ResizeMethod.BILINEAR)).add(NormalizeOp(means, stds)).build()

var tensorImage = TensorImage(DataType.FLOAT32)

tensorImage.load(bitmapIn)

tensorImage = imageProcessor.process(tensorImage)

接下来,我们使用 TFLite 运行检测模型:

detectionInterpreter.runForMultipleInputsOutputs(detectionInputs, detectionOutputs)

检测模型的输出是一些经过旋转且图像内包含文本的边界框。我们会运行非极大值抑制,借助 OpenCV 为每个文本块确定一个边界框:

NMSBoxesRotated(

boundingBoxesMat,

detectedConfidencesMat,

detectionConfidenceThreshold.toFloat(),

detectionNMSThreshold.toFloat(),

indicesMat

有些时候,图像内的文本会出现变形(例如,我的笔记本电脑上的“kubernetes”贴纸),并伴随一个透视角度:

如果我们只是将原始旋转边界框直接“喂”给识别模型,则该模型不太可能正确识别字符。在本例中,我们需要使用 OpenCV 来进行透视变换:

val rotationMatrix = getPerspectiveTransform(srcPtsMat, targetPtsMat)

warpPerspective(

srcBitmapMat,

recognitionBitmapMat,

rotationMatrix,

Size(recognitionImageWidth.toDouble(), recognitionImageHeight.toDouble()))

之后,我们会再次使用 TFLite 支持库,在边界框内调整变换图像的大小,并对其进行灰度和归一化处理:

val imageProcessor =

ImageProcessor.Builder().add(ResizeOp(height, width, ResizeOp.ResizeMethod.BILINEAR)).add(TransformToGrayscaleOp()).add(NormalizeOp(mean, std)).build()

最后,我们会运行文本识别模型、根据模型输出绘制出字符与数字,然后更新应用界面:

recognitionInterpreter.run(recognitionTensorImage.buffer, recognitionResult)

var recognizedText = “”for (k in 0 until recognitionModelOutputSize) {

var alphabetIndex = recognitionResult.getInt(k * 8)if(alphabetIndex in 0..alphabets.length - 1)

recognizedText = recognizedText + alphabets[alphabetIndex]}

Log.d(“Recognition result:”, recognizedText)if (recognizedText != “”) {

ocrResults.put(recognizedText, getRandomColor())}

这样就完成了,就是这么简单。此时,我们可以在我们的应用中使用 TFLite 来提出输入图像中的文本。

最后我想指出的是,如果您只是需要一个即用型 OCR SDK,您可以直接使用 Google ML Kit 的文字识别功能。ML Kit 底层使用了 TFLite,并且对于大多数 OCR 用例而言足矣。在以下情况下,您可以使用 TFLite 来构建专属 OCR 解决方案:

您有自己想要使用的专属文本检测/识别 TFLite 模型;

您有特殊的业务需求(例如识别颠倒的文本),并且需要自定义 OCR 流水线;

您希望支持 ML Kit 没有覆盖的语言;

您的目标用户设备不一定要安装 Google Play 服务;

您想要控制用于运行模型的硬件后端(CPUGPU 等)。

ML Kit

https://developers.google.cn/ml-kit/vision/text-recognition

Google Play 服务

https://developers.google.cn/android/guides/overview

在这些情况下,我希望本教程和我们的实现示例可以助您开启在您的应用中构建专属 OCR 功能的旅程。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 应用
    +关注

    关注

    2

    文章

    438

    浏览量

    34136
  • OCR
    OCR
    +关注

    关注

    0

    文章

    144

    浏览量

    16323
  • tensorflow
    +关注

    关注

    13

    文章

    328

    浏览量

    60493
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

    601

原文标题:基于 TensorFlow Lite 的 OCR:一款崭新的示例应用

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    第四章:在 PC 交叉编译 aarch64 的 tensorflow 开发环境并测试

    本文介绍了在 PC 端交叉编译 aarch64 平台的 tensorflow 库而非 tensorflow lite 的心酸过程。
    的头像 发表于 08-25 11:38 803次阅读
    第四章:在 PC 交叉编译 aarch64 的 <b class='flag-5'>tensorflow</b> 开发环境并测试

    如何在Tensorflow中实现反卷积

    TensorFlow中实现反卷积(也称为转置卷积或分数步长卷积)是一个涉及多个概念和步骤的过程。反卷积在深度学习领域,特别是在图像分割、图像超分辨率、以及生成模型(如生成对抗网络GANs)等任务中
    的头像 发表于 07-14 10:46 539次阅读

    利用TensorFlow实现基于深度神经网络的文本分类模型

    要利用TensorFlow实现一个基于深度神经网络(DNN)的文本分类模型,我们首先需要明确几个关键步骤:数据预处理、模型构建、模型训练、模型评估与调优,以及最终的模型部署(尽管在本文中,我们将重点放在前四个步骤上)。下面,我将详细阐述这些步骤,并给出一个具体的示例。
    的头像 发表于 07-12 16:39 688次阅读

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google开发的一个开源深度学习框架,它允许开发者方便地构建、训练和部署各种复杂的机器学习模型。TensorFlow凭借其高效的计算性能、灵活的架构以及丰富的工具和库,在学
    的头像 发表于 07-12 16:38 568次阅读

    Android设备将SDK更新到1.4.0后无法连接到ESP SoftAP怎么解决?

    将 SDK 1.2.0 更新到 1.4.0 后,一切看起来都很好,但是某些设备(例如 Android 5.0、Android 4.4)
    发表于 07-08 07:41

    tensorflow和pytorch哪个更简单?

    PyTorch更简单。选择TensorFlow还是PyTorch取决于您的具体需求和偏好。如果您需要一个易于使用、灵活且具有强大社区支持的框架,PyTorch可能是一个更好的选择。如果您需要一个在
    的头像 发表于 07-05 09:45 772次阅读

    tensorflow和pytorch哪个好

    :2015年由Google Brain团队发布。 语言支持 :主要使用Python,也支持C++、Java等。 设计哲学 :TensorFlow是一个端到端的机器学习平台,支持研究到生产的所有阶段
    的头像 发表于 07-05 09:42 625次阅读

    tensorflow简单的模型训练

    在本文中,我们将详细介绍如何使用TensorFlow进行简单的模型训练。TensorFlow是一个开源的机器学习库,广泛用于各种机器学习任务,包括图像识别、自然语言处理等。我们将从安装
    的头像 发表于 07-05 09:38 501次阅读

    keras模型转tensorflow session

    在这篇文章中,我们将讨论如何将Keras模型转换为TensorFlow session。 Keras和TensorFlow简介 Keras是一个高级神经网络API,它提供了一种简单、快速的方式来构建
    的头像 发表于 07-05 09:36 455次阅读

    TensorFlow的定义和使用方法

    数据流图,从而简化机器学习模型的构建、训练和部署。自2015年11月开源以来,TensorFlow迅速成为数据科学家、软件开发者以及教育工作者广泛使用的工具,广泛应用于图像识别、自然语言处理、推荐系统等多个领域。本文将深入解读Tenso
    的头像 发表于 07-02 14:14 672次阅读

    卷积神经网络在文本分类领域的应用

    在自然语言处理(NLP)领域,文本分类一直是一个重要的研究方向。随着深度学习技术的飞速发展,卷积神经网络(Convolutional Neural Network,简称CNN)在图像识别领域取得了
    的头像 发表于 07-01 16:25 613次阅读

    如何提取、匹配图像特征点

    我们习惯图像中选取比较有代表性的点,然后,在此基础上,讨论相机位姿估计问题,以及这些点的定位问题。 在经典 SLAM 模型中,把它们称为路标,而在视觉 SLAM 中,路标则是指图像特征(Features)。
    的头像 发表于 04-19 11:41 605次阅读

    基于TensorFlow和Keras的图像识别

    TensorFlow和Keras最常见的用途之一是图像识别/分类。通过本文,您将了解如何使用Keras达到这一目的。定义如果您不了解图像识别的基本概念,将很难完全理解本文的内容。因此在正文开始之前
    的头像 发表于 01-13 08:27 767次阅读
    基于<b class='flag-5'>TensorFlow</b>和Keras的<b class='flag-5'>图像</b>识别

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    场景介绍 MindSpore Lite 是一款 AI 引擎,它提供了面向不同硬件设备 AI 模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍
    发表于 12-14 11:41

    小模型也能进行上下文学习!字节&amp;华东师大联合提出自进化文本识别器

    场景文本识别(Scene Text Recognition)的目标是将图像中的文本内容提取出来。实际应用场景中,场景文本识别面临着多种挑战:
    的头像 发表于 11-27 16:28 882次阅读
    小模型也能进行上下文学习!字节&amp;华东师大联合提出自进化<b class='flag-5'>文本</b>识别器