日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

如何用Tesseract做日文OCR(c#实现)

發布時間:2024/8/26 综合教程 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 如何用Tesseract做日文OCR(c#实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  首先做一下背景介紹,Tesseract是一個開源的OCR組件,主要針對的是打印體的文字識別,對手寫的文字識別能力較差,支持多國語言(中文、英文、日文、韓文等)。是開源世界里最強的一款OCR組件。當然和世界最強的OCR工具Abbyy相比還是有一點差距,尤其在圖片質量較差時,差距還是明顯的。

  網上有很多關于如何使用這個組件的介紹,不過都是針對英文識別的。而如果是對中文或日文等方塊字進行識別,除了需要使用不同的語言包外,還要對Tesseract做一些特別的設置,否則識別率會很低,以下我就和大家分享一下我使用Tesseract對日文做OCR的一些經驗。

第一步,是要下載Tesseract組件,最簡單的方法就是使用VisualStudio的NUGet來下載。選擇第一個組件。  

第二步,下載日文語言包,由于在大陸地區無法訪問google,所以不能打開官網直接下載語言包。我給出文件的地址,可以使用迅雷下載。

http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.jpn.tar.gz

下載完成后將語言包文件解壓后放到tessdata文件夾下。

到目前為止,準備工作已經就緒,可以開始編寫代碼。

第三步,初始化Tesseract組件,代碼如下。

TesseractEngine engine = new TesseractEngine(@"tessdata文件夾路徑", "jpn", EngineMode.Default))

第四步,設置OCR參數,關于各參數的解釋,可以參照官網

Useful parameters for Japanese and Chinese

Some Japanese tesseract user found these parameters helpful for increasing tesseract-ocr (3.02) accuracy for Japanese :

Name Suggested value Description
chop_enable T Chop enable.
use_new_state_cost F Use new state cost heuristics for segmentation state evaluation
segment_segcost_rating F Incorporate segmentation cost in word rating?
enable_new_segsearch 0 Enable new segmentation search path. It could solve the problem of dividing one character to two characters
language_model_ngram_on 0 Turn on/off the use of character ngram model.
textord_force_make_prop_words F Force proportional word segmentation on all rows.
edges_max_children_per_outline 40 Max number of children inside a character outline. Increase this value if some of KANJI characters are not recognized (rejected).

以下是代碼   

engine.SetVariable("chop_enable ", "F");
engine.SetVariable("enable_new_segsearch", 0);
engine.SetVariable("use_new_state_cost ", "F");
engine.SetVariable("segment_segcost_rating", "F");
engine.SetVariable("language_model_ngram_on", 0);
engine.SetVariable("textord_force_make_prop_words", "F");
engine.SetVariable("edges_max_children_per_outline", 50);

這里面chop_enable參數與官網推薦的不太一樣,我發現按照官網的設置,會有很多文字識別不出來。

第五步,開始識別。

var page = engine.Process(p);
var testText = page.GetText();
var c=page.GetMeanConfidence();

第一行代碼返回一個Page對象,通過該對象可以獲得識別的文本,而且還可以獲得識別文本所在位置(這個在識別非固定模式文檔時非常有用,可以根據關鍵字動態查找識別字段位置)。
在例子中OCR做全文識別,但是做全文識別很多情況下識別質量一般,最好增加識別區域參數,同時將PageSegMode參數設置為PageSegMode.SingleBlock(代表多行大小相同的文字)或PageSegMode.SingleRow(代表單行大小相同的文字)。

第二行和第三行分別返回識別的文本與識別的信任度。在實際使用時我發現識別信任度不是特別有用。無論識別對錯,信任度基本在0.7左右,有些時候信任度較高,識別結果反而是錯誤的。

經過以上幾步,就可以完成日文的OCR。但要讓以上代碼成功運行,還必須要在安裝VC++運行時2012,否則會報錯。

我使用以上方法對掃描圖片進行測試,發現識別精確度還是比較高的,尤其在指定區域與PageSegMode參數后。但是日文字庫也存在一些低級失誤,如將數字“1”識別成了漢字“一”等。如果要想解決這個問題,必須要從頭訓練日文,這個工作量非常大!而這真的是Tesseract一個非常不智能的地方,應該支持在原有訓練字庫的基礎上追加訓練內容!或者在官網上提供Box文件和訓練用Tif供開發者下載。

總結

以上是生活随笔為你收集整理的如何用Tesseract做日文OCR(c#实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。