OCR是通過算法識別出圖像中的文字內容,算是圖像識別的一個分支。但是在數據管理搶救上,也非常實用。本文作者對具體的實現途徑展開了梳理總結,並對過程中存在的問題進行了分析,與大家分享。
大數據工程的第一步是獲得數據,而傳統行業、政府機構、科研院所中有大量的存量數據,數據搶救就是把這些數據數字化,一是避免數據流失,二是提高利用價值。而存量數據中包括大量珍貴的紙質數據,比如天文地理水文測量數據、試驗數據、政府公文、古舊書籍等等。
紙質數據如何搶救?這步很簡單,基本解決方法就是先掃描成電子版進行存儲。但光是掃描存儲就夠了嗎?我覺得是不夠的。
像前邊所説的,數據搶救的目的一是避免數據流失,二是提高利用價值,掃描存儲僅僅解決了第一個問題避免數據流失,但並沒有很好的提高數據的利用價值。紙質數據的價值大部分在於文檔的內容,僅僅把紙質文檔電子化仍然不能對內容進行進一步的檢索、分析。
所以我們把產品的目標聚焦在了“提高數據利用率”上。接下來就是對目標進行細化拆解。關於如何提高利用率,也就是數據如何應用,我是這樣思考的,一是從大數據角度看,如何利用統計分析等手段提高數據整體的價值;二是從單份文檔角度方面看,如何讓單份文檔更有價值,讓有興趣的用户更容易找到它,讓用户找到這份文檔後能快速瞭解其內容。
通過上邊的分析,單份數據利用的方式基本確定為【全文檢索】和【內容分析】,而這兩種利用方法都需要對紙質文檔中的文字進一步進行處理,這就需要我們數據搶救的好夥伴:OCR上場了。
小李所在的單位有大量多年積累下來的文書,有些年代久遠的已經出現了破損遺失的情況,藉着大數據工程建設的契機,單位決定開展歷史數據搶救工作。
工作的第一步就是整理文書文檔,然後掃描電子化,每掃描完一份文件小李就在頁面上預覽確認沒有問題後提交,之後系統對文檔進行OCR識別,識別完成後小李在頁面上可以預覽查看識別結果,發現位置識別不準或者文字識別有誤可以進行調整,最後保存調整結果即可。
小李辛辛苦苦做完的工作體現在哪裏呢?
同事小陳最近做的一項工作需要查閲往年數據A的相關記錄,小陳登錄系統直接搜索“數據A”,搜索結果顯示了所以包含“數據A”的文檔。小陳依次點擊搜索結果就可以查看文檔的摘要和關鍵詞,從而判斷該文檔是否對他有用。
大概業務的流程就是下圖這樣,我們這篇主要介紹小李的工作部分。
(1)數據採集
數據採集主要依賴於掃描紙質文檔的掃描儀,所以這一部分是一要考慮掃描儀本身的性能,二要考慮掃描儀與整個系統的集成。
考慮到紙質數據量大、裝訂方式多樣的特點,掃描儀最好滿足快速掃描、不拆書、儘量自動化的要求。調研了市面上成熟的商用掃描儀,符合要求的掃描儀大概有幾類:
系統與掃描儀集成方面,就涉及到掃描好的文件怎麼存儲到系統?大概有兩種方案:
1)我們平時用的掃描儀,一般是連接電腦(客户端),把掃描好的文件存在本地,然後由用户把文件手動上傳系統
2)網絡掃描儀直接通過局域網連接服務器,掃描好的文件直接存儲在服務器指定位置。這種網絡掃描儀的方案需要掃描儀支持TWAIN或者其他SDK、api,好處是多個用户可以共用掃描儀,操作步驟也要簡化很多
結合掃描儀性能、系統集成和成本角度考慮,我們選擇了一款支持TWAIN接口的手動翻頁掃描儀作為數據搶救系統中硬件支撐。
(2) OCR識別
首先我們需要對OCR的算法有個大概的瞭解,可以參考OCR在資產管理系統的應用。
用於數據搶救的OCR和用於資產標籤識別的OCR還是有一點區別的,資產標籤識別中的識別對象是【自然環境】中的【印刷文字】,而數據搶救對象是【文檔圖片】中的【印刷文字】。
但總體來説處理的流程還是預處理-文字檢測-文字識別,只不過對紙質文檔中複雜的排版(圖片、表格、文字、頁碼、公式混排等等)的文字檢測換了種説法叫做版面分析(layout analysis),做的事情還是差不多的,除了負責檢測出文字的位置外,也要同時確圖表等其他要素的位置。
1)預處理:
預處理的目的主要是提高圖像質量,一般用傳統的圖像處理手段就可以完成,現在很多掃描儀也會把這部分做在裏邊,比如自動糾偏、去黑邊等,如果可以滿足要求,預處理部分放在數據採集時由掃描儀完成也是可以的。
2)版面分析:
先看下直觀的看下版面分析的預期效果。關於版面分析這塊我們需要確認的事情主要有3件:一是檢測的目標有哪些,二是目前算法的成熟度,三是性能方面的要求有哪些。
確定檢測對象:畢竟版面分析是個檢測問題,和檢測圖片中的貓狗沒有本質區別,所以我們要先確定版面分析需要識別什麼東西。在數據搶救中我們關心什麼呢?首先文字是最重要的,第二為了定位圖片和表格,我們也需要圖片、表格的位置以及圖注、表名,有了這些信息就可以形成類似索引目錄,方便查找。所以初步確定,版面識別需要識別出文字、圖片、表格、圖注、表名五類對象。
算法成熟度:雖然傳統的圖像識別也可以實現簡單的版面分析任務,但對上圖這種非常複雜的版面分析經過調研比較靠譜的方法還是上深度學習。可以做版面分析的深度學習算法主要是圖像檢測一系列的,比如yolo、fastRCNN,這篇文章中的大佬是用MaskRCNN實現的。所以版面分析問題已經有不少研究基礎了,但實際落地的應用可能還不是很多,其中需要優化的工作肯定還有不少。
性能要求:算法的選擇當然要考慮實際中對硬件性能、識別速度、識別精度、召回率的要求。
c)文字識別:
文字識別部分相對來説也比較成熟,目前兩大主流技術是 CRNN OCR 和 attention OCR。在我們的整體流程中,需要對版面識別後的文字、圖注、表名區域進行分別識別即可。
上邊技術實現途徑的調研主要為了證明我們設計的功能是在技術上可實現的,避免出現設計出無法實現的功能的尷尬情況。
正如前邊所説的,我們這裏的功能只關注紙質數據搶救工作沒有涉及到數據應用的部分,所以從掃描文件到最後人工調整OCR識別結果,整個紙質數據搶救的功能就算完成了。對用户來説,相較於只掃描文件並保存,多出的操作步驟就是查看識別結果並調整的部分。
(OCR識別結果查看)
(OCR識別結果調整)
OCR相關的兩個頁面主要是查看識別結果和調整識別結果。查看頁面主要包括預覽文檔、用線框表示圖表區域和圖表標題、顯示OCR文字識別結果。點擊【編輯】跳轉到調整頁面,調整頁面以每頁為單位顯示,圖表框可拖拽調整、文字變為可編輯狀態。
通過需求分析我們發現在數據搶救中的確存在OCR應用的必要性,然後從技術實現的角度進行調研驗證需求是否是可實現的,最後梳理整個功能流程再加上每個功能點的詳細説明/原型設計功能基本就齊活了~
本文由 @LCC 原創發佈於人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash,基於CC0協議。