在浏览器中使用TensorFlow.js

TensorFlow.js简介

介绍

光学字符识别(OCR)是指能够从图像或文档中捕获文本元素,并将其转换为机器可读的文本格式的技术。如果您想了解更多关于这个主题的内容,本文是一个很好的介绍。

TensorFlow.js是一个库,用于使用JavaScript开发和训练机器学习模型,并将其部署在浏览器中或Node.js上。您可以使用现有模型、转换Python TensorFlow模型、使用迁移学习用您自己的数据重新训练现有模型以及从头开始开发模型。

前言

在Mindee,TensorFlow团队开发了一种基于python的开源OCR,DocTR,希望能在70%的开发者使用JavaScript的情况下,能够选择将它部署在浏览器中,以确保所有开发者都能使用。

深入架构

OCR模型可以分为两部分:检测模型文本识别模型。在DocTR中,检测模型是一个CNN(卷积神经网络),它对输入图像进行分割以找到文本区域,然后在每个检测到的单词周围裁剪文本框,并将文本框发送给识别模型。第二种模型是卷积递归神经网络(CRNN),它从文字图像中提取特征,然后用递归层(LSTM)对图像上的字母序列进行解码。

检测模型

DocTR中可以实现了不同的体系结构,但TensorFlow团队选择了一个非常轻的体系结构用于客户端,因为设备硬件可能因人而异。DocTR使用了一个带有DB(可微分二值化)头的mobilenetV2主干。实现细节可以在DocTR Github中找到。团队人员训练这个模型的输入大小为(512,512,3),以减少延迟和内存使用。DocTR其有一个私有数据集,由130,000个带注释的文档组成,用于训练这个模型。

识别模型

DocTR使用的识别模型也是较轻的架构:具有mobilenetV2骨干的CRNN(卷积循环神经网络)。关于这个架构的更多信息可以在这里找到。它基本上是由前半部分的mobilenetV2层来提取特征,然后是2个bi- lstm来解码视觉特征为字符序列(单词)。它利用亚历克斯·格雷夫斯(Alex Graves)引入的CTC损耗来高效解码序列。在该模型中,文字图像的输入尺寸为(32,128,3),使用填充来保持作物的纵横比。它在私有数据集上训练,该数据集由1100万个从不同文档中提取的文本框组成。这个数据集有各种各样的字体,因为它由来自许多不同数据源的文档组成。DocTR使用了数据增强,这样就可以很好地概括不同的字体、背景和渲染。只要是人类可读的手写文本,它也会给出不错的结果。

模型转换和代码实现

由于最初模型是使用TensorFlow实现的,因此需要进行Python转换才能在web浏览器中大规模运行。为此,团队为每个经过训练的Python模型导出了一个tensorflow SavedModel,并使用tensorflowjs_converter命令行工具快速将保存的模型转换为浏览器中执行所需的tensorflow .js JSON格式。

转换后的模型被集成到React.js前端应用程序中,为演示的用户界面提供支持:用MUI来设计内部的前端SDK react-mindee-js(提供计算机视觉工具)的接口组件,用OpenCV.js来进行检测模型的后期处理。这个后期处理步骤使用OpenCV.js函数将原始的二值分割贴图转换为多边形列表。然后,我们可以从源图像中裁剪这些盒子,最终获得准备发送到识别mo的单词图像。

速度 & 性能

必须有效地处理速度和性能之间的权衡。OCR模型非常慢,因为有两个不能并行化的任务(文本区域分割+单词识别),所以必须使用轻量级模型来确保在大多数设备上的快速执行

在一台带有RTX 2060和i7 9th Gen的现代计算机上,检测任务每幅图像大约需要750毫秒,使用WebGL后端识别模型每批32个农作物(单词)大约需要170毫秒,使用TensorFlow.js基准测试工具进行基准测试。将这两个模型和视觉操作(检测后处理)包装起来,在小文档(不到100个单词)的端到端OCR运行时间不到2秒,而对单词非常密集的文档运行预测时间只需要几秒。

转载于:在浏览器中使用TensorFlow.js - 掘金 (juejin.cn)

相关推荐
简佐义的博客几秒前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
无名修道院几秒前
自学AI制作小游戏
人工智能·lora·ai大模型应用开发·小游戏制作
晚霞的不甘9 分钟前
CANN × ROS 2:为智能机器人打造实时 AI 推理底座
人工智能·神经网络·架构·机器人·开源
互联网Ai好者13 分钟前
MiyoAI数参首发体验——不止于监控,更是你的智能决策参谋
人工智能
island131413 分钟前
CANN HIXL 通信库深度解析:单边点对点数据传输、异步模型与异构设备间显存直接访问
人工智能·深度学习·神经网络
初恋叫萱萱18 分钟前
CANN 生态中的图优化引擎:深入 `ge` 项目实现模型自动调优
人工智能
不爱学英文的码字机器20 分钟前
深度解读CANN生态核心仓库——catlass,打造高效可扩展的分类器技术底座
人工智能·cann
Kiyra20 分钟前
作为后端开发你不得不知的 AI 知识——RAG
人工智能·语言模型
共享家952724 分钟前
Vibe Coding 与 LangChain、LangGraph 的协同进化
人工智能
xjt_090126 分钟前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js