我有一个使用Jersey构建的REST Web服务,它通过Tess4J Java绑定使用Tesseract进行OCR(光学字符识别)。现在Tess4J库希望你发送一个图像文件(png,jpg,tif等),但是对于Jersey处理,我得到一个包含图像的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作为它所期望的支持文件类型之一?
答案 0 :(得分:2)
临时文件的文件扩展名必须与原始输入图像文件的文件扩展名匹配。
除File
类型外,Tess4J也接受BufferedImage
作为输入。只需将inputstream转换为它,如下所示:
BufferedImage image = ImageIO.read(is);
答案 1 :(得分:0)
尝试(FileOutputStream out = new FileOutputStream(tempFile))
。你在这一行有错误。
您应该使用FileOutputStream (String)
而不是FileOutputStream(File)
。
所以它应该是FileOutputStream(tempfile.getName())
。
传递给FileOutputStream
构造函数的参数是一个字符串,它是实际文件的路径或文件名。它不是File
对象。