使用计算机视觉和深度学习创建现代OCR管道( 五 )


解决方案是修改网络的连接主义时间分类 (CTC) 层,以便除了预测文本之外,还提供置信度分数 。使用此置信度分数以三种方式对预测进行筛选:
(1)如果置信度很高,保持预测不变 。
(2)如果置信度很低,只是简单地过滤掉它们,打赌这些是噪声预测 。
(3)如果置信度在中间的某个地方,通过牛津英语词典生成的词典进行运行,在单词预测框之间和内部应用不同的转换,尝试组合单词或以各种方式拆分它们以查看它们是否在词典中 。
还必须处理由前面提到的Word Deep Net的固定接受图像大小引起的问题:即单个“单词”窗口实际上可能包含多个单词或仅包含很长单词的一部分 。因此通过一个称为的模块将这些输出与来自单词检测器的原始输出一起运行,该模块为每个单独的OCRed单词提供了离散的边界框 。这将生成单个单词坐标及其 OCRed 文本 。
例如,在系统的以下调试可视化中,您可以在之前看到检测到的单词周围的框:
会将其中一些框分解为单独的单词坐标框,例如“of”和“”,它们当前是同一框的一部分 。
最后有了一个完全工作的端到端系统,生成了超过一千万个合成单词,并训练神经网络进行大量的迭代,以尽可能多地提高准确性 。所有这些最终提供了准确性、精确度和召回率数据,这些数字都达到或超过了 OCR 最先进的技术 。
开始为下一个艰难的阶段做准备:生产 。
5.生产化
在这一点上,有一个原型和Lua脚本包装Torch的集合 - 当然还有一个训练有素的模型!— 这表明可以实现最先进的 OCR 准确性 。但是,这与实际用户可以在具有可靠性,性能和可靠工程的分布式环境中使用的系统相去甚远 。需创建一个适合数百万用户使用的分布式管道,以及一个取代原型脚本的系统 。此外,必须在不中断现有 OCR 系统的情况下使用商用现成 SDK 来做到这一点 。
下面是生产化 OCR 管道的图示:
整体生产 OCR 管道
首先为不同的OCR引擎创建一个抽象,包括自己的引擎和商业引擎,并使用内部实验框架对其进行了控制 。使在不中断现有 OCR 系统的情况下引入新管道的骨架,该系统已经为数百万商业客户在生产中运行 。
还将基于Torch的模型(包括CTC层)移植到,原因有几个 。首先,已经在生产环境中对进行了标准化,以便更轻松地管理模型和部署 。其次,更喜欢使用而不是Lua,具有出色的绑定 。
在新管道中,移动客户端将扫描的文档图像上传到内部异步工作队列 。上传完成后,通过远程过程调用 (RPC) 将图像发送到运行 OCR 服务的服务器群集 。
实际的OCR服务使用和,两者都是用C++编写的,并且具有复杂的库依赖关系;因此,安全漏洞是一个真正的问题 。使用 LXC、、Linux和等技术将实际的 OCR 部分隔离到 jail 中,以提供隔离和系统白名单,使用 IPC 进出隔离的容器 。如果有人破坏了监狱,他们仍然会与系统的其余部分完全分离 。
jail 基础结构允许在启动时一次性有效地设置昂贵的资源,例如加载训练的模型,然后将这些资源克隆到 jail 中以满足单个 OCR 请求 。这些资源被克隆为写入时复制到分叉的 jail 中,并且对于如何使用模型是只读的,因此非常高效和快速 。必须修补,以便更容易地进行这种分叉 。
一旦获得单词边界框及其OCRed文本,将它们合并回移动文档扫描仪生成的原始PDF中,作为OCR隐藏层 。因此,用户将获得一个包含扫描图像和检测到的文本的PDF 。OCRed 文本也会添加到的搜索索引中 。用户现在可以突出显示和复制粘贴PDF中的文本,由于隐藏的单词框坐标,突出显示的位置将放在正确的位置 。他们还可以通过上的 OCRed 文本搜索扫描的 PDF 。