Jak wyodrębnić tekst za pomocą OCR z pliku PDF w systemie Linux?

Odpowiedzi:

25

Odniosłem sukces z licencjonowanym przez BSD portem Linux systemu Cuneiform OCR.

Wydaje się, że żadne pakiety binarne nie są dostępne, więc musisz je zbudować ze źródła. Upewnij się, że zainstalowane są biblioteki ImageMagick C ++, aby obsługiwać zasadniczo dowolny format obrazu wejściowego (w przeciwnym razie akceptuje tylko BMP).

Chociaż wydaje się, że jest to zasadniczo nieudokumentowane oprócz krótkiego pliku README, wyniki OCR są całkiem dobre. Zaletą jest to, że może wyświetlać informacje o pozycji tekstu OCR w formacie hOCR , dzięki czemu możliwe jest umieszczenie tekstu z powrotem we właściwej pozycji w ukrytej warstwie pliku PDF. W ten sposób można tworzyć pliki PDF z możliwością wyszukiwania, z których można kopiować tekst.

Użyłem hocr2pdf do odtworzenia plików PDF z oryginalnych plików PDF z obrazami i wyników OCR. Niestety program nie obsługuje tworzenia wielostronicowych plików PDF, więc może być konieczne utworzenie skryptu do ich obsługi:

#!/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"

Pamiętaj, że powyższy skrypt jest bardzo szczątkowy. Na przykład nie zachowuje żadnych metadanych PDF.

Jukka Matilainen
źródło
Masz pomysł na ulepszenie tego skryptu, aby dodać etap sprawdzania pisowni, aby poprawić błędy w kroku rozpoznawania?
Gökhan Sever
@ Gökhan Sever, czy masz na myśli dodanie interaktywnego sprawdzania pisowni, w którym użytkownik jest proszony o zastąpienie błędnie napisanych / nieznanych słów? Myślę, że możesz to zrobić, dodając coś aspell check --mode=html "$base.html"w skrypcie zaraz po uruchomieniu pisma klinowego.
Jukka Matilainen
To jest jedno rozwiązanie. Jednak nie widząc całego kontekstu tekstu, trudno jest wprowadzić poprawki. Fajniej byłoby zobaczyć interfejs wbudowany w ocrfeeder.
Gökhan Sever
1
Nawiasem mówiąc, używam tesseract do rozpoznawania znaków: zamieniając linię klinową na: tesseract „$ page” „$ base” hocr
Gökhan Sever
1
Mała korekta: Wiersz dla tesseract przynajmniej dla innych języków niż angielski, tutaj np. Niemiecki (= deu) to: `tesseract" $ page "" $ base "-l deu hocr` (oczywiście musisz usunąć ``) .
Keks Dose
14

Sprawdź, czy pdftotext będzie dla ciebie działał. Jeśli nie ma go na twoim komputerze, będziesz musiał zainstalować pakiet poppler-utils

sudo apt-get install poppler-utils 

Możesz również znaleźć zestaw narzędzi pdf .

Pełna lista oprogramowania pdf tutaj na wikipedii.

Edycja: Ponieważ potrzebujesz funkcji OCR, myślę, że będziesz musiał spróbować innego rozwiązania. (tzn. nie mogłem znaleźć linuksowego konwertera pdf2text, który robi OCR).

  • Konwertuj pdf na obraz
  • Zeskanuj obraz do tekstu za pomocą narzędzi OCR

Konwertuj pdf na obraz

  • gs: Poniższe polecenie powinno przekonwertować plik PDF na wiele stron na pojedyncze pliki tiff.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = litera -sOutputFile = nazwa_pliku_% 04d.tif -dNOPAUSE -dBATCH - nazwa pliku

  • Narzędzia ImageMagik : na stronie SuperUser znajdują się inne pytania dotyczące korzystania z ImageMagik, które mogą pomóc w przeprowadzeniu konwersji.

    konwersja foo.pdf foo.png

Konwertuj obraz na tekst za pomocą OCR

Zaczerpnięte z Wikipedii z listą oprogramowania OCR

nagul
źródło
2
Czy ten program działa również w przypadku odręcznych dokumentów tekstowych?
Ivo Flipse
1
Nie, nie sądzę, że ma możliwości OCR. Może po prostu wyodrębnić tekst osadzony w pliku pdf. Strona podręcznika
nagul
Tak, działa to w przypadku dokumentów pdf, które już zawierają osadzony tekst. Moja sprawa jest dokładnie taka, w której nie ma.
Helder S Ribeiro
1
@ obvio171 Dodano najlepszą opcję, jaką mogłem znaleźć, aby OCR działał w twoim przypadku.
nagul
12

Dokumenty Google będą teraz używać OCR do konwersji przesłanych dokumentów graficznych / pdf na tekst. Miałem z tym dobry sukces.

Korzystają z systemu OCR, który jest wykorzystywany w gigantycznym projekcie Google Books .

Należy jednak zauważyć, że tylko pliki PDF do rozmiaru 2 MB będą akceptowane do przetwarzania.

Aktualizacja
1. Aby wypróbować, prześlij <2 MB pdf do dokumentów Google z przeglądarki internetowej.
2. Kliknij prawym przyciskiem myszy przesłany dokument i kliknij „Otwórz za pomocą Dokumentów Google”.
... Dokumenty Google zostaną przekonwertowane na tekst i wydrukowane w nowym pliku o tej samej nazwie, ale Dokumenty Google zostaną zapisane w tym samym folderze.

Russ
źródło
Odpowiedź nie jest tak naprawdę specyficzna dla Ubuntu, ale naprawdę chcę ci podziękować: BRILLIANT rozwiązanie! :)
Pitto
To było bardzo pomocne :) Wczoraj przesłałem plik 50 MB i zadziałało. Wygląda na to, że zwiększyli limit rozmiaru.
Gaurav
2

Geza Kovacs stworzył pakiet Ubuntu, który jest w zasadzie skryptem hocr2pdfużywanym zgodnie z sugestią Jukki, ale przyspiesza konfigurację.

Z postu na forum Ubezu Gezi ze szczegółami na temat pakietu ...

Dodanie repozytorium i instalacja w Ubuntu

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

Uruchamianie ocr na pliku

pdfocr -i input.pdf -o output.pdf

Repozytorium GitHub dla kodu https://github.com/gkovacs/pdfocr/

ryanjdillon
źródło
2

Najlepszym i najłatwiejszym sposobem na jego użycie pypdfocrnie jest zmiana pliku pdf

pypdfocr your_document.pdf

Na koniec będziesz miał inny your_document_ocr.pdfsposób, w jaki chcesz, z tekstem do przeszukiwania. Aplikacja nie zmienia jakości obrazu. Zwiększa nieco rozmiar pliku, dodając tekst nakładki.

Aktualizacja 3 listopada 2018 r .:

pypdfocrnie jest już obsługiwany od 2016 r. i zauważyłem pewne problemy z powodu braku opieki. ocrmypdf( moduł ) wykonuje podobną pracę i może być używany w następujący sposób:

ocrmypdf in.pdf out.pdf

Żeby zainstalować:

pip install ocrmypdf

lub

apt install ocrmypdf
Eduard Florinescu
źródło
1

PDFBeads działa dla mnie dobrze. Ten wątek „ Konwertuj zeskanowane obrazy na pojedynczy plik PDF ” mnie uruchomił. Aby skanować książki czarno-białe, musisz:

  1. Utwórz obraz dla każdej strony pliku PDF; jeden z powyższych przykładów gs powinien działać
  2. Wygeneruj wynik hOCR dla każdej strony; Użyłem tesseract (ale zauważ, że Cuneiform wydaje się działać lepiej).
  3. Przenieś obrazy i pliki hOCR do nowego folderu; nazwy plików muszą się zgadzać, więc plik001.tif potrzebuje pliku001.html, file002.tif file002.html itp.
  4. W nowym folderze uruchom

    pdfbeads * > ../Output.pdf
    

Spowoduje to umieszczenie posortowanego pliku OCR w katalogu nadrzędnym.

szum
źródło
1

inny skrypt używający 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
źródło
1

Asprise OCR Library działa na większości wersji Linuksa. Może pobierać i wyprowadzać pliki PDF jako pliki PDF wyszukiwania.

To pakiet komercyjny. Pobierz bezpłatną kopię Asprise OCR SDK dla systemu Linux tutaj i uruchom ją w następujący sposób:

aocr.sh input.pdf pdf

Uwaga: samodzielny plik „pdf” określa format wyjściowy.

Oświadczenie: Jestem pracownikiem firmy produkującej powyższe produkty.

Wsparcie Asprise
źródło
Ten post stwierdza, że ​​produkt może to zrobić, co jest przydatną wskazówką, którą należy opublikować jako komentarz. Nie wyjaśnia, jak właściwie rozwiązać problem, co powinny zrobić odpowiedzi. Czy możesz rozszerzyć swoją odpowiedź, aby ktoś mógł zobaczyć, jak to zrobić?
fixer1234 12.03.15
Dzięki @ fixer1234, edytowałem go, aby uwzględnić polecenie.
Wsparcie Asprise
0

Wypróbuj Apache PDFBox, aby wyodrębnić zawartość tekstową z pliku PDF. W przypadku obrazów osadzonych w plikach PDF do wyodrębnienia tekstu użyj ABBYY FineReader Engine CLI dla systemu Linux .

Praveen Kumar KR
źródło
Uważam, że ABBYY OCR jest dość żałosny, jeden z najmniej wydajnych programów, jakie wypróbowałem. Może to być odpowiednie z naprawdę czystym obrazem standardowego tekstu czcionki o typowym rozmiarze tekstu, bez mieszanych czcionek, mieszanych rozmiarów, złożonego układu, grafiki, linii itp.
fixer1234
Ja też próbowałem, działa dobrze. Mam wątpliwości, czy możesz mi pomóc?
Praveen Kumar KR
Jeśli w innych odpowiedziach nie ma tego, czego potrzebujesz, najlepiej zadać własne pytanie. To sprawi, że będzie narażony na wiele oczu.
fixer1234