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

作者 | 学海无涯yc
编辑 | 3D视觉开发者社区
文章目录
导读
此篇文章中讲述使用了计算机视觉和深度学习的进步,如双向长短期记忆(LSTM),连接主义时间分类(CTC),卷积神经网络(CNN)等具体示例 。此外还深入研究了如何实际使OCR 管道在规模上做好生产准备 。
前言
文档扫描仪可以使用手机拍照并扫描收据和发票等项目 。移动文档扫描仪仅输出图像 - 就计算机而言,图像中的任何文本都只是一组像素,无法复制粘贴,搜索或对文本执行的任何其他操作 。
因此,需要应用光学字符识别或OCR 。此过程从文档扫描图像中提取实际文本 。运行 OCR 后,可以为用户启用以下功能:
· 提取扫描文档中的所有文本并为其编制索引,以便以后可以搜索
· 创建隐藏的叠加层,以便可以从另存为 PDF 的扫描件中复制和粘贴文本
当构建移动文档扫描仪的第一个版本时,使用了一个商用现成的 OCR 库,以便在深入创建自己的基于机器学习的 OCR 系统之前进行产品验证 。这意味着将商业系统集成到扫描管道中,为业务用户提供上述两种功能,以查看是否从OCR中找到了足够的用途 。确认用户对移动文档扫描仪和OCR的需求确实很强烈后,决定构建自己的内部OCR系统,原因有几个 。
首先,有一个成本考虑:拥有OCR系统将节省大量资金,因为许可的商业OCR SDK根据扫描次数收费 。其次,商业系统针对平板扫描仪图像的传统OCR世界进行了调整,而我们的操作场景要困难得多,因为手机照片更加不受约束,具有褶皱或弯曲的文档,阴影和不均匀的照明,模糊和反射高光等 。因此,有机会提高识别准确性 。
事实上,计算机视觉世界发生了翻天覆地的变化,这给了一个独特的机会 。传统上,OCR系统是大量流水线的,手工构建和高度调整的模块利用了各种条件,它们可以假设使用平板扫描仪捕获的图像是正确的 。例如,一个模块可能查找文本行,然后下一个模块将查找单词和段字母,然后另一个模块可能会对字符的每个部分应用不同的技术来找出字符是什么,依此类推 。大多数方法都依赖于输入图像的二值化作为早期阶段,这可能很脆弱,并丢弃了重要的线索 。构建这些 OCR 系统的过程非常专业且劳动密集型,系统通常只能处理来自平板扫描仪的相当有限的影像 。
在过去的几年中,深度学习成功地应用于计算机视觉中的许多问题,这些问题为我们提供了强大的新工具来处理OCR,而不必复制过去复杂的处理管道,而是依靠大量数据让系统自动学习如何执行许多以前手动设计的步骤 。
也许构建系统的最重要原因是,它将让我们更好地控制自己的命运,并允许我们在未来开发更多创新功能 。
在本博客文章的其余部分,我们将带您了解我们如何以规模构建此管道的幕后故事 。大多数商业机器学习项目遵循三个主要步骤:
(1)研究和原型设计,看看是否有可能
(2)为实际最终用户生产模型
(3)在现实世界中完善系统
1.研究和原型设计
最初的任务是看是否可以构建一个最先进的OCR系统 。
首先收集一组具有代表性的捐赠文档图像,这些图像与用户可能上传的内容相匹配,例如收据,发票,信件等 。为了收集这一组,可询问一小部分用户,他们是否会捐赠一些图像文件供我们改进算法 。在,需非常重视用户隐私,因此当明确表示这是完全可选的,如果捐赠,文件将保持私密和安全 。需对此类用户捐赠的数据使用各种安全预防措施,包括从不将捐赠的数据保存在本地计算机上的永久存储中,维护广泛的审计,需要强大的身份验证才能访问其中任何数据,等等 。