星期六, 12月 05, 2009

OCR

這個範例使用 Microsoft Office 內的工具 Microsoft Office Document Imaging,他有 OCR 功能。所以想應用在大量掃描文件,並且撰寫批次轉成文件檔的可以參考看看。

首先一定是要具備 Windows 系統和安裝 Microsoft Office 的工具Microsoft Office Document Imaging,這樣 PHP 就可以透過 COM 操作。

下面的程式碼範例是簡易的讀取一個 TIF (Tagged Image File Format) 檔案,並且轉成文字檔。
<?php
$MODIDocument 
= new COM("MODI.Document"nullCP_UTF8);
$MODIDocument->Create("modi.tif");
// tif 格式 有分頁概念,可以使用 count($MODIDocument->Images) 取得頁數。
// 範例程式程式僅使用第一頁
$MODIDocumentImage $MODIDocument->Images[0];
// 使用繁體中文
$MODIDocumentImage->OCR(1028falsefalse);
$MODIDocumentWords $MODIDocumentImage->Layout->Words;
// 將辨識出的字元將之串成一個字串
foreach ($MODIDocumentWords as $WordItem) {
       
$strResult .= $WordItem->Text;
}
echo 
$strResult;
$MODIDocument->Close(false);
?>


至於Microsoft Office Document Imaging提供多少功能,可以參考這裡。

程式碼範例中,在 new COM 的第三個參數會影響輸出的文字編碼,而我在程式碼範例設成 CP_UTF8,那麼在最後 echo $strResult的字串會是 UTF-8 編碼。若沒設這個參數,那麼就會使用系統的預設編碼,如繁體中文版的作業系統就會輸出 CP950編碼方式。
而在掃描的動作中 $MODIDocumentImage->OCR(1028, false, false); 參數 1028 為繁體中文的語系常數值,語系的參數可以參閱Microsoft Office Document Imaging Enumerated Constants => MiLANGUAGES 。簡體中文的就找簡體中文的常數值。

部落格不能上傳 .TIF 檔格式,所以我上傳轉 PNG 後的 TIF 畫面。






上傳的檔案因為部落格的緣故,圖片顯示有點"走鐘"了。只要點進去就可以看到原始圖。若是下載範例圖檔,請將之在轉為 TIF 格式。


輸出的結果:
《痞子英雄》是2009年一齣台灣電視劇,為普拉嘉國際意像製作的第一部連續劇,由周渝民、趙又廷、陳意涵、張鈞肓等人主演。言亥劇由曾榮獲金鐘獎最佳導演的蔡岳動執導,全劇主要以高雄市為取景地點。本劇是參考拉法葉軍購弊案改編。


看到結果~嗯~普普啦,還是有錯字,我最喜歡的公視偶像劇『我在墾丁天氣晴』和『痞子英雄』的女主角張鈞甯,竟然變成了張鈞肓 ><

2 則留言:

  1. 您好,我有安裝了OFFICE的工具Microsoft Office Document Imaging,也可以開啟程是來做OCR,但我也想要大量辨識圖檔,所以照您的PHP程式來把他放在本機的APACHE SERVER上,也放了個MODI.tif測試圖檔,開網頁執行程式,圓圈轉了好幾下,網頁還是空白。
    我想請問後來有完整的PHP程式可以整批的OCR轉檔嗎?
    謝謝!

    回覆刪除
  2. php的sapi不是只有apache,
    如果用的sapi是web server通常還有com使用權限問題..沒開放權限就無法使用
    依我的經驗,你比較大的可能是碰到後者..

    看你需求,你只要用cli這個sapi轉就行了..

    回覆刪除

我的意見