Как использовать Тессеракт

Я пытаюсь преобразовать изображения в файле PDF (каждая страница является отсканированным изображением) в текст, используя Tesseract (Tess4J) OCR, но это не работает: (см. комментарии в коде )

public static void main(String[] args) throws IOException
{
    Tesseract instance = Tesseract.getInstance();  // JNA Interface Mapping

    PdfReader reader = new PdfReader(PREFACE); // a PDF File D:\pdf\test.pdf
    int n = reader.getXrefSize();
    PdfObject object;
    PRStream stream;

    // Looking for image and manipulating image stream
    for (int i = 0; i < n; i++)
    {
        object = reader.getPdfObject(i); // every time object null ?why
        if (object == null || !object.isStream())
            continue;

        stream = (PRStream)object;

        PdfImageObject image = new PdfImageObject(stream);
        BufferedImage bi = image.getBufferedImage();

        try {
            String result = instance.doOCR(bi); //take Buffered iamge to transfor ti 
            System.out.println(result);  
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
            stream.clear();
        }
    }
}

person Adriano_jvma    schedule 16.05.2013    source источник


Ответы (1)


Ответ на вопрос, почему getPdfObject() всегда возвращает null, не имеет значения. В коде есть более важная ошибка: вы предполагаете, что каждый объект потока в PDF является потоком изображения. Это совершенно неправильно. Даже если все содержимое вашего PDF-файла состоит из отсканированных изображений, у вас все равно будут другие потоки, например потоки содержимого страницы, которые определяют положение отсканированного изображения на странице.

Вы должны прочитать мой ответ на Определить, является ли PDF страница содержит текст или является просто изображением и получить байты изображения для всех изображений на каждой конкретной странице из ImageRenderInfo.

Пожалуйста, выбросьте свой код и начните заново. Вы скопировали/вставили пример, который я написал в контексте моей книги «iText в действии», но вы не прочитали предупреждение, которое я добавил об этом примере. Вам придется подняться и улучшить свои вопросы.

person Bruno Lowagie    schedule 18.05.2013