Как извлечь текст с помощью OCR из PDF в Linux?

56613
hsribei

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

40
Также см .: https://softwarerecs.stackexchange.com/q/3412/26815 Keelan 6 лет назад 0

9 ответов на вопрос

25
Jukka Matilainen

Я имел успех с лицензированным 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="$" 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 13 лет назад 0
@ Gökhan Sever, вы имеете в виду добавление интерактивной проверки орфографии, когда пользователю предлагается заменить слова с ошибкой / неизвестные слова? Я думаю, что вы могли бы сделать это, добавив что-то вроде `aspell check --mode = html" $ base.html "` в скрипт сразу после запуска cuneiform. Jukka Matilainen 13 лет назад 0
Это одно из решений. Однако, не видя весь контекст текста, трудно внести исправления. Было бы лучше увидеть интерфейс, встроенный в ocrfeeder. Gökhan Sever 13 лет назад 0
Кстати, я использую tesseract для распознавания символов: заменяя клинообразную строку на: tesseract "$ page" "$ base" hocr Gökhan Sever 13 лет назад 1
Небольшое исправление: строка для tesseract, по крайней мере, для других языков, кроме английского, здесь, например, немецкий (= deu): `tesseract" $ page "" $ base "-l deu hocr` (конечно, вы должны удалить ``) , Keks Dose 12 лет назад 1
Поскольку у меня были проблемы с не очень точными PDF-файлами, я изменил движок в gs с "tiff4" на "tiffgray" - и результат был очень хороший: `gs -SDEVICE = tiffgray -r300x300 -sOutputFile =" $ tmpdir / page-% 04d .tiff "-dNOPAUSE -dBATCH -" $ input "` 11 лет назад 0
@ GökhanSever Я получу эту ошибку: `Tesseract OCR Engine с открытым исходным кодом v3.03 с OSD Leptonica: слабое поле (0,00) для текстового блока 571 blob, но в любом случае используется ориентация: 0 / usr / bin / pdf2text: строка 23: / tmp / tmp.XksXutALLp / page-0001.html: такого файла или каталога нет, когда я использую вашу версию. Есть идеи, что я делаю не так? Wikunia 9 лет назад 0
@Wikunia изменить $ base.html на $ base.hocr David Milovich 6 лет назад 0
13
nagul

Посмотрите, будет ли работать 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

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

Эта программа также работает для рукописных текстовых документов? Ivo Flipse 15 лет назад 2
Нет, я не думаю, что у него есть возможности OCR. Он может просто извлечь текст, встроенный в PDF. Страница руководства: http://linux.die.net/man/1/pdftotext nagul 15 лет назад 1
Да, это работает для PDF-документов, которые уже поставляются со встроенным текстом. В моем случае это именно тот случай, когда это не так. hsribei 15 лет назад 0
@ obvio171 Добавлен лучший вариант, который я могу найти, чтобы заставить OCR работать в вашем случае. nagul 15 лет назад 1
11
Russ

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

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

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

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

Ответ не совсем специфичен для Ubuntu, но я хочу поблагодарить вас: BRILLIANT решение! :) Pitto 12 лет назад 0
вау, спасибо за взлом. очень полезно Jossef Harush 7 лет назад 0
Это было действительно полезно :) Я загрузил 50 МБ файл вчера, и это сработало. Похоже, они увеличили размер ограничения. Gaurav 6 лет назад 0
2
ryanjdillon

Geza Kovacs has made an Ubuntu package that is basically a script using hocr2pdf as Jukka suggested, but makes things a bit faster to setup.

From Geza's Ubuntu forum post with details on the package...

Adding the repository and installing in Ubuntu

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

Running ocr on a file

pdfocr -i input.pdf -o output.pdf 

GitHub repository for the code https://github.com/gkovacs/pdfocr/

1
scruss

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
tolima

another script using 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="$" tesseract "$base.tiff" $base done # combine the pages into one txt cat "$tmpdir"/page-*.txt > $output rm -rf -- "$tmpdir" 
1
Asprise Support

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

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

aocr.sh input.pdf pdf 

Примечание: автономный pdf указывает формат вывода.

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

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

Лучший и самый простой выход - 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 
0
Praveen Kumar K R

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

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

Похожие вопросы