【導(dǎo)讀】提到 Dropbox,大家可能都知道這是一個(gè)文件同步、備份、共享的云存儲(chǔ)軟件。其實(shí) Dropbox 可以實(shí)現(xiàn)的功能遠(yuǎn)不止這些。今天就為大家介紹 Dropbox 一個(gè)非常強(qiáng)大又實(shí)用的功能——自動(dòng)識(shí)別并提取圖片中的文本內(nèi)容,包含 PDF 文檔中的圖片。比如,當(dāng)用戶(hù)搜索其中某個(gè)文件中出現(xiàn)的一段文本時(shí)(英文文本),在搜索結(jié)果中就會(huì)顯示出這個(gè)文件。下面我們就為大家介紹這樣的功能是如何實(shí)現(xiàn)的。
前言
自動(dòng)識(shí)別圖片中的文字功能有很多好處,最顯著的提升是能夠讓 Dropbox 用戶(hù)搜索從前無(wú)法搜索的內(nèi)容。Dropbox 用戶(hù)上傳的圖片和 PDF 文檔總數(shù)已經(jīng)超過(guò)了兩百億,這其中有超過(guò)百分之十的文件真正的內(nèi)容都是文本,但格式是圖片,比如說(shuō)手機(jī)拍攝的小票或者白板的照片。這些就是我們要進(jìn)行文字識(shí)別的對(duì)象了。PDF 文件中有 25% 左右是文檔的掃描件,這些也屬于我們想實(shí)現(xiàn)自動(dòng)文字識(shí)別的對(duì)象。
對(duì)用戶(hù)來(lái)說(shuō),文檔和文檔的掃描件好像差不太多,但對(duì)計(jì)算機(jī)來(lái)說(shuō)區(qū)別可就大了。文檔可以進(jìn)行索引并搜索,而圖片說(shuō)白了只是一些像素點(diǎn)罷了。像 TXT、DOCX 和 html 格式的文件一般來(lái)說(shuō)都可以進(jìn)行索引,而像 JPEG、PNG 和 GIF 這些圖片格式一般來(lái)說(shuō)是不能直接進(jìn)行索引的。對(duì) PDF 文件來(lái)說(shuō)要分情況,比如 PDF 里的圖片也是不能夠索引的。圖像文本自動(dòng)識(shí)別功能可以智能地區(qū)分所有的文檔和文檔中包含哪類(lèi)數(shù)據(jù)。
分析
講如何實(shí)現(xiàn)之前我們先要對(duì)這個(gè)問(wèn)題進(jìn)行一些初步的分析,具體來(lái)說(shuō)就是回答下面三個(gè)問(wèn)題:
什么文件需要進(jìn)行文字識(shí)別
如何判斷文件是否包含有文字
對(duì)于 PDF 文件是否所有頁(yè)都需要全部識(shí)別?識(shí)別多少是有用的?
需要進(jìn)行識(shí)別的主要是當(dāng)前沒(méi)有可用索引文本內(nèi)容的文件,包括圖片格式和還有一部分 PDF 文檔,但其實(shí)這部分文件只占所有文件的很小一部分,所以解決這個(gè)問(wèn)題很重要的一個(gè)步驟就是建立一個(gè)機(jī)器學(xué)習(xí)模型來(lái)判斷文件是否包含可識(shí)別的文字。比如說(shuō)某文檔的照片我們就需要進(jìn)行識(shí)別,但如果只是自拍拍到了衣服上的字,這時(shí)候識(shí)別恐怕就沒(méi)有什么意義了。這里我們使用了一個(gè)卷積神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行二元分類(lèi)。
我們經(jīng)過(guò)統(tǒng)計(jì)發(fā)現(xiàn) JPEG 這一最常見(jiàn)的圖片格式中有大約 9% 可能包含文字。PDF 文件的每一頁(yè)則可能屬于下面三種情形之一:
非圖片,只有可索引的文字
含有文字的圖片
完全沒(méi)有文字內(nèi)容的圖片
這三類(lèi)中我們感興趣的其實(shí)只有第二類(lèi)。我們發(fā)現(xiàn)第二類(lèi)情況在三種情況之中約占 28%。PDF文件的數(shù)量雖然只有 JPEG 圖片數(shù)量的一半,但每個(gè) PDF 文件平均有 8.8 頁(yè)。所以綜合看來(lái)要處理的 PDF 文件個(gè)數(shù)超過(guò) JPEG 圖片量十多倍。不過(guò)用下面這個(gè)很簡(jiǎn)單的辦法就能大大降低需要處理的 PDF 文件數(shù)目。
文件總頁(yè)數(shù)
有些 PDF 文件頁(yè)數(shù)很多,可能好幾千頁(yè)的都有。如果我們沒(méi)頭沒(méi)腦的通通識(shí)別會(huì)很占時(shí)間和資源。我們統(tǒng)計(jì)了一下 PDF 文件的頁(yè)數(shù),發(fā)現(xiàn)超過(guò)一半的文件都只有一頁(yè),超過(guò)十頁(yè)的文件大約只占 PDF 文件總數(shù)的 10%。所以我們?cè)O(shè)定了一個(gè)標(biāo)準(zhǔn),不管文件有多長(zhǎng)只識(shí)別前面十頁(yè)。
這樣算下來(lái) 90% 的 PDF 文檔我們都能實(shí)現(xiàn)完全索引。較長(zhǎng)的文檔我們雖然沒(méi)有完全實(shí)現(xiàn)識(shí)別和索引,但能搜十頁(yè)也比完全搜索不到好的多了。
自動(dòng)文字識(shí)別系統(tǒng)
▌圖片的渲染
對(duì)于 PDF 文件中圖片的渲染由兩種可行的方式:一個(gè)是將頁(yè)面中的圖片一張張?zhí)崛〕鰜?lái),另一個(gè)是將一頁(yè)文件當(dāng)一整張圖片來(lái)處理。這兩種方法我們都測(cè)試了,不過(guò) Dropbox 的文件預(yù)覽功能已經(jīng)有了完善的 PDF 渲染能力,所以最終我們選擇了第二個(gè)方法。這樣處理的話(huà),像 PowerPoint 或者 Post Script 這樣的文件格式,只要能支持預(yù)覽,我們就能進(jìn)行識(shí)別,而且詞與詞、段與段之間的順序不會(huì)被打亂。
我們的渲染功能是基于谷歌的 PDFium 開(kāi)發(fā)的。這其實(shí)也是 Chrome 瀏覽器所使用的 PDF 渲染引擎。渲染的過(guò)程中我們使用了并行處理來(lái)降低延遲。
▌文件圖像分類(lèi)
模型方面我們先用了 GoogLeNet 來(lái)進(jìn)行特征提取,然后用了一個(gè)線(xiàn)性分類(lèi)器來(lái)實(shí)現(xiàn)有無(wú)文字的分類(lèi)。訓(xùn)練所用的圖片有些是網(wǎng)上公開(kāi)的,有些是用戶(hù)和 Dropbox 員工提供的,一共有幾千張。
我們發(fā)現(xiàn)一開(kāi)始訓(xùn)練模型的時(shí)候準(zhǔn)確率略低,模型把天際線(xiàn)、光溜溜的墻和開(kāi)放水域這類(lèi)圖片都判斷為有文字了。其實(shí)我們?nèi)搜鄱疾惶菀卓闯鲞@些圖片有什么共同點(diǎn),不過(guò)模型認(rèn)為只要是背景比較均一,有橫線(xiàn)的就是有文字。最后是通過(guò)人工標(biāo)記和給訓(xùn)練集中加入這類(lèi)圖片才克服了這個(gè)問(wèn)題,從而把準(zhǔn)確率提上來(lái)了。
▌識(shí)別圖片的四個(gè)角
用戶(hù)上傳的圖片因?yàn)榕恼战嵌鹊脑?,一般?lái)說(shuō)都不是我們想要的矩形和直角,所以必須進(jìn)行矯正。要矯正的話(huà),就要取得圖片中文件四個(gè)角的坐標(biāo),這個(gè)功能我們也是用卷積神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)的。具體地說(shuō),就是把 Densenet-121 的輸出換成了四個(gè)角的坐標(biāo)。
訓(xùn)練這個(gè)模型用了幾百?gòu)垐D。標(biāo)記數(shù)據(jù)集的過(guò)程,需要一張一張地把文件的四個(gè)邊找出來(lái)。這項(xiàng)工作我們是在亞馬遜上眾包完成的。有的圖某個(gè)角可能壓根沒(méi)拍著,那這個(gè)角的坐標(biāo)就跑到圖片外面去了,這時(shí)候就只能靠人工腦補(bǔ)了。
為了加快速度,訓(xùn)練模型的時(shí)候用的圖片分辨率比實(shí)際的圖片分辨率低,所以輸出的坐標(biāo)也是低分辨率圖片上的坐標(biāo)。為了提高精度,我們?cè)谒膫€(gè)角附近,用高分辨率的圖片把模型重跑了一遍。這樣既提升了訓(xùn)練的速度,又能得到高精度圖片上四個(gè)角的坐標(biāo)。
▌單詞提取
這一部分以矯正過(guò)的圖片作為輸入,輸出的則是單詞的內(nèi)容和定界框。單詞就按照識(shí)別出的順序一一加入索引。如果文件超過(guò)一頁(yè),則繼續(xù)建立索引一直達(dá)到 10 頁(yè)的限制就停。
上面講的的這幾個(gè)部分組合起來(lái)看是這樣的:
圖中標(biāo)出的步驟我們來(lái)分別介紹一下:
通過(guò)檢查文件格式判斷是否含有圖片;判斷用戶(hù)權(quán)限
判斷圖片或 PDF 文件是否含有可識(shí)別的文字
判斷圖片的四個(gè)角以便進(jìn)行矯正
提取單詞
加入索引
圖中有一個(gè)我們之前沒(méi)有介紹過(guò)的 Auto-OCR lambda 模塊,這其實(shí)是一個(gè) Cape 微服務(wù)。Cape 是 Dropbox 在 16 年底推出的一個(gè)異步事件流處理框架,Dropbox 很多功能都用到了Cape。有了這個(gè) Cape 微服務(wù),當(dāng)用戶(hù)對(duì)文件進(jìn)行增改的時(shí)候文字識(shí)別功能就能自動(dòng)觸發(fā)了,也就是圖中列出來(lái)的步驟 1 到 5。
得益于 Dropbox 預(yù)覽功能所提供的基礎(chǔ)設(shè)施,這一系列從讀取文件,判斷類(lèi)型,矯正到最后識(shí)別操作的效率很高,而且這套系統(tǒng)對(duì)文件的操作(比如渲染)是進(jìn)行了緩存的,所以當(dāng)用戶(hù)上傳同一個(gè)文件不會(huì)造成系統(tǒng)資源的二次開(kāi)銷(xiāo)。增加支持的文件類(lèi)型和操作也是非常容易,只要為新的文件類(lèi)型開(kāi)發(fā)一個(gè)預(yù)覽插件就行了?,F(xiàn)在對(duì) PDF 文件的識(shí)別也是通過(guò)插件來(lái)實(shí)現(xiàn)的。
為了提供系統(tǒng)的穩(wěn)定性,我們?cè)诓寮恼{(diào)用過(guò)程中使用了指數(shù)補(bǔ)償算法并加入了隨機(jī)值。拿第一步調(diào)用的插件來(lái)說(shuō),重試之后失敗率降低了 88%。
性能優(yōu)化
剛開(kāi)始測(cè)試的時(shí)候我們發(fā)現(xiàn)所使用的機(jī)器學(xué)習(xí)模型所占的資源和帶來(lái)的延遲完全在我們能接受的范圍之外,所以必須進(jìn)行優(yōu)化。我們決定先從配置參數(shù)著手,因?yàn)槲覀儼l(fā)現(xiàn)如果模型的性能遭遇瓶頸,很多時(shí)候簡(jiǎn)單地改變配置參數(shù)就能收到很好的效果。下面我們就來(lái)舉幾個(gè)例子說(shuō)明一下。
我們的第一個(gè)改動(dòng)是關(guān)閉了 TensorFlow 的多核支持。Dropbox 系統(tǒng)并行是在 CPU 層面實(shí)現(xiàn)的。每個(gè)核只運(yùn)行一個(gè)單線(xiàn)程的程序,這樣可以避免對(duì)數(shù)據(jù)的損壞也能降低惡意軟件入侵的風(fēng)險(xiǎn)。然而,TensorFlow 默認(rèn)是開(kāi)啟多核支持的。這樣相當(dāng)于每一個(gè)核又在跑多線(xiàn)程了,由此引起的上下文切換使得系統(tǒng)吞吐量損失了約 2/3。
關(guān)閉多核支持后性能還是不夠好。所以我們又換成了支持 AVX2 指令集的 TensorFlow 并將模型和環(huán)境用 TensorFlow XLA 提前編譯成一個(gè) C++ 庫(kù)。此外我們還調(diào)整了一些隱藏層的節(jié)點(diǎn)數(shù)量。
圖像四個(gè)角坐標(biāo)和文本方向的判斷我們所采用的模型架構(gòu)是 Densenet-121。相比之前用過(guò)的 Inception-Resnet-v2 來(lái)說(shuō)速度大概快了一倍,坐標(biāo)識(shí)別的準(zhǔn)確率只是稍遜,而且是可以忽略不計(jì)的程度。
其實(shí)我們所作的這些工作都是為了加深對(duì)文件結(jié)構(gòu)和內(nèi)容的理解,讓用戶(hù)使用 Dropbox 時(shí)可以有更好的體驗(yàn)。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4812瀏覽量
103281 -
自動(dòng)識(shí)別
+關(guān)注
關(guān)注
3文章
227瀏覽量
23331 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8499瀏覽量
134394
原文標(biāo)題:Dropbox如何使用機(jī)器學(xué)習(xí)從數(shù)十億圖片中自動(dòng)提取文字
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
AI提取圖片里包含的文字信息-解決文字無(wú)法復(fù)制的痛點(diǎn)

如何實(shí)現(xiàn)串口的自動(dòng)識(shí)別
求助帖 labview自動(dòng)識(shí)別
請(qǐng)問(wèn)USB自動(dòng)識(shí)別芯片RH7901是怎樣自動(dòng)識(shí)別充電設(shè)備的?
NLPIR在文本信息提取方面的優(yōu)勢(shì)介紹
車(chē)輛自動(dòng)識(shí)別稱(chēng)重系統(tǒng)的工作原理
如何利用SPD實(shí)現(xiàn)內(nèi)存自動(dòng)識(shí)別和配置?
基于AI通用文字識(shí)別能力,檢測(cè)和識(shí)別文檔翻拍、街景翻拍等圖片中的文字
如何實(shí)現(xiàn)系統(tǒng)自動(dòng)識(shí)別并切斷電池供電的呢?
基于SAW技術(shù)的車(chē)輛自動(dòng)識(shí)別系統(tǒng)的實(shí)現(xiàn)
基于機(jī)器學(xué)習(xí)的日志自動(dòng)識(shí)別
RFID技術(shù)如何實(shí)現(xiàn)車(chē)證自動(dòng)識(shí)別

使用MATLAB編程軟件和機(jī)器視覺(jué)實(shí)現(xiàn)汽車(chē)車(chē)牌自動(dòng)識(shí)別

圖片文字識(shí)別:揭開(kāi)數(shù)字世界的神秘面紗
水位自動(dòng)識(shí)別攝像機(jī)

評(píng)論