首先一定是要具備 Windows 系統和安裝 Microsoft Office 的工具Microsoft Office Document Imaging,這樣 PHP 就可以透過 COM 操作。
下面的程式碼範例是簡易的讀取一個 TIF (Tagged Image File Format) 檔案,並且轉成文字檔。
<?php
$MODIDocument = new COM("MODI.Document", null, CP_UTF8);
$MODIDocument->Create("modi.tif");
// tif 格式 有分頁概念,可以使用 count($MODIDocument->Images) 取得頁數。
// 範例程式程式僅使用第一頁
$MODIDocumentImage = $MODIDocument->Images[0];
// 使用繁體中文
$MODIDocumentImage->OCR(1028, false, false);
$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年一齣台灣電視劇,為普拉嘉國際意像製作的第一部連續劇,由周渝民、趙又廷、陳意涵、張鈞肓等人主演。言亥劇由曾榮獲金鐘獎最佳導演的蔡岳動執導,全劇主要以高雄市為取景地點。本劇是參考拉法葉軍購弊案改編。
看到結果~嗯~普普啦,還是有錯字,我最喜歡的公視偶像劇『我在墾丁天氣晴』和『痞子英雄』的女主角張鈞甯,竟然變成了張鈞肓 ><
您好,我有安裝了OFFICE的工具Microsoft Office Document Imaging,也可以開啟程是來做OCR,但我也想要大量辨識圖檔,所以照您的PHP程式來把他放在本機的APACHE SERVER上,也放了個MODI.tif測試圖檔,開網頁執行程式,圓圈轉了好幾下,網頁還是空白。
回覆刪除我想請問後來有完整的PHP程式可以整批的OCR轉檔嗎?
謝謝!
php的sapi不是只有apache,
回覆刪除如果用的sapi是web server通常還有com使用權限問題..沒開放權限就無法使用
依我的經驗,你比較大的可能是碰到後者..
看你需求,你只要用cli這個sapi轉就行了..