1. 程式人生 > 其它 >用MODI做OCR並將結果傳送到WORD

用MODI做OCR並將結果傳送到WORD

作者:馬健
郵箱:[email protected]
主頁:http://www.comicer.com/stronghorse
釋出:2022.05.29

一、相關問題及解答

Q:MODI是什麼?
A:MODI是Microsoft Office Document Imaging的簡稱,是微軟在Office 2003、2007中提供的一套OCR工具元件,用於將掃描影象檔案或傳真檔案識別成可編輯的文字。從Office 2010起,OCR功能轉移至OneNote中,因此不再提供MODI元件。但使用從Office 2007中提取的MODI精簡版,或微軟官方提供的免費版SharePointDesigner安裝包單獨安裝MODI,均能與後續版本的Offcie共存,測試過從Office 2010到Office 2019的各版本。

Q:有了Acrobat、Abbyy等軟體,為什麼還要用MODI做OCR?
A:如果是OCR單頁影象,其實可供使用的工具很多,有線上的,也有離線的。但如果是要OCR整本書,可供使用的軟體就少得多。這些工具需要解決以下問題:

  1. 整本書以什麼檔案格式為載體?Acrobat、Abbyy都是以PDF為載體,MODI以多頁TIFF和MDI檔案為載體。多頁TIFF還好說,MDI檔案格式在Office 2007之後就成為絕響。
  2. OCR結果以什麼格式存放?Acrobat、Abbyy都是以PDF為載體,OCR結果也就放在PDF中。MODI可以把OCR結果封裝到多頁TIFF或MDI檔案中,也可以把結果傳送到WORD中——這是我最喜歡的功能,也是我一直折騰MODI的動力。

PDF中的文字有一個毛病:有文字,無排版。即PDF中的文字最多是按行合併,但不會把行合併成段落,這樣的文字匯出、複製到WORD中,不排版根本沒法用,手工排版又太累。但MODI傳送到WORD中的OCR結果是經過排版(段落合併)的,雖然排版效果有時候也不太靠譜,但大多數情況下還是可用的,至少可以省掉很多事情。

Q:現在提供的精簡版MODI,與以前提供的MODI OCR引擎有什麼關係?
A:以前我曾在我的網盤上提供過從Office 2007 SP3中提取的支援21種語言OCR的OCR引擎,但引擎畢竟只是引擎,它不含使用者介面,所以只能被其他軟體工具所呼叫,例如DjVuTou、FreePic2Pdf、IdxSubOcr、Pdg2Pic、UnicorViewer等。但這次提供的精簡版MODI包含GUI使用者介面,可以直接對多頁TIFF進行OCR,並將結果傳送到WORD。另外:

  1. 精簡版MODI中已經含了21種語言的OCR引擎,所以安裝了精簡版MODI後,可以不再安裝MODI OCR引擎,即可在DjVuTou、FreePic2Pdf、IdxSubOcr、Pdg2Pic、UnicorViewer等軟體中執行OCR功能。
  2. 以前封裝的MODI OCR引擎在Win7、Win10下,要求呼叫程式必須以管理員許可權執行,否則可能OCR失敗。這次封裝MODI精簡版已經解決了這個問題,所以如果安裝的是精簡版MODI或新封裝的MODI OCR引擎,將不再要求呼叫MODI OCR引擎的程式必須以管理員許可權執行。

Q:精簡版MODI與原版MODI相比,有什麼區別?
A:與原版MODI相比最大的區別是“精簡”:以簡體中文SharePointDesigner安裝包為例,只安裝MODI(從本機執行全部程式,含虛擬列印驅動)、簡體中文校對工具_光學字元識別模組(OCR)、英語校對工具_光學字元識別模組(OCR),檔案總長度704 MB,且只能OCR簡體中文、英語兩種語言。而簡體中文版的精簡版MODI安裝後文件總長度僅86.2 MB,即完整版的檔案長度是精簡版的8倍還多,且精簡版能OCR 21種而不是區區兩種語言。另外精簡版還精簡掉了以下東東:

  1. MDI格式印表機(MODI Writer)。眾所周知,Office 2007只有32位版,Office 2010才有64位版,所以這個列印驅動在原始官方安裝包中就只有32位版,在64位Windows下安裝的時候也不含這個印表機。現在誰還在用32位版Windows的請站出來讓我瞻仰一下?
  2. 匯入為MDI格式。這個依賴於MDI印表機,沒有印表機也就沒有什麼意義。
  3. 用掃描器掃描成多頁TIFF或MDI檔案。我目前沒有掃描器,沒法測試這個功能,不如直接幹掉。不過有掃描器的時候我更習慣使用掃描器自帶的軟體,所以沒有就沒有吧。

二、安裝MODI,準備OCR

安裝方法一:通過封裝好的安裝包進行安裝,適合普通、不喜折騰的使用者

如果打算安裝精簡版,從我的網盤下載精簡版安裝包,雙擊執行,選擇語言後就是一鍵安裝,安裝完直接支援21種語言的OCR。

如果對我封裝的精簡版表示信不過,也可以到我的網盤下載來自微軟官網的SharePointDesigner安裝包,用那個安裝MODI,在微軟官網上有圖文並茂的完整安裝步驟說明:
http://support.microsoft.com/kb/982760/

安裝方法二:通過批處理安裝,適合程式設計師或者不折騰就不舒服斯基的使用者

請從我的網盤下載批處理版安裝zip包,解壓後按照說明檔案的說明執行批處理進行安裝。看得懂安裝批處理,就能知道具體的安裝過程,因此對於程式設計師而言如果自己的程式呼叫了MODI引擎,就可以把MODI引擎照此封裝到自己的安裝包中,與自己的軟體一起發行。

三、用MODI做OCR並將結果傳送到WORD

OCR之前先要準備好需要OCR的影象檔案。MODI支援多頁TIFF和MDI兩種格式,如果你使用的是32位版Windows,或者是32位版Windows(如XP)虛擬機器,可以選擇用SharePointDesigner安裝完整版,含MODI Writer印表機,然後就可以把需要OCR的影象列印到MODI Writer印表機,形成MDI文件。

如果用的是64位Windows,就只能準備多頁TIFF。我的準備步驟是:

  1. 用ComicEnhancerPro(CEP)處理需要OCR的影象,顏色選“純黑白”,存為單頁TIFF。
  2. 用TiffToy把單頁TIFF合併成多頁TIFF。

理論上說如果省略第1步,直接把JPG、PNG等檔案用TiffToy合併成多頁TIFF,也可以在MODI裡做OCR。但所有的OCR操作均只針對二值化(純黑白)影象,所以這樣做其實就是由MODI自己在內部做二值化工作,但講真我絕對不信MODI的二值化能做到CEP的程度,所以我寧願自己在CEP裡處理,就不麻煩MODI了。

準備好需要OCR的多頁TIFF或MDI檔案後,就可以開始OCR:

  1. 執行MSPVIEW,啟動MODI使用者介面。如果安裝的是精簡版MODI,會在桌面上建立MSPVIEW圖示,雙擊即可執行,或者從開始選單的MODI選單組中選擇MSPVIEW執行,注意在選單組裡如果不小心點了uninstall就變成刪除MODI了。如果是從SharePointDesigner安裝的MODI完整版,則在開始選單中點選“Micorsoft Office -> Micorsoft Office工具 -> Microsoft Office Document Imaging”選單項執行。
  2. 點選工具條最左側的“開啟”按鈕,開啟需要OCR的多頁TIFF或MDI檔案。
  3. 如果有必要,點選“工具 -> 選項”選單,在OCR頁籤中選擇OCR語言。該頁籤中的“自動旋轉”、“自動拉伸”這兩個選項一般也要去掉勾選,否則影象可能莫名其妙就被旋轉了。該頁籤中的選項會被記錄到登錄檔裡,所以選擇過一次以後,後續OCR都會自動按照此選項操作。
  4. 點選工具條上的“將文字傳送到WORD”按鈕,或點選“工具 -> 將文字傳送到WORD...”選單項,把“預設資料夾”改成你希望存放結果檔案的資料夾,點選“確定”按鈕。
  5. 彈出提示“Microsoft Office Document Imaging 必須在您執行此操作前識別該文件中的文字(OCR)。這可能需要一些時間。”,點選“確定”按鈕。等待OCR結束,會自動開啟WORD並調入結果檔案。如果電腦或虛擬機器裡沒有裝WORD,則會提示“無法啟動 Microsoft Word。請檢查該計算機上是否已安裝該程式並設定正確。”,但不影響結果檔案的生成。
  6. 生成的結果檔案是html檔案,就放在所選的“預設資料夾”下。如果其中有插圖,會單獨建立一個子資料夾存放插圖。不過一般我都是直接在WORD裡另存為文字檔案或WORD檔案,方便校對。

四、用MODI做OCR的一些限制

我曾經在《用MODI OCR 21種語言》裡說過,MODI支援的亞洲語言包括簡體、繁體、日文、朝鮮語,這4種語言的OCR引擎都由清華文通(Tsinghua Wintone)出品。清華文通的其他產品我沒用過,但MODI中的中日韓OCR引擎卻存在下列問題,使用時務必注意:

  1. 如果最終的識別結果不足8個漢字,則會返回OCR結果為空。IdxSubOcr、UnicorViewer等軟體對此的解決辦法是“拼圖”,即把需要識別的影象重複排列,或者多個需要OCR的影象拼接在一起OCR,確保OCR結果不少於8個漢字。
  2. 如果需要識別的影象中含有插圖、表格,則OCR引擎會變得極不穩定,一言不合就死給你看。在DjVuTou、FreePic2Pdf、Pdg2Pic、UnicorViewer等軟體中分兩個部分解決這個問題,第一是在OCR之前先對影象進行預處理,即這些軟體介面中“去掉大於頁面尺寸1/n的圖表”選項。預處理雖然不能杜絕OCR引擎故障,但可以大大降低故障出現的概率。第二是把OCR功能放到獨立的程序中,即MODI_Engine.exe,其他軟體通過程序間通訊(IPC)呼叫它,它再呼叫MODI,如果MODI引擎掛了,掛的也是MODI_Engine.exe程序,不是呼叫MODI_Engine.exe的程序,這就是程式設計師經常說的“執行緒是不安全的,程序是”。
  3. OCR過程中存在累積性的資源洩露,即連續OCR到300多頁後,就可能出各種么蛾子。因此在TiffToy的“檔案合併”功能中,預設情況下是每300頁合併成一個多頁TIFF檔案,一次就OCR這麼多。如果是自己寫的軟體呼叫MODI,則最好是用上面的方法進行解決,即每OCR 300頁左右,就重啟一次MODI_Engine.exe程序。
  4. MODI只有32位版,不能直接被64位應用所呼叫。這個也是用上面的方法,IPC可以在32位和64位軟體之間通訊。

儘管存在上面各種問題,但MODI,尤其是MODI引擎仍然是目前能找到的最好的免費離線版OCR引擎。畢竟是商業級OCR引擎,tesseract之流拍馬也追不上。

(完)