【问题标题】:Make Tess4J get image from PDF file让 Tess4J 从 PDF 文件中获取图像
【发布时间】:2013-05-16 10:28:11
【问题描述】:

如何让 Tess4J 从 PDF 文件中获取图像?

我很喜欢使用 OCR (Tess4J) 将图像文件转换为文本。效果很好,我已经在图像上进行了测试,效果很好。

File imageFile = new File("D:\\HEAD2.png");
Tesseract instance = Tesseract.getInstance();  // JNA Interface Mapping
// Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping

try {
    String result = instance.doOCR(imageFile);
    System.out.println(result);
} catch (TesseractException e) {
    System.err.println(e.getMessage());
}

但我正面临这个问题。我会解析一个包含图像的pdf文件。我不知道该怎么做而且我还没有找到任何带有 pdf 的 Tess4J 示例

我用 Asprise 测试了这个例子,但我在 Tess4J 上没有找到这样的例子

import com.asprise.util.pdf.PDFReader;
import com.asprise.util.ocr.OCR;

PDFReader reader = new PDFReader(new File("my.pdf"));
reader.open(); // open the file. 
int pages = reader.getNumberOfPages();

for(int i=0; i < pages; i++) {
   BufferedImage img = reader.getPageAsImage(i);

   // recognizes both characters and barcodes
   String text = new OCR().recognizeAll(image);
   System.out.println("Page " + i + ": " + text); 
}

reader.close(); // finally, close the file.

【问题讨论】:

    标签: java parsing pdf tesseract


    【解决方案1】:

    利用pdfutilities.convertpdf2png 并像以前处理图像一样使用它。

    【讨论】:

    • 这段代码实际上很好,但是在我的目录中创建了 PDF 文件图像。有必要吗
    • 也许它会将图像保存到磁盘以用于具有多页的大型 PDF 以节省一些内存。我目前不知道如何规避这一点。但是你可以删除那些 .pdf 之后。
    【解决方案2】:

    Tess4j 依赖于pdfbox,所以你可以使用这个库。可能是这样的:

    import net.sourceforge.tess4j.ITesseract;
    import net.sourceforge.tess4j.Tesseract;
    import net.sourceforge.tess4j.TesseractException;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.rendering.ImageType;
    import org.apache.pdfbox.rendering.PDFRenderer;
    
    PDDocument document = PDDocument.load(new File("YOUR_PDF_FILE_PATH"));
    PDFRenderer pdfRenderer = new PDFRenderer(document);
    
    ITesseract tesseract = new Tesseract();
    
    tesseract.setDatapath("tessdata");
    tesseract.setLanguage("spa");
    
    for (int page = 0; page < document.getNumberOfPages(); page++) {
        BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
    
        try {
            String str = tesseract.doOCR(bufferedImage);
            System.out.println(str);
        } catch (TesseractException ex) {
            Logger.getLogger(OCR.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    document.close();
    

    我在这里使用的是 Tessj4 4.5 和 pdf-box 2.0。 你也可以检查 https://colwil.com/how-to-extract-text-from-a-scanned-pdf-using-ocr-in-java/.

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2014-02-04
      • 2013-08-11
      相关资源
      最近更新 更多