Java OCR 不产生任何输出
Posted
技术标签:
【中文标题】Java OCR 不产生任何输出【英文标题】:Java OCR isn't producing any output 【发布时间】:2014-04-10 12:33:57 【问题描述】:我正在使用这个 ocr 算法http://sourceforge.net/projects/javaocr/ 来检测图像中的数字。我尝试过使用 tesseract,但我遇到了完全相同的问题,有时它不起作用。这从来没有奏效过(java ocr)。当我使用 java ocr 时,它除了 /n 之外没有产生任何输出。
图像是全白的,数字是黑色的。图像中唯一的伪像是靠近顶部和底部边界的两条线,它们甚至不与字符产生干扰。对齐是正常的,就像打印的文本一样,不是手写的或歪斜的。
BufferedImage image2 = ImageIO.read(new File("moneyImage"+".bmp"));
ImageManipulator.show(image2, 5);
OCRScanner scanner = new OCRScanner();
String items = scanner.scan(image2, 0, 0, 0, 0, null);
System.out.println(items);
图片2显示清楚,此示例取自其他发布它的人。我没有做任何复杂的事情,对我来说为什么这不起作用是没有意义的。这是一个简单的灰度图像。
当我尝试运行独立程序(java ocr 程序)时,它可以工作并生成正确的数字作为输出。我不知道如何从我的 java 项目中提取字符以及为什么它不起作用。
我的测试图片是:
还有,这个
String lastText = null;
Tesseract instance = Tesseract.getInstance();
try
lastText = instance.doOCR(imageFile);
catch (TesseractException ex)
Logger.getLogger(ActionAbstraction.class.getName()).log(Level.SEVERE, null, ex);
绝对不会产生任何输出,即使我给出一个数字的图片,就像从 java ocr 输出的那样。它们似乎可以工作,但是当我进行实际扫描时,它们都没有输出任何东西。
另外,我使用的是 tiff 图像,正如我之前所说,字符提取工作正常。不起作用的是java代码调用图像扫描。我已经链接了适当的库(否则会产生编译器错误)
【问题讨论】:
分享 image2 怎么样(可能是imageshack?) 您是否作为服务器进程(网络应用程序)运行?可能是没有 GUI。 这似乎是一个蹩脚的开源项目,似乎没有人关心或维护了。我也找不到任何文档或示例,而且似乎(如果你能让它工作)你必须先训练你的扫描仪。 Tesseract 也好不了多少,但我可以在很多年前让它工作。我的 2c 【参考方案1】:不确定:但你不是告诉扫描仪只用这条线查看图像的左上角吗:
String items = scanner.scan(image2, 0, 0, 0, 0, null);
也许把它改成(类似的):
String items = scanner.scan(image2, 0, 0, 80, 20, null);
[将 80,20 更改为您的图像的任何宽度/高度 - 您可能可以让 Java 为您执行此操作 - 如果我没记错的话,我认为 Image 类中有一个方法]。
我从源代码的 git 克隆中得到了这个(可能是错误的)想法:
git clone git://git.code.sf.net/p/javaocr/source javaocr-source
而在“javaocr-source\core\src\main\java”目录下: 'java.net.sourceforge.javaocr.ImageScanner.java'中包含的接口定义了'scan'接口如下:
//
void scan(
Image image,
DocumentScannerListener listener,
int left,
int top,
int right,
int bottom);
//
【讨论】:
这就是这个单元测试的表现 (code.google.com/r/oscarklee-javaocr/source/browse/plugins/awt/…) 虽然我不确定它是否是兼容版本 @Leo - 你确定这是一个真正的单元测试吗?它在 Maven 的“主”目录而不是“测试”中——但假设它是某种测试——它似乎不是在尝试提取文本——所以这可能是对 0,0,0,0 图像的深思熟虑的测试正方形?,不知道。 我认为这个 ocr 库很糟糕。在他们的网站上查看 cmets。没有人再维护它了【参考方案2】:这是我为函数扫描到项目源代码中找到的javadoc:
/**
* Scan an image and return the decoded text.
* @param image The <code>Image</code> to be scanned.
* @param x1 The leftmost pixel position of the area to be scanned, or
* <code>0</code> to start scanning at the left boundary of the image.
* @param y1 The topmost pixel position of the area to be scanned, or
* <code>0</code> to start scanning at the top boundary of the image.
* @param x2 The rightmost pixel position of the area to be scanned, or
* <code>0</code> to stop scanning at the right boundary of the image.
* @param y2 The bottommost pixel position of the area to be scanned, or
* <code>0</code> to stop scanning at the bottom boundary of the image.
* @param acceptableChars An array of <code>CharacterRange</code> objects
* representing the ranges of characters which are allowed to be decoded,
* or <code>null</code> to not limit which characters can be decoded.
* @return The decoded text.
*/
所以
String items = scanner.scan(image2, 0, 0, 0, 0, null);
根据代码文档似乎没问题。但是我试过了,但事实并非如此。这是我见过的最糟糕的文档之一。
【讨论】:
以上是关于Java OCR 不产生任何输出的主要内容,如果未能解决你的问题,请参考以下文章