Как извлечь текст с OCR из PDF на Linux?


Ответы:


25

Я имел успех с лицензированным BSD портом Linux системы Cuneiform OCR.

Кажется, что двоичные пакеты недоступны, поэтому вам нужно собрать его из исходного кода. Убедитесь, что установлены библиотеки ImageMagick C ++ для поддержки практически любого формата входного изображения (в противном случае он будет принимать только BMP).

Хотя он выглядит недокументированным, кроме краткого файла README, я обнаружил, что результаты распознавания довольно хорошие. Приятно то, что он может выводить информацию о положении для текста OCR в формате hOCR , так что становится возможным поместить текст обратно в правильное положение в скрытом слое файла PDF. Таким образом, вы можете создавать «доступные для поиска» PDF-файлы, из которых вы можете копировать текст.

Я использовал hocr2pdf для воссоздания PDF-файлов из оригинальных PDF-файлов только для изображений и результатов распознавания. К сожалению, программа не поддерживает создание многостраничных PDF-файлов, поэтому вам может потребоваться создать скрипт для их обработки:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

Обратите внимание, что приведенный выше скрипт очень элементарен. Например, он не сохраняет метаданные PDF.


Любая идея улучшить этот сценарий, чтобы добавить этап проверки орфографии, чтобы исправить ошибки на этапе распознавания?
— Гекхан Север

@ Gökhan Sever, вы имеете в виду добавление интерактивной проверки орфографии, когда пользователю предлагается заменить слова с ошибкой / неизвестные слова? Я думаю, что вы могли бы сделать это, добавив что-то вроде aspell check --mode=html "$base.html"скрипта сразу после запуска cuneiform.
— Юкка Мателайнен

Это одно из решений. Однако, не видя весь контекст текста, трудно внести исправления. Было бы лучше увидеть интерфейс, встроенный в ocrfeeder.
— Гекхан Север

1
Кстати, я использую tesseract для распознавания символов: заменяя клинообразную строку на: tesseract "$ page" "$ base" hocr
— Gökhan Sever

1
Небольшое исправление: строка для tesseract, по крайней мере, для других языков, кроме английского, здесь, например, немецкий (= deu): `tesseract" $ page "" $ base "-l deu hocr` (конечно, вы должны удалить ``) ,
— Кекс Доза

14

Посмотрите, будет ли pdftotext работать для вас. Если это не на вашем компьютере, вам придется установить пакет poppler-utils

sudo apt-get install poppler-utils 

Вы также можете найти набор инструментов PDF .

Полный список программного обеспечения PDF здесь в Википедии.

Изменить: так как вам нужны возможности OCR, я думаю, вам придется попробовать другой способ. (т.е. я не смог найти конвертер Linux pdf2text, который делает OCR).

  • Конвертировать PDF в изображение
  • Сканирование изображения в текст с помощью инструментов OCR

Конвертировать PDF в изображение

  • gs: приведенная ниже команда должна конвертировать многостраничный pdf в отдельные файлы tiff.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = filename_% 04d.tif -dNOPAUSE -dBATCH - имя файла

  • Утилиты ImageMagik : на сайте SuperUser есть и другие вопросы об использовании ImageMagik, которые вы можете использовать, чтобы помочь вам сделать конвертацию.

    конвертировать foo.pdf foo.png

Преобразование изображения в текст с помощью OCR

Взято из списка Википедии программного обеспечения для распознавания текста


2
Эта программа также работает для рукописных текстовых документов?
— Иво Флипс

1
Нет, я не думаю, что у него есть возможности OCR. Он может просто извлечь текст, встроенный в PDF. Страница руководства
— nagul

Да, это работает для документов PDF, которые уже поставляются со встроенным текстом. В моем случае это именно тот случай, когда это не так.
— Хелдер С Рибейро

1
@ obvio171 Добавлен лучший вариант, который я могу найти, чтобы заставить OCR работать в вашем случае.
— Нагуль

12

Документы Google теперь будут использовать OCR для преобразования загруженных изображений / PDF-документов в текст. У меня был хороший успех с этим.

Они используют систему распознавания текста, которая используется для гигантского проекта Google Книги .

Однако следует отметить, что к обработке будут приниматься только PDF-файлы размером до 2 МБ.

Обновление
1. Чтобы попробовать, загрузите PDF-файл <2 МБ в документы Google из веб-браузера.
2. Щелкните правой кнопкой мыши на загруженном документе и нажмите «Открыть с помощью Google Документов».
... Документы Google преобразуются в текст и выводятся в новый файл с тем же именем, но типом Документов Google в той же папке.


Ответ не совсем специфичен для Ubuntu, но я хочу поблагодарить вас: BRILLIANT решение! :)
— Питто

Это было очень полезно :) Я загрузил 50 МБ файл вчера, и это сработало. Похоже, они увеличили размер ограничения.
— Гаурав

2

Geza Kovacs сделал пакет Ubuntu, который в основном представляет собой скрипт, который использует, hocr2pdfкак предложил Юкка, но делает его немного быстрее в настройке.

Из поста на форуме Ubuntu Гезы с подробностями о пакете ...

Добавление репозитория и установка в Ubuntu

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

Запуск ocr для файла

pdfocr -i input.pdf -o output.pdf

GitHub репозиторий для кода https://github.com/gkovacs/pdfocr/


2

Лучший и самый простой выход - pypdfocrэто не менять PDF

pypdfocr your_document.pdf

В конце у вас будет другой, your_document_ocr.pdfкак вы хотите, с возможностью поиска текста. Приложение не меняет качество изображения. Немного увеличивает размер файла, добавляя оверлейный текст.

Обновление 3 ноября 2018 года:

pypdfocrбольше не поддерживается с 2016 года, и я заметил некоторые проблемы из-за незанятости. ocrmypdf( модуль ) выполняет знакомую работу и может использоваться следующим образом:

ocrmypdf in.pdf out.pdf

Установить:

pip install ocrmypdf

или

apt install ocrmypdf

1

PDFBeads хорошо работает для меня. Эта тема « Преобразование отсканированных изображений в один файл PDF » заставила меня начать работу. Для сканирования черно-белой книги вам необходимо:

  1. Создать изображение для каждой страницы PDF; любой из приведенных выше примеров GS должен работать
  2. Генерировать вывод hOCR для каждой страницы; Я использовал тессеракт (но учтите, что Cuneiform, кажется, работает лучше).
  3. Переместите изображения и файлы hOCR в новую папку; имена файлов должны соответствовать, поэтому file001.tif требуется file001.html, file002.tif file002.html и т. д.
  4. В новой папке запустите

    pdfbeads * > ../Output.pdf
    

Это поместит сопоставленный, OCR'd PDF в родительский каталог.


1

другой скрипт с использованием tesseract:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

Библиотека Asprise OCR работает на большинстве версий Linux. Он может принимать ввод и вывод PDF как поиск PDF.

Это коммерческий пакет. Загрузите бесплатную копию Asprise OCR SDK для Linux здесь и запустите ее следующим образом:

aocr.sh input.pdf pdf

Примечание: автономный pdf определяет формат вывода.

Отказ от ответственности: я сотрудник компании, производящей вышеуказанный продукт.


В этом сообщении говорится, что продукт может это сделать, что является полезной подсказкой, которую следует опубликовать в виде комментария. Это не объясняет, как на самом деле решить проблему, что ответы должны делать. Можете ли вы расширить свой ответ, чтобы кто-то мог увидеть, как сделать решение?
— fixer1234

Спасибо @ fixer1234, я отредактировал его, чтобы включить команду.
— Поддержка Asprise

0

Попробуйте Apache PDFBox, чтобы извлечь текстовое содержимое из PDF-файла. В случае изображений, встроенных в файлы PDF, используйте ABBYY FineReader Engine CLI для Linux для извлечения текста.


Я нашел ABBYY OCR довольно жалким, одной из наименее способных программ, которые я пробовал. Это может быть достаточно с действительно чистым изображением текста стандартного шрифта с типичным размером основного текста, без смешанных шрифтов, смешанных размеров, сложного макета, графики, линий и т. Д.
— fixer1234

Я тоже попробовал, все отлично работает. У меня есть некоторые сомнения, вы можете мне помочь?
— Правин Кумар К.Р.

Если то, что вам нужно, не указано в других ответах, лучше всего задать свой вопрос. Это даст ему много глаз.
— fixer1234
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.