在浏览器中使用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)

相关推荐
小J听不清14 分钟前
CSS 边框(border)全解析:样式 / 宽度 / 颜色 / 方向取值
前端·javascript·css·html·css3
智算菩萨16 分钟前
【How Far Are We From AGI】6 AGI的进化论——从胚胎到终极的三级跃迁与发展路线图
论文阅读·人工智能·深度学习·ai·agi
夏同学Xavi25 分钟前
skls-mgr:统一管理 Agent Skills 的 CLI 工具
人工智能·程序员·命令行
天青色等烟雨0929 分钟前
Skill的终局:不是被生成,而是能进化
人工智能·agent
FPGA-ADDA32 分钟前
第四篇:嵌入式系统常用通信接口详解(I2C、SPI、UART、RS232/485、CAN、USB)
人工智能·单片机·嵌入式硬件·fpga开发·信息与通信
智算菩萨36 分钟前
【How Far Are We From AGI】7 AGI的七重奏——从实验室到现实世界的应用图景与文明展望
论文阅读·人工智能·ai·agi·感知
一招定胜负1 小时前
从 TXT 到 CSV 再到 Flask 部署:语音转写 AI 总结全流程实战
人工智能
数字供应链安全产品选型1 小时前
#AI原生安全,Gartner 点名之后:AIST 技术正在进入深水区
大数据·人工智能
liukuang1101 小时前
阿里Q3财报:全栈AI驱动下的价值重构
人工智能·重构
用户15815963743701 小时前
多 Agent 系统容错与恢复机制:OAuth 过期、Cron 级联失败的工程解法
javascript