Instrukcje

OCRmyPDF – instrukcja instalacji i obsługi

OCRmyPDF to skrypt pythonowy wykorzystujący bibliotekę Tesseract OCR. 

Umożliwia on, między innymi: 

    • dodanie do istniejącego pliku PDF lub obrazu (po zamianie na PDF) warstwy OCR 
    • usunięcie z pliku PDF starej warstwy OCR i zastąpienia jej nową 
    • wygenerowanie dodatkowego pliku tekstowego zawierającego tekst wykryty przez OCR 
    • korektę orientacji, jakości stron itd. 
    • OCR tylko dla wybranych stron 
    • wybór języka lub języków dokumentu, pod kątem których wykonany ma zostać OCR 
    • dodawanie metadanych do pliku PDF 
    • dodawanie własnych wyrażeń do słownika 

 

Do jego prawidłowego działania wymagane są następujące 3 elementy: 

    • Python 3.x 64-bit 
    • Tesseract OCR 64-bit 
    • Ghostscript 64-bit 

Instalacja dla systemu Windows 

(żródło: https://ocrmypdf.readthedocs.io/en/latest/installation.html) 

 

1. Zainstalować Python i bibliotekę Tesseract OCR za pomocą polecenia winget z wiersza polecenia

winget install -e --id Python.Python.3.11 
winget install -e --id UB-Mannheim.TesseractOCR 

2. Pobrać Ghostscript w wydaniu AGPL ze strony projektu i zainstalować aplikację

3. Zainstalować OCRmyPDF z wiersza polecenia wpisując 

py -m pip install ocrmypdf 

Uruchomienie z wiersza polecenia
 

1. Podstawowe polecenie

Aby uruchomić skrypt OCRmyPDF z wiersza polecenia należy wpisać następujące polecenie 

py -m ocrmypdf [flagi] PLIK_WEJŚCIOWY PLIK_WYJŚCIOWY 

np.

py -m ocrmypdf "C:\Users\AStraus\Desktop\IMG_20250416_092300_943.pdf" "C:\Users\AStraus\Desktop\IMG_20250416_092300_943_OCR.pdf" 

Jeżeli plik wyjściowy nie istnieje, zostanie utworzony, w przeciwnym wypadku zostanie nadpisany.

 

2. Lista flag i parametrów

Flaga -h lub --help powoduje wyświetlenie listy wszystkich możliwych opcji i ich parametrów z krótkim objaśnieniem dla każdej z nich 

py -m ocrmypdf -h
ocrmypdf1
3. OCR grafiki

Jeśli plik wejściowy jest obrazem (obsługiwane formaty: jpg, png, tiff, gif, webp, bmp) konieczne jest dodatkowe ustawienie flagi --image-dpi
 

py -m ocrmypdf –-image-dpi [DPI] “PLIK_WEJŚCIOWY” PLIK WYJŚCIOWY 

np.

py -m ocrmypdf --image-dpi 200 "C:\Users\AStraus\Desktop\testimage.png" "C:\Users\AStraus\Desktop\image_ocr.pdf
4. Wyodrębnienie warstwy tekstowej

Jeśli skrypt ma wygenerować dodatkowy plik tekstowy zawierający tekst znaleziony przez OCR należy ustawić dodatkową flagę --sidecar  

py -m ocrmypdf –-sidecar “PLIK TEKSTOWY“ “PLIK_WEJŚCIOWY” PLIK WYJŚCIOWY 

np.

py -m ocrmypdf --sidecar “C:\Users\AStraus\Desktop\ocr_text.txt” "C:\Users\AStraus\Desktop\IMG_20250416_092300_943.pdf" "C:\Users\AStraus\Desktop\IMG_20250416_092300_943_OCR.pdf"
5. Pliki z istniejącym tekstem

Jeżeli plik PDF zawiera już warstwę tekstową, można próbować nadpisać ją, uzupełnić lub wykonać ją od początku za pomocą flag 

      • -f, --force-ocr (‘spłaszcza’ plik, ignorując cały jawny tekst i warstwę OCR, traktuje go jako obraz na którym wykonuje od nowa OCR) 
      • -s, --skip-text (nie ingeruje w już istniejącą warstwę tekstową i próbuje uzupełnić ją o tekst znajdujący się np. na ilustracjach) 
      • --redo-ocr (usuwa poprzednio dodaną warstwę OCR i próbuje wykonać ją na nowo, sam tekst pliku jeśli taki w pliku istnieje pozostaje nienaruszony)
6. Sprecyzowanie języka tekstu

Domyślnie biblioteka Tesseract OCR 4.0 korzysta z angielskiego modelu/słownika przy wykrywaniu tekstu. Jeżeli odczytywany plik PDF jest w innym języku i powoduje to błędy/literówki/brak rozpoznania znaków specjalnych można zwiększyć dokładność OCR pobierając dodatkowe modele językowe (plik o rozszerzeniu .traineddata) a następnie umieszczając je w folderze Program Files -> Tesseract OCR-> tessdata 

Dodatkowy język ustawia się za pomocą flagi -l [kod_języka]. Lista wspieranych języków dostępna jest tutaj. 

 

Możliwe jest sprecyzowanie kilku języków. 

py -m ocrmypdf -l pol - l deu “PLIK_WEJŚCIOWY” PLIK_WYJŚCIOWY 

 

7. Analiza wybranych stron

Wykonywanie OCR tylko na niektórych stronach pliku umożliwia flaga --pages 

py -m ocrmypdf --pages 1, 3-5 “PLIK_WEJŚCIOWY” PLIK_WYJŚCIOWY 

 

8. Metadane

Dodawanie metadanych (Właściwości->PDF Information) do wynikowego pliku umożliwiają flagi 

    • --title TITLE 
    • --author AUTHOR 
    • --subject SUBJECT 
    • --keywords KEYWORDS 
ocrmypdf2

Zawartość pola --title pojawia się dodatkowo w pierwszym wierszu treści PDF 

ocrmypdf3
9. Jakość skanu

Próbę poprawy jakości plików/obrazów przed wykonaniem OCR umożliwiają flagi

    • -r, --rotate-pages (obróć strony, w zależności od wykrytej orientacji tekstu)
    • -d, --deskew (‘wyprostuj’ krzywo zeskanowane strony)

Uruchomienie przez Wizlink

Na obecny moment OCRmyPDF uruchomiony może zostać z poziomu Wizlinka 

1. przez interakcję z wierszem polecenia (odpalenie aplikacji cmd.exe aktywnością Run Application, a następnie wysłania do niej polecenia za pomocą aktywności Send Keys (polecenie + {ENTER})) 

 

Z powodu specyfiki aplikacji cmd.exe nie jest możliwe wskazanie jej okna za pomocą Application Name określonej w aktywności Run Application. Problem ten można obejść wykorzystując dodatkowo aktywność Find Application i nadając oknu cmd.exe nową nazwę. 

 

Przy wysłaniu do cmd.exe kilku poleceń jednego po drugim wykonają się one po kolei (cmd.exe przetworzy pierwsze polecenie, a po pojawieniu się ponownie wolnej linii polecenia postąpi analogicznie z ‘zakolejkowanymi’) 

ocrmypdf4
ocrmypdf5

2. przez bezpośrednie uruchomienia pythona z parametrami aktywnością Run Application.

Zainstalowaną na komputerze najnowszą wersję pythona można wywołać aktywnością Run Application, jako File Path podając tylko słowo klucz „py” lub „python”. Jeśli chcemy użyć konkretnej jego wersji można też podać pełną ścieżkę

(W tej metodzie, polecenie wprowadzane do parametru Arguments nie zawiera początkowego słowa „py” bo python został już wywołany)

 

-m ocrmypdf [flagi] ”PLIK_WEJŚCIOWY” ”PLIK_WYJŚCIOWY”

Uruchomi się okno cmd.exe, które po zakończeniu działania skryptu natychmiast się zamknie.

ocrmypdf6

UWAGA: W żadnym z tych przypadków Wizlink nie dostaje informacji zwrotnej o zakończeniu działania skryptu lub jego wyniku (success/fail)

Jeżeli planujemy użyć pliku wynikowego w tym samym scenariuszu, to w zależności od typowego rozmiaru pliku należy metodą prób i błędów ustalić wystarczająco długi Wait, lub np. uruchomić skrypt i czekać w pętli na pojawienie się pliku wynikowego. 

Troubleshooting
 

  • Jeżeli próba wykonania skryptu kończy się błędem składnika Ghostscript dla konkretnego pliku można spróbować wykonać jego downgrade do wcześniejszej wersji