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

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

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

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’)


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.

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