我有一个使用泽西岛构建的REST via服务,它通过Tess4J绑定使用Tesseract进行OCR (光学字符识别)。现在,Tess4J库希望您向它发送一个图像文件(png、jpg、tif等),但是经过泽西处理,我得到了一个包含图像的InputStream。
如何将此InputStream转换为Tesseract将识别的文件类型?我试过以下几种方法:
import org.apache.commons.io.IOUtils;
.....
private static File stream2file (InputStream in) throws IOException {
final File tempFile = File.createTempFile("stream2file", ".tmp");
tempFile.deleteOnExit();
try (FileOutputStream out = new FileOutputStream(tempFile)) {
IOUtils.copy(in, out);
}
return tempFile;
}
但是,Tesseract库抛出一个异常,表示它不接受我发送的文件类型(在本例中为“tmp”)。我尝试过将那个小的'tmp‘更改为'tif’和其他受支持的文件类型,但是这只是产生了相同的结果,所以我显然遗漏了一些东西。
那么,我如何获得一个InputStream,转换它,并将它作为它所期望的受支持的文件类型之一转发给Tesseract?
发布于 2014-03-28 04:14:20
临时文件的文件扩展名必须与原始输入图像文件的扩展名匹配。
除了File
类型之外,Tess4J还接受BufferedImage
作为输入。只需将输入流转换为它,如下所示:
BufferedImage image = ImageIO.read(is);
发布于 2014-11-23 23:48:33
试试(FileOutputStream out = new FileOutputStream(tempFile))
。你在这一行有个错误。您应该使用FileOutputStream (String)
而不是FileOutputStream(File)
。所以应该是FileOutputStream(tempfile.getName())
。
传递给FileOutputStream
构造函数的参数是一个字符串,它是指向实际文件的路径或文件名。它不是File
对象。
https://stackoverflow.com/questions/22704876
复制