Як витягнути текст за допомогою 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.