【问题标题】:Unable to recognize text with 100 % accuracy in a jpg file using Tess4J无法使用 Tess4J 在 jpg 文件中以 100 % 的准确率识别文本
【发布时间】:2013-02-19 11:28:44
【问题描述】:

我想将 .flv 视频文件拆分为分辨率良好的 .jpg/png 帧,然后想使用 Tess4J 工具(围绕 Tesseract 的 JNA 包装器)识别其中的字符序列。

目前我尝试使用ffmpeg命令行工具将.flv视频文件分割成jpg图片。我使用的ffmpeg命令是:

ffmpeg -i myinput.flv myoutput%d.jpg

它给了我详细的输出图像:

图片尺寸:1280 * 696

水平分辨率:96 dpi

垂直分辨率:96 dpi

位深:24

我的问题是: 我尝试使用 Tess4J 使用以下代码 sn-p 识别视频帧(我拆分的 jpg 图像文件)中的字符,它正在识别字符,但不能 100% 准确识别。它还添加了一些图像中没有的垃圾字符。

我正在使用的Java代码sn-p:

import java.io.BufferedWriter

import java.io.File;

import java.io.FileWriter;

import java.io.IOException; 

import net.sourceforge.tess4j.Tesseract;

import net.sourceforge.tess4j.TesseractException;

public class TesseractDemo {

public static void main(String[] args) {

    File imageFile = new File("D:\\myinput1.jpg");

    Tesseract instance = Tesseract.getInstance();

    // Tesseract1 instance = new Tesseract1();

    try {

        String result = instance.doOCR(imageFile);

        System.out.println(result);

        // write in a file
        try {
            File file = new File("D:\\myoutput1.txt");
            BufferedWriter out = new BufferedWriter(new FileWriter(file));
            out.write(result);
            out.close();
        } catch (IOException ex) {
        }

    } catch (TesseractException ep) {
        System.err.println(ep.getMessage());
    }

}

}

注意:在 Tess4J 网站中,他们告诉您用于进行 OCR 的图像应该超过 200 dpi(每英寸点数)。如何使用ffmpeg获取200dpi以上的jpg图片??

任何有任何java代码sn-p的机构或这方面的任何建议请帮助。

【问题讨论】:

  • 如果您必须使用 jpg 输出,请考虑添加 -qscale:v 2 作为输出选项以提高输出文件质量。默认设置可能不够。
  • 感谢您的建议。我一定会这样做的。
  • 能否给我一个确切的命令语法示例。

标签: ffmpeg tesseract


【解决方案1】:

如果可能,请使用 PNG 图像格式,因为 JPEG 可能会压缩并引入伪影。您可以将 Java 中的图像重新缩放到所需的分辨率(检查 Tess4J 中的 ImageHelper.getScaledInstance 方法)。您应该得到比原始转换图像更好的结果。在白色背景上获得黑色文本的颜色反转也会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2023-04-08
    • 2018-02-15
    相关资源
    最近更新 更多