使用sourceforge的javaocr框架。尝试扫描图像中的字母,并训练系统识别它们。
加载培训师时遇到此异常:
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 :(得分:0)
好吧,你不会喜欢我的答案,但这里是:Javaocr有点糟糕,而且记录很差。我已经尝试了一些来自demo src的代码但是在其他PNG文件上提供的代码并没有真正认识到这一点。
这是一个实际工作的图书馆:http://asprise.com/product/ocr/download.php?lang=java。然而,它并不是免费的,如果您查看许可证价格,它真的不是免费的,但是你去了。
选项2将尝试使用Google全新的在线ocr服务:http://googlesystem.blogspot.com/2009/09/google-docs-ocr.html。我自己没有尝试过,但你应该得到比Java ocr更好的支持......
答案 1 :(得分:0)
通过编写我自己的比较来解决整个问题。我对图像进行了一些操作(减少了颜色和透明度)并逐个像素地进行了比较并返回了对alafabet图像的差异。最低差异“赢”。适用于这种特殊情况,但我仍然有兴趣让OCR运行。
感谢大家的贡献。
/ A