Dropbox如何使用机器学习从数十亿图片中自动提取文字
参加 2018 AI开发者大会,请点击 ↑↑↑
作者 | Leonard Fink
译者 | 刘旭坤
整理 | Jane
出品 | AI科技大本营
【导读】提到 Dropbox,大家可能都知道这是一个文件同步、备份、共享的云存储软件。其实 Dropbox 可以实现的功能远不止这些。今天就为大家介绍 Dropbox 一个非常强大又实用的功能——自动识别并提取图片中的文本内容,包含 PDF 文档中的图片。比如,当用户搜索其中某个文件中出现的一段文本时(英文文本),在搜索结果中就会显示出这个文件。下面我们就为大家介绍这样的功能是如何实现的。
前言
自动识别图片中的文字功能有很多好处,最显著的提升是能够让 Dropbox 用户搜索从前无法搜索的内容。Dropbox 用户上传的图片和 PDF 文档总数已经超过了两百亿,这其中有超过百分之十的文件真正的内容都是文本,但格式是图片,比如说手机拍摄的小票或者白板的照片。这些就是我们要进行文字识别的对象了。PDF 文件中有 25% 左右是文档的扫描件,这些也属于我们想实现自动文字识别的对象。
对用户来说,文档和文档的扫描件好像差不太多,但对计算机来说区别可就大了。文档可以进行索引并搜索,而图片说白了只是一些像素点罢了。像 TXT、DOCX 和 html 格式的文件一般来说都可以进行索引,而像 JPEG、PNG 和 GIF 这些图片格式一般来说是不能直接进行索引的。对 PDF 文件来说要分情况,比如 PDF 里的图片也是不能够索引的。图像文本自动识别功能可以智能地区分所有的文档和文档中包含哪类数据。
分析
讲如何实现之前我们先要对这个问题进行一些初步的分析,具体来说就是回答下面三个问题:
什么文件需要进行文字识别
如何判断文件是否包含有文字
对于 PDF 文件是否所有页都需要全部识别?识别多少是有用的?
需要进行识别的主要是当前没有可用索引文本内容的文件,包括图片格式和还有一部分 PDF 文档,但其实这部分文件只占所有文件的很小一部分,所以解决这个问题很重要的一个步骤就是建立一个机器学习模型来判断文件是否包含可识别的文字。比如说某文档的照片我们就需要进行识别,但如果只是自拍拍到了衣服上的字,这时候识别恐怕就没有什么意义了。这里我们使用了一个卷积神经网络来进行二元分类。
我们经过统计发现 JPEG 这一最常见的图片格式中有大约 9% 可能包含文字。PDF 文件的每一页则可能属于下面三种情形之一:
非图片,只有可索引的文字
含有文字的图片
完全没有文字内容的图片
这三类中我们感兴趣的其实只有第二类。我们发现第二类情况在三种情况之中约占 28%。PDF文件的数量虽然只有 JPEG 图片数量的一半,但每个 PDF 文件平均有 8.8 页。所以综合看来要处理的 PDF 文件个数超过 JPEG 图片量十多倍。不过用下面这个很简单的办法就能大大降低需要处理的 PDF 文件数目。
文件总页数
有些 PDF 文件页数很多,可能好几千页的都有。如果我们没头没脑的通通识别会很占时间和资源。我们统计了一下 PDF 文件的页数,发现超过一半的文件都只有一页,超过十页的文件大约只占 PDF 文件总数的 10%。所以我们设定了一个标准,不管文件有多长只识别前面十页。
这样算下来 90% 的 PDF 文档我们都能实现完全索引。较长的文档我们虽然没有完全实现识别和索引,但能搜十页也比完全搜索不到好的多了。
自动文字识别系统
▌图片的渲染
对于 PDF 文件中图片的渲染由两种可行的方式:一个是将页面中的图片一张张提取出来,另一个是将一页文件当一整张图片来处理。这两种方法我们都测试了,不过 Dropbox 的文件预览功能已经有了完善的 PDF 渲染能力,所以最终我们选择了第二个方法。这样处理的话,像 PowerPoint 或者 Post Script 这样的文件格式,只要能支持预览,我们就能进行识别,而且词与词、段与段之间的顺序不会被打乱。
我们的渲染功能是基于谷歌的 PDFium 开发的。这其实也是 Chrome 浏览器所使用的 PDF 渲染引擎。渲染的过程中我们使用了并行处理来降低延迟。
▌文件图像分类
模型方面我们先用了 GoogLeNet 来进行特征提取,然后用了一个线性分类器来实现有无文字的分类。训练所用的图片有些是网上公开的,有些是用户和 Dropbox 员工提供的,一共有几千张。
我们发现一开始训练模型的时候准确率略低,模型把天际线、光溜溜的墙和开放水域这类图片都判断为有文字了。其实我们人眼都不太容易看出这些图片有什么共同点,不过模型认为只要是背景比较均一,有横线的就是有文字。最后是通过人工标记和给训练集中加入这类图片才克服了这个问题,从而把准确率提上来了。
▌识别图片的四个角
用户上传的图片因为拍照角度的原因,一般来说都不是我们想要的矩形和直角,所以必须进行矫正。要矫正的话,就要取得图片中文件四个角的坐标,这个功能我们也是用卷积神经网络来实现的。具体地说,就是把 Densenet-121 的输出换成了四个角的坐标。
训练这个模型用了几百张图。标记数据集的过程,需要一张一张地把文件的四个边找出来。这项工作我们是在亚马逊上众包完成的。有的图某个角可能压根没拍着,那这个角的坐标就跑到图片外面去了,这时候就只能靠人工脑补了。
为了加快速度,训练模型的时候用的图片分辨率比实际的图片分辨率低,所以输出的坐标也是低分辨率图片上的坐标。为了提高精度,我们在四个角附近,用高分辨率的图片把模型重跑了一遍。这样既提升了训练的速度,又能得到高精度图片上四个角的坐标。
▌单词提取
这一部分以矫正过的图片作为输入,输出的则是单词的内容和定界框。单词就按照识别出的顺序一一加入索引。如果文件超过一页,则继续建立索引一直达到 10 页的限制就停。
上面讲的的这几个部分组合起来看是这样的:
图中标出的步骤我们来分别介绍一下:
通过检查文件格式判断是否含有图片;判断用户权限
判断图片或 PDF 文件是否含有可识别的文字
判断图片的四个角以便进行矫正
提取单词
加入索引
图中有一个我们之前没有介绍过的 Auto-OCR lambda 模块,这其实是一个 Cape 微服务。Cape 是 Dropbox 在 16 年底推出的一个异步事件流处理框架,Dropbox 很多功能都用到了Cape。有了这个 Cape 微服务,当用户对文件进行增改的时候文字识别功能就能自动触发了,也就是图中列出来的步骤 1 到 5。
得益于 Dropbox 预览功能所提供的基础设施,这一系列从读取文件,判断类型,矫正到最后识别操作的效率很高,而且这套系统对文件的操作(比如渲染)是进行了缓存的,所以当用户上传同一个文件不会造成系统资源的二次开销。增加支持的文件类型和操作也是非常容易,只要为新的文件类型开发一个预览插件就行了。现在对 PDF 文件的识别也是通过插件来实现的。
为了提供系统的稳定性,我们在插件的调用过程中使用了指数补偿算法并加入了随机值。拿第一步调用的插件来说,重试之后失败率降低了 88%。
性能优化
刚开始测试的时候我们发现所使用的机器学习模型所占的资源和带来的延迟完全在我们能接受的范围之外,所以必须进行优化。我们决定先从配置参数着手,因为我们发现如果模型的性能遭遇瓶颈,很多时候简单地改变配置参数就能收到很好的效果。下面我们就来举几个例子说明一下。
我们的第一个改动是关闭了 TensorFlow 的多核支持。Dropbox 系统并行是在 CPU 层面实现的。每个核只运行一个单线程的程序,这样可以避免对数据的损坏也能降低恶意软件入侵的风险。然而,TensorFlow 默认是开启多核支持的。这样相当于每一个核又在跑多线程了,由此引起的上下文切换使得系统吞吐量损失了约 2/3。
关闭多核支持后性能还是不够好。所以我们又换成了支持 AVX2 指令集的 TensorFlow 并将模型和环境用 TensorFlow XLA 提前编译成一个 C++ 库。此外我们还调整了一些隐藏层的节点数量。
图像四个角坐标和文本方向的判断我们所采用的模型架构是 Densenet-121。相比之前用过的 Inception-Resnet-v2 来说速度大概快了一倍,坐标识别的准确率只是稍逊,而且是可以忽略不计的程度。
其实我们所作的这些工作都是为了加深对文件结构和内容的理解,让用户使用 Dropbox 时可以有更好的体验。
原文链接:
https://blogs.dropbox.com/tech/2018/10/using-machine-learning-to-index-text-from-billions-of-images/
--【完】--
2018 AI开发者大会
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。
如果你是某个AI技术领域的专业人才,或想寻求将AI技术整合至传统企业业务当中,扫码填写大会注册信息表,我们将从中挑选出20名相关性最高的幸运读者,送出单场分论坛入场券。大会嘉宾阵容和议题,请查看文末海报。
此外,如果你想与所有参会大牛充分交流沟通,点击阅读原文购票,使用优惠码:AI2018-DBY 购买两日通票,立减999元;此外大会还推出了1024定制票,主会+分会自由组合,精彩随心。
推荐阅读
吴恩达说“将引领下一波机器学习技术”的迁移学习到底好在哪?
Google最强模型BERT出炉,NLP还有哪些值得期待的发展?
北京房租大涨?6个维度,数万条数据帮你揭穿(附详情代码)
那些一毕业就选择华为的人,后来都怎么样了
宇宙第一 IDE Visual Studio 支持 Java 了!
为什么比特币是对政府最友好的加密货币?三大原因揭晓!
只因会区块链,就被300个女孩疯追?
点击「阅读原文」,查看大会更多详情。2018 AI开发者大会——摆脱焦虑,拥抱技术前沿。
相关文章:

001_性能压测工具
一、 Jmeter

SharePoint Server 2007 页面模型
虽然SharePoint Server 2007使用了ASP.NET 2.0的基础页面模型,SharePoint页面基本上也是基于标准的aspx技术来构建,但SharePoint Server 2007的页面模型仍然要比普通的ASP.NET应用复杂很多。对于一个SharePoint开发人员(和设计人员࿰…

oracle存储过程的常用语法
记录一下,主要方便自己以后查找: createorreplaceproceduresp_test(aa invarchar,bb innumberdefault0) isv_pos varchar(50);v_num number;begin---字符串查找和替换selectSUBSTR(PARAMETER, 1, INSTR(PARAMETER,branchId)-2) ||SUBSTR(PARAMETER, INST…
机器学习大神迈克尔 · 乔丹:我讨厌将机器学习称为AI
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

es6箭头函数(=)与展开特性运算符(...)的使用
2019独角兽企业重金招聘Python工程师标准>>> 箭头函数的几个写法 //当含有固定个参数的时候,es5写法 function test(a,b){ ..}//es6写法(es6参数可以设置默认值) let test (a,b) > {..}当函数体中仅有一行的时候,可以省略掉return与外部的…

华为atn980传输设备_在头发丝中实现每秒1000张高清DVD传输
这是近日央视《对话》栏目“超高清视频带来的产业诱惑”节目中,提到的随着4K、8K超高清视频发展,顺应时代发生的变化之一。超高清视频将为消费者带来全新的、超乎想象的体验。在这其中,黑科技的涌现更是对产业快速发展起着不可磨灭的推动作用…

李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程,你收集全了吗?
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

2 拖拽模型_3Dmax插件 | 螺丝钉、挖洞、网格模型等可以分分钟搞定
今天给大家带来3Dmax插件Mesh Insert v1.14Mesh Insert是一款3dsmax建模插件,灵感来自Polystein for Modo。它通过替换库中模型资源快速插入到模型表面。非常适合硬表面和有机建模!1大纲1、安装说明2、插件功能3、视频讲解2过程步骤1安装说明1、关闭max,…

谈谈职业规划——CSDN对我的采访
职业规划就像软件工程电信、银行等行业一直是许多人非常向往的工作单位,清差厚禄,旱涝保收,陈皓却不以此为然。所以当记者采访他的时候,他连用了两个“最”字来形容他离开银行的成就感。陈皓毕业后的前两年就职于云南省工商银行&a…
最实用的机器学习算法优缺点分析,没有比这篇说得更好了
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

南大电子机器人入驻云南_云南大学外语协会 英文歌曲演唱比赛
云南大学外语协会英文歌曲演唱比赛顺利落幕2020年11月8日14:30,云南大学外语协会英文歌曲演唱比赛在文汇楼2116顺利开展。比赛流程简洁明了:参赛同学完成抽签之后,在主持人的引导下,按照流程有序进入指定位置等待表演&…

Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对…

智“逗”冰雪寒
和小K帮客户做完直播准备,他说一会儿要接冰雪寒冰-雪-寒多伟大的名字——我来51看的第一篇博客就是他的《网管日志》那曾经是51最火的文章之一<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />…

装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern)一句话 继承一个抽象类,加上自己的特点,然后再使自己也变成抽象类,然后让子类继承的模式,叫装饰模式。意图…

python 区域和检索_304. 二维区域和检索(Python)
题目难度:★★★☆☆类型:二维数组方法:动态规划给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。示例:给定 matrix [[3, 0, 1, 4, 2],[5, 6, 3…

观察者模式(Observer Pattern)(二):HeadFirst中的气象站的实现
1 观察者模式的原理,首先由一个主题,当主题发送变化的时候,通知该主题的订阅者 按照上面的分析我们来进行设计 1.抽象主题Subject public interface Subject {public void registerObserver(Observer o);public void removeObserver(Observer…

专访图灵奖得主John Hopcroft:中国必须提升本科教育水平,才能在AI领域赶上美国
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

完整复现何恺明ICCV获奖论文结果并开源 !(附论文开源代码)
ICCV 作为计算机视觉的顶级会议,2017年共收到2143篇论文投稿,比上一届ICCV2015的1698篇增加了26.2%。共621篇被选为大会论文,录用比例28.9%;poster、spotlight、oral 比例分别为24.61%、2.61%和2.09%。组委会根据作者署名统计了不…

电子合同的履行_什么是电子合同履行?怎么履行电子合同?
随着互联网产业的发展,许多传统产业都与互联网接轨,人们的传统生活方式也在转变。现在许多人的各种消费都喜欢在方便、快捷的互联网上进行,就连严肃的合同签订也是如此。不过还有很多人不知道什么是电子合同履行,下面律图小编就为…

10月机器学习开源项目Top10
作者 | Mybridge 译者 | 林春眄 整理 | Jane 出品 | AI科技大本营 【导读】过去一个月里,我们对近 250 个机器学习开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1345,涵盖了包括深度学习, Tensorfl…

用SDM架构Cisco IOS ***图文详解全攻略(一)——easy ***
在测试***的过程中发现网上资料少少,于是自己花点力气写几篇普及教程,希望转贴的朋友给与支持,不要忘记署上原创是水煮豆豆的大名,嘿嘿~Cisco给我们提供了管理路由器的很好的安全工具SDM,同时也给我们提供了…

HP 服务器使用 SmartStart CD 引导安装 windows 2008 操作系统
1. 使用SmartStart CD引导安装之前的准备工作:首先,先根据自己的需要配置好RAID,可以使用开机自检检测到阵列卡时按F8进入ORCA的方法配置,也可以使用SmartStart CD中附带的ACU工具配置。其次,需要确认BIOS中启动顺…

parameter缩略语_缩略语
缩略语AccAccelerate(加速)BFBreakerfailure(断路器失灵)BRCBBuferReportControlBloc(有缓存报告控制块)CIDConfiguredIEDDescription(IED实例配置文件)CTCurrenttransformer(电流互感器)DevDevice(设备)ErrError(错误)FstFirst(第一个)GOOSE,GoGenericobjectorientedsubstatio…
[译]怎样用VisualStudio查看非托管代码
(译者:这篇文章作者是一位美国的MVP,这是他的系列文章"Under the cover"的第一篇,文章的本意从最底层的角度来优化代码的性能,并作为阅读作者其他文章的技术基础,这种通过这样的做法虽然初看起来有些过分,但是对读者了解.Net许多底层运作是十分有益的) 我们从使用vi…

盘点互联网大厂AI战略变迁,开发者将怎样pick前进路线?
随着各大企业相继试水“全面 AI”,人工智能在技术落地层面也开始持续深入,泛人工智能时代正在逼近。越来越多的发展趋势表明,未来的人工智能将逐步迈入广泛普及阶段,继而深入影响人类日常的生产生活方式,重塑传统生产结…

druid拦截器_CMS基于SpringBoot+Shiro+Mybatis+Druid+layui后台管理系统
contentManagerSystem后台管理系统简介contentManagerSystem,后台管理系统,采用SpringBoot构建整个项目框架,apacheShiro权限验证,mybatisdruid数据持久化动作,前端采用layui(http://www.layui.com/)展示,整个项目全部通过注解方式进行配置,具体大家可以…

Boost::asio io_service 实现分析
io_service的作用 io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调…

叮!你有一份2018英特尔人工智能大会的邀请函,请查收!
AI赋能的数字化应用,作为时代发展的核心驱动力,已经成为改变各行各业的神奇力量。想要准确把握智能时代的发展航向,领航舵手英特尔已向你发出邀请:2018英特尔人工智能大会,欢迎你的到来!11月14日-15日&…

赢得高薪的锦囊三秘诀
作者:jingch 来源:南京竞成 时间:2007-6-27 10:58:40 秘诀一 获得高薪的必备素质通过对一些高收入的外企白领阶层的调查发现,高学历并不与高收入划等号,高薪收入者的基本素质上的优势才是他们获得高薪的关键。概括起…