Как извлечь текст с OCR из PDF на Linux?
Как извлечь текст из PDF, который не был создан с индексом? Это весь текст, но я не могу ничего искать или выбирать. Я использую Kubuntu, а у Okular нет этой функции.
11 ответов
Я имел успех с лицензированным 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.
Посмотрите, будет ли 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
- GOCR: страница Википедии
- Ocrad: страница в Википедии
- ocropus: страница в Википедии
- tesseract-ocr: страница в Википедии
Взято из списка Википедии программного обеспечения для распознавания текста
Документы Google теперь будут использовать OCR для преобразования загруженных изображений / PDF-документов в текст. У меня был хороший успех с этим.
Они используют систему распознавания текста, которая используется для гигантского проекта Google Книги.
Однако следует отметить, что к обработке будут приниматься только PDF-файлы размером до 2 МБ.
Обновить
1. Чтобы попробовать, загрузите PDF-файл <2 МБ в документы Google из веб-браузера.
2. Щелкните правой кнопкой мыши на загруженном документе и нажмите "Открыть с помощью Google Документов".
... Документы Google преобразуются в текст и выводятся в новый файл с тем же именем, но типом Документов Google в той же папке.
Лучший и самый простой выход - использовать 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
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/
PDFBeads хорошо работает для меня. Эта тема " Преобразование отсканированных изображений в один файл PDF" заставила меня начать работу. Для сканирования черно-белой книги вам необходимо:
- Создать изображение для каждой страницы PDF; любой из приведенных выше примеров GS должен работать
- Генерировать вывод hOCR для каждой страницы; Я использовал тессеракт (но учтите, что Cuneiform, кажется, работает лучше).
- Переместите изображения и файлы hOCR в новую папку; имена файлов должны соответствовать, поэтому file001.tif требуется file001.html, file002.tif file002.html и т. д.
В новой папке запустите
pdfbeads * > ../Output.pdf
Это поместит сопоставленный, OCR'd PDF в родительский каталог.
По состоянию на июнь 2021 года лучшим решением для оптического распознавания текста, которое я нашел, было gImageReader. Я использовал версию 3.2.3 из репозитория Ubuntu 18.04. В качестве серверной части используется tesseract v.4.00.00aplha.
Кажется, что он хорошо поддерживается, имеет приятный, не раздутый графический интерфейс и все функции, необходимые для относительно небольших задач. Я использую его для распознавания многостраничных PDF-файлов сканирования, иногда очень скромного качества (<100 dpi, с артефактами). Он отлично справляется со своей задачей. Легко интегрируется со словарями OpenOffice/LibreOffice. Все файлы языка tesseract и скриптов должны быть установлены (это можно проверить через Synaptic).
Другой скрипт с использованием 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"
Библиотека Asprise OCR работает на большинстве версий Linux. Он может принимать ввод и вывод PDF как поиск PDF.
Это коммерческий пакет. Загрузите бесплатную копию Asprise OCR SDK для Linux здесь и запустите ее следующим образом:
aocr.sh input.pdf pdf
Примечание: автономный pdf определяет формат вывода.
Отказ от ответственности: я сотрудник компании, производящей вышеуказанный продукт.
Попробуйте Apache PDFBox, чтобы извлечь текстовое содержимое из PDF-файла. В случае изображений, встроенных в файлы PDF, используйте ABBYY FineReader Engine CLI для Linux для извлечения текста.
Самое простое решение, которое действительно сработало для меня:
pdftoppm in.pdf image
tesseract image-1.ppm text
Это выведет text.txt с текстовым содержимым PDF-файла. (Я пробовал использовать одностраничный PDF -файл с изображением .)
Примечание. Обеим этим командам не нравится, когда вы добавляете/удаляете расширения файлов по какой-либо причине; введите его точно так же, как я показал выше. Кроме того, почему-то выдаетimage-1.ppm
вместо image.ppm`.