iText - OCR 截圖識字新版:重寫算法,段落識別更精準

在介紹新版前,稍稍解釋下背景知識。html

OCR 服務已經識別出文字了,iText 還要作什麼?

iText 發佈後,受到不少朋友的歡迎和好評,解決了諸如掃描版 PDF 沒法複製等問題。算法

不過,也有一些朋友有些誤解,以爲 iText 僅僅是調用了 OCR 服務,是個殼而已。其實,並不盡然bash

雖然,我以爲用戶並不須要知道這些軟件背後的故事,只要軟件好用便可。不過看來,既然有誤解、有好奇,我仍是簡單說起一些吧。微信

OCR 服務識別 後,獲得的是這樣的結果:各文字片段及其位置。app

但,若是根據這些信息還原出天然語境下的段落?這是很難的。測試

好比,對於下面這張圖:優化

OCR 識別出來的結果是相似這樣的(爲了方便示意,我在各行間額外加了空行):spa

3.1新用戶引導

這事的矛盾之處在於:新用戶和老用戶的矛盾。

進一步說,我追求程序的簡潔。尤爲是在用戶對 itext熟悉以後,並不須要程序有過多的描述。好比,文字按

鈕能夠被圖標按鈕取代,用界面上根本看不到的快捷鍵進行操做,等等。可問題是,熟悉是須要一個過程,新

用戶須要屢次操做後,才能掌握這些甚至有些晦澀的技巧。沒有新用戶,又何來老用戶?

這兩者的矛盾,怎麼解決呢?
複製代碼

你可能以爲,這沒什麼呀,我本身手動把多餘的換行符刪掉不就能夠了?你說的對。不過,這樣的體驗並不爽。.net

爲了讓你用的爽、少了這步手動操做,我本身試着列出常見的段落分佈,分析其中的位置規律,實現相應的識別段落的算法。3d

目前來看,效果仍是能夠的:

3.1 新用戶引導

這事的矛盾之處在於:新用戶和老用戶的矛盾。

進一步說,我追求程序的簡潔。尤爲是在用戶對 iText 熟悉以後,並不須要程序有過多的描述。好比,文字按鈕能夠被圖標按鈕取代,用界面上根本看不到的快捷鍵進行操做,等等。可問題是,熟悉是須要一個過程,新用戶須要屢次操做後,才能掌握這些甚至有些晦澀的技巧。沒有新用戶,又何來老用戶?

這兩者的矛盾,怎麼解決呢?
複製代碼

**注:以上是 iText 識別並優化後的結果,未加手工編輯;**其中的標點符號也已修正。

iText 初版發佈後,收到用戶反饋的一些圖片,一些段落的識別有問題。因而,我花了不知道幾個小時,重寫了段落識別相關的算法。目前,對於中英文混排,在使用騰訊服務時,段落識別的效果已經很好了。

不過,並不完美。主要是在一些場景下,除非結合語義識別,不然是沒法僅根據位置信息來劃分段落的。若是你發現有問題的圖,歡迎發給我,我來優化算法。

下面給出一些典型的含段落的圖,你們能夠本身試試。

圖 1:ws4.sinaimg.cn/large/006tK…

圖 2:ws1.sinaimg.cn/large/006tK…

識別後的文本優化

另外,段落識別只是對 OCR 服務優化的一部分,還有文本的優化,好比中英文之間須要增長空格等等。

若是說段落識別很麻煩,文本優化則更多麻煩,根本的緣由在於:須要對內容進行識別。好比:

  • 英文段落首字母大寫,這規則沒錯吧,但對於 "iPhone is a good phone." 這樣的狀況,iPhone 是特定詞彙,i 不該該大寫。
  • 中文文字後的 '.' 應該使用全角的 "。",這規則也沒錯吧,但對於『今每天氣真熱啊...』,明顯又不該該替換;亦或是 JSON 數據『"name": "張飛"』中的 " 也不該該被替換。
  • 以及其餘無數多的例子。

沒辦法,只能有所取捨。目前,iText 主要完成了這些部分的優化:

  • 自動識別段落
  • 中文環境使用全角標點符號
  • 中文與英文字母、數字間增長空格
  • 刪除中文字符間、英文字符與標點符號間的多餘空格
  • 英文首字母大寫

手動選擇 OCR 服務

目前,若是你在國內使用 iText,默認使用的是騰訊的服務;國外則使用 Google.

若是你有 Google 信仰、或者須要識別日文等其餘語言,能夠 右擊 iText 菜單欄圖標,手動選擇使用騰訊或 Google OCR 服務

不過,從實測和目前優化的狀況來看,中文仍是建議使用騰訊;你們能夠自行測試。

下載

新版 iText 已上架 Mac App Store,點擊下載

每個月可免費識別 20 次,訂閱 iText 高級版便可無限次識別。高級版限時 6 折優惠:¥3/月、¥30/年,持續至 12.12

若是你以爲 iText 還不錯,還請幫忙 在 App Store 評論;若是你以爲 iText 還能夠改進,歡迎:

相關文章
相關標籤/搜索