我有一个使用 Jersey 构建的 REST Web 服务通过 Tess4J 使用 Tesseract 进行 OCR(光学字符识别) Java 绑定(bind)。现在,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作为它期望的支持的文件类型之一?
最佳答案
临时文件的文件扩展名必须与原始输入图像文件的文件扩展名匹配。
除了文件
类型之外,Tess4J还接受 BufferedImage 作为输入。只需将 inputstream 转换为它即可,如下:
BufferedImage image = ImageIO.read(is);
关于java - 将输入流转换为文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22704876/