tesseract-ocr識別中文掃描圖片實例講解

本文參考http://blog.csdn.net/zhoushuyan/archive/2010/10/18/5948289.aspx#1567946實現,在這裏感謝該文章的作者。

當我瀏覽http://code.google.com/p/tesseract-ocr並下載了幾個文件下來之後頓時感到一頭霧水,不知該如何下手。網上看到有人在linux操作系統下的實現,

 如:

   利用開源程序(ImageMagick+tesseract-ocr)實現圖像驗證碼識別 

  但卻很少看到在windows下的相關文章介紹。

  接下來我將一步步講述如何採用tesseract-ocr識別含有中文的圖片。

1、下載tesseract-ocr(注意3.0版本之後才支持中文的識別)

      tesseract-ocr-setup-3.00.exe     

      chi_sim.traineddata.gz   

2、安裝tesseract-ocr

      解壓縮,雙擊 tesseract-ocr-setup-3.00.exe 即可根據提示一步步安裝,本人安裝的目錄是:D:/Program Files/Tesseract-OCR

      在該目錄下可看到tesseract.exe文件,這就是我們後面程序中會調用到的運行進程。

3、自定義安裝語言包

      D:/Program Files/Tesseract-OCR目錄下找到/tessdata目錄,其是用來存放語言包,可把 chi_sim.traineddata.gz   解壓縮之後的chi_sim.traineddata文件複製到該目錄下即可。

4、編寫測試代碼

        在編寫代碼之前下載兩個jar包:jai_imageio-1.1-alpha.jar、swingx-1.0.jar,可在www.findjar.com 網站上去下載。

    

    

      

 

     

     

      通過本人的測試對於中文的識別雖然不是很完美,至少其可支持了,但最大的缺點就是速度慢。中文本來就很複雜,而且其語言包就達到50多M,和英文語言包比起來真是..............

       測試圖片,可右擊“圖片另存爲”

      

     解析輸出結果:

一、 引 孟4
1. 1 從體驗經濟到體驗設計駟
隨着社會生產力發展水平的提高和人類需求層次的升級, 體驗經濟也就成
爲了經濟發展的必然趨勢。 體驗經濟 日 漸顯現, 出現了服務於它的體驗設計。 、
設計是創新的重要組成部分。 茌強調 目 主創新的六環i競下, 申國的企業應
該兗分關注體驗設計的新趨勢‘。體驗設計的理論正茌成爲現代企業開發產品和
服務頂 目 的重要依據。 現階段, IT 領域很早就注意到了這一點, 百度、 騰訊、
支付寶、 阿里巴巴等着屬設有專門的用戶體驗部, 爲其產品和服務增加附加價值,
也更六程度她讓用戶滿意, 最終荻得了最佳企業效益。 、
同時7 隨看現代產品設計思想的成熟, 產品設計也越來越聚焦於人本身一
7人的存茌, 人的需要7 持別是人的情感需要。 設計與人, 人與設計, 設計是
否可以有長遠意義, 是否可以印證人的真買存茌, 是否可以幫助人們理解 目 己,
認識世界。 這個問題己偏 同於哲學, 但卻確買是設計這種文化形式的 內茌訴求。
越來越多的產品遍過設計, 茌與人交互的過程申7 使人產生愉悅的體驗, 並茌
這個體驗的後期, 讓人產生反思, 遍過反思得以認識自 己7 發展自 己。 找想這
點是設計成爲一種優勢文化, 而所要肩 負 的必要責任。 ~

 

測試中發現的幾個注意點: 

    1、若是一份英文文檔其對英文字母o絕大部分會識別爲數字0。所以若是英文和數字的文檔,最好不要加入中文語言包,而是引入eng.traineddata語言包到D:/Program Files/Tesseract-OCR/tessdata目錄下。

      看到OCR 類31-32行代碼

       cmd.add("chi_sim");
       //cmd.add("eng");

        去掉  //cmd.add("eng");前的註釋,但記得在cmd.add("chi_sim");前加上註釋哦,不然你就看不到效果了哦。

 

   2、測試中還發現一個問題,有時候在目錄下已經生成臨時文件並且識別出的文字寫入到output.txt,但是在int w = process.waitFor();則阻塞了停止運行再也沒有反應了,以致控制檯始終沒有打印出文字。

       解析(參考):剛開始想到直接去掉這個語句算了,但是運行的時候會報運行錯誤。最後在 http://www.cnblogs.com/xxpal/articles/824963.html看到下面一段文字說明:在Windows平臺上,運行被調用程序的DOS窗口在程序執行完畢後往往並不會自動關閉,從而導致Java應用程序阻塞在waitfor()語句。導致該現象的一個可能的原因是,該可執行程序的標準輸出比較多,而運行窗口的標準輸出緩衝區不夠大。解決的辦法是,利用Java中Process類提供的方法讓Java虛擬機截獲被調用程序的DOS運行窗口的標準輸出,在waitfor()命令之前讀出窗口的標準輸出緩衝區中的內容。

      解決辦法:在int w = process.waitFor();代碼行前面加上

      String s;
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
      while((s=bufferedReader.readLine()) != null);

 

      int w = process.waitFor();

 

      再次運行試試看吧。

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章