Як витягнути текст за допомогою OCR з PDF у Linux?


Відповіді:


25

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

Здається, що бінарні пакети недоступні, тому вам потрібно створити його з джерела. Не забудьте встановити бібліотеки ImageMagick C ++, щоб мати підтримку по суті будь-якого формату вхідного зображення (інакше він приймає лише BMP).

Незважаючи на те, що він, по суті, недокументований, окрім короткого файлу README, я знайшов результати OCR досить хорошими. Приємно в тому, що він може виводити інформацію про положення для тексту OCR у форматі hOCR , так що стає можливим повернути текст у правильне положення у прихованому шарі файлу PDF. Таким чином ви можете створити PDF-файли, "які можна шукати", з яких можна скопіювати текст.

Я використовував hocr2pdf для відтворення PDF-файлів з оригінальних PDF-файлів, що містять лише зображення, та результатів OCR. На жаль, програма, здається, не підтримує створення 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

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

Це одне рішення. Однак, не бачачи всього контексту тексту, важко вносити виправлення. Було б приємніше бачити інтерфейс, вбудований у програму ocrfeeder.
Gökhan Sever

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 тут на wikipedia.

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

  • Перетворення PDF у зображення
  • Скануйте зображення в текст за допомогою інструментів OCR

Перетворення PDF у зображення

  • gs: Команда нижче повинна конвертувати багатосторінковий pdf в окремі файли tiff.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = літер -sOutputFile = ім'я файлу_% 04d.tif -dNOPAUSE -dBATCH - ім'я файлу

  • Утиліти ImageMagik : На сайті SuperUser є інші питання щодо використання ImageMagik, які ви можете використати для перетворення.

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

Перетворення зображення в текст за допомогою OCR

Взято із списку програм програм OCR у Вікіпедії


2
Чи працює ця програма також для рукописних текстових документів?
Іво Фліпс

1
Ні, я не думаю, що він має можливості OCR. Він може просто витягнути текст, вбудований у pdf. Сторінка людини: linux.die.net/man/1/pdftotext
nagul

Так, це працює для PDF-документів, які вже входять із вкладеним текстом. Мій випадок - саме той, де цього немає.
Helder S Ribeiro

1
@ obvio171 Додав найкращий варіант, який я міг би знайти для того, щоб OCR працював у вашому випадку.
nagul

12

Google Docs буде в даний час використовує OCR для перетворення завантажених зображення / PDF документів в текст. Я мав добрий успіх у цьому.

Вони використовують систему OCR, яка використовується для гігантського проекту Google Книги .

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

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


Відповідь насправді не стосується Ubuntu, але я хочу щиро подякувати вам: БРІЛІАНТ-рішення! :)
Пітто

Це було дуже корисно :) Я вчора завантажив файл 50 Мб, і він працював. Схоже, вони збільшили обмеження розміру.
Гаурав

2

Geza Kovacs створив пакет Ubuntu, який в основному є сценарієм, hocr2pdfяк запропонував Jukka, але робить процес трохи швидшим у налаштуванні.

Повідомлення на форумі Geza з 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 для кожної сторінки; Я використовував tesseract (але зауважте, що клинопис, здається, працює краще).
  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

Так, я також спробував, це чудово працює. У мене є сумніви, можете мені допомогти?
Praveen Kumar KR

Якщо те, що вам потрібно, не висвітлено в інших відповідях тут, найкраще зробити - це задати власне запитання. Це призведе до впливу багатьох очей.
fixer1234
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.