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

44

Как извлечь текст из PDF, который не был создан с индексом? Это весь текст, но я не могу ничего искать или выбирать. Я использую Kubuntu, а у Okular нет этой функции.

Хелдер С Рибейро
источник

Ответы:

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 в той же папке.

Russ
источник
Ответ не совсем специфичен для 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/

ryanjdillon
источник
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 в родительский каталог.

scruss
источник
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"
Tolima
источник
1

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

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

aocr.sh input.pdf pdf

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

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

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

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

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