2011-09-27 40 views
0

使用sourceforge中的javaocr框架。嘗試掃描圖像中的字母,並訓練系統識別它們。字母的OCR掃描。加載培訓信函失敗

加載教練時,遇到了這個異常:

java.io.IOException: Expected to decode 26 characters but actually decoded 33 characters in training: /Developer/MAckan/bin/LETTERS/trainLetters.PNG 
    at net.sourceforge.javaocr.ocrPlugins.mseOCR.TrainingImageLoader.load(TrainingImageLoader.java:111) 

我的代碼是這樣的:

loader.load(this,ClassLoader.getSystemResource("LETTERS/trainLetters.PNG").getPath(), new CharacterRange('A', 'Z'), images); 

的另一個問題是如何得到它培養的斯堪的納維亞字母。如果我輸入範圍A-Ö預計有150個字符。

後來,當我掃描我嘗試的時候掃描圖像中的行:

scanner.addTrainingImages(images); 

     final CharacterRange[] cr = new CharacterRange[1]; 
     cr[0] = new CharacterRange('A', 'Z'); 

     // get the first line of letters 
     final int x1 = 0; 
     final int y1 = 130; 
     final int x2 = 640; 
     final int y2 = 170; 


     for (int i = 0; i < 15; i++) { 
     final String text = scanner.scan(boardImage, x1, y1 + (i * 40), x2, 
        y2 + (i * 40), cr); 
      System.out.println("scanned " + text); 
     } 

實際上我得到的輸出,但不是我期望的輸出... 任何人有與javaocr經驗框架?

更新: 解決了培訓問題。訓練圖像缺少一些字符,斯堪的納維亞語不支持(?)。仍然得到奇怪的輸出。

Update2: 解決整個問題,而不是寫我自己的比較。我對圖像進行了一些處理(減少了顏色和透明度)並逐個像素地進行比較,並對alafabet圖像返回了差異。最低差異「勝利」。適用於這種特殊情況,但我仍然對OCR運行感興趣。

謝謝。

/A

+0

錯誤消息_「預期解碼26個字符,但實際上解碼訓練33個字符」 _似乎不言自明給我。您的輸入包含ASCII範圍「a-z」之外的字母,否? –

+0

我設法獲得訓練圖像加載,沒有任何字符超出範圍,但錯過了一個。仍然給掃描輸出奇怪。第一行預計像「NOT」,但得到:「PIQIZ」。我需要更好的培訓信嗎?現在我正在使用日內瓦31字體在Gimp的白色背景上製作的字符A-Z。 –

+0

好的,但現在你的問題已經改變了,對吧?既然你現在不使用'A-Z'外的字母,你沒有得到任何異常,對嗎? –

回答

0

解決整個問題,而不是寫自己的比較。我對圖像進行了一些處理(減少了顏色和透明度)並逐個像素地進行比較,並對alafabet圖像返回了差異。最低差異「勝利」。適用於這種特殊情況,但我仍然對OCR運行感興趣。

感謝大家的貢獻。

/A

0

那麼,你會不會喜歡我的答案,但在這裏它是:Javaocr是一種蹩腳和記錄非常糟糕。我嘗試了一些來自演示src但在其他PNG文件中的代碼,而不是那些提供的代碼,它並不能真正識別那麼多。

下面是一個實際工作的庫:http://asprise.com/product/ocr/download.php?lang=java。然而,這並不是免費的,如果你查看許可證價格,它真的不是免費的,但你去了。

選項2將嘗試谷歌全新的在線ocr服務:http://googlesystem.blogspot.com/2009/09/google-docs-ocr.html。我沒有自己嘗試過,但是你應該至少比使用Java更好的支持...

+0

謝謝,但我需要這是我自己的代碼的一部分。 –