Seite 1 von 2
OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Montag 18. Januar 2021, 20:20
von HerrYves
Hallo zusammen,
nach ausgedehnter "Google" Recherche kommte ich nicht weiter und schildere hier mal mein Thema.
Ich habe ein Skript geschrieben, dass Daten aus eine PDF ließt und zu guter letzt OCR über das Dokuemt laufen lässt.
Code-Auszug:
>> ocrmypdf.ocr(document, finalfilename, deskew=True, language="deu") <<
Geschrieben habe ich es in einem Ubuntu-System, nach den Umzug auf meinen Raspberry Pi 2 bekomme ich folgenden Fehler: AttributeError: module 'ocrmypdf' has no attribute 'ocr'
Der auf Ubuntu nie aufgekommen ist.
Auf der OCRmyPDF Seite finde ich keine weiter Anmerkung die mich weiter bringt.
Ich hoffe daher, dass es in diesem Forum jemand gibt der mir dabei helfen kann.
Freue mich jetzt schon auf Eure Hilfe.
Grüße,
Yves
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 00:54
von __blackjack__
@HerrYves: Wenn Du gleich nach dem Import das Modul mit `print()` ausgibst, ist dass dann das richtige, oder vielleicht ein anderes Modul das Du so genannt hast? Also da wo ``import ocrmypdf`` steht einfach mal ein ``import ocrmypdf; print(ocrmypdf)`` machen.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 10:18
von HerrYves
@__blackjack__:
Danke für den Hinweis. Ich habe sowohl das Ubuntu als auch das RasPi Programm um das Print ergänzt und dann die Verzeichnisse verglichen. Dabei habe festgestellt, dass der Inhalt der Ordner unterschiedlich sind. Ich habe dann den Ubuntu-Inhalt in den RasPi-Ordner kopiert, danach gab es eine andere Fehlermeldung.
Code: Alles auswählen
<module 'ocrmypdf' from '/usr/lib/python3/dist-packages/ocrmypdf/__init__.py'>
Traceback (most recent call last):
File "OCR-Final.py", line 123, in <module>
ocrmypdf.ocr(document, finalfilename, deskew=True, language="deu")
File "/usr/lib/python3/dist-packages/ocrmypdf/api.py", line 326, in ocr
return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)
File "/usr/lib/python3/dist-packages/ocrmypdf/_sync.py", line 360, in run_pipeline
check_pages=options.pages,
File "/usr/lib/python3/dist-packages/ocrmypdf/_pipeline.py", line 160, in get_pdfinfo
check_pages=check_pages,
File "/usr/lib/python3/dist-packages/ocrmypdf/pdfinfo/info.py", line 831, in __init__
with pikepdf.open(infile) as pdf:
AttributeError: __enter__
Sieht für mich jetzt noch wilder aus ...
Ich habe mir schon überlegt, auf dem RasPi mal Ubuntu minimal zu installieren.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 10:36
von sparrow
@HerrYves: Genau das macht man nicht - per Hand irgendwelche Sachen unterhalb von /usr/lib kopieren. Das macht man entweder über den Paketmanager oder über pip. Sorg erstmal wieder für eine saubere Installation des passenden Paketes und erkläre wie du es installiert hast. Dann schauen wir weiter.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 14:16
von HerrYves
@sparrow:
Danke für den Tipp!
Es war ein trail and error Ansatz.
Ich habe >>sudo apt-get --purge remove ocrmypdf<< und >>pip3 uninstall ocrmypdf<< ausgeführt und danach mit >>sudo pip3 install ocrmypdf<< das Modul nochmals aufgespielt.
Danach bekomme ich die "alte Fehlermeldung wieder:
Code: Alles auswählen
Traceback (most recent call last):
File "OCR-Final.py", line 121, in <module>
ocrmypdf.ocr(document, finalfilename, deskew=True, language="deu")
AttributeError: module 'ocrmypdf' has no attribute 'ocr'
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 15:37
von __deets__
Die Bibliothek braucht Tesseract. Hast du das installiert?
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 22:34
von HerrYves
@__deets__:
Ja, danke der Nachfrage. Habe pytesseract 0.3.7 per PIP installiert und zusätzlich das deutsche Sprachpaket dazu.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Dienstag 19. Januar 2021, 22:43
von sparrow
pytesseract ist aber nicht tesseract.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Mittwoch 20. Januar 2021, 09:15
von HerrYves
@sparrow:
Danke für den Hinweis, in dem Moment als ich auf Senden geklickt hatte ist mir das auch gekommen. Ich habe per PIP das Tesseract Modul geladen und den Code dahingehend geändert.
Danach kam eine Fehlermeldung nach einem weiteren fehlenden Modul (ConfigParser). Auch das habe ich per PIP geladen. Leider ohne Wirkung, die Fehlermeldung
kommt nach wie vor.
Ich spiele im Moment mit dem Gedanken, den Aufruf des OCRmyPDF als subprocess umzusetzen, halte Euch dazu auf dem Laufenden.
Danke Euch schon mal für den Support
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Mittwoch 20. Januar 2021, 09:17
von Jankie
Versuch mal statt
zu verwenden.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Mittwoch 20. Januar 2021, 09:28
von HerrYves
@Jankie:
Danke für den Hinweis:
Leider bekomme ich beim Installieren die Meldung dass sowohl ConfigParser als auch configparser schon vorhanden ist.
Auch ein Test mit dem Skript brachte wieder die gleiche Fehlermeldung.
Ich stell mir nur die Frage warum das Skript auf Ubuntu durchläuft und auf dem Debian des RasPi nicht.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Mittwoch 20. Januar 2021, 22:02
von HerrYves
NACHTRAG:
Ich habe gerade das Skript umgebaut mit >subprocess< auf OCRmyPDF Shell.
Wenn ich
direkt ausführe läuft es einwandfrei.
Sobald ich es in Python übernehme
Code: Alles auswählen
cmd = ["ocrmypdf", "-l deu", "--force-ocr", "--deskew", "Dokument.pdf", "OCRed.pdf"]
result = subprocess.run(
cmd
)
und ausführe bekomme ich wieder die Fehlermeldung
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 07:28
von Jankie
Dann poste mal bitte deinen gesamten Code den du ausführst und den gesamten Traceback.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 08:11
von HerrYves
@Jankie:
Hier der Code:
Code: Alles auswählen
# !/usr/bin/env python3
from pathlib import Path
import tesseract
import ocrmypdf
import subprocess
s_path = Path('/mnt/ocr_source')
t_path = Path('/mnt/ocr_target')
b_path = Path('/mnt/ocr_backup')
for document in s_path.glob('*.pdf'):
finalfilename = os.path.join(t_path, document.stem + ".pdf")
# OCR Erstellung des Dokuments
cmd = ["ocrmypdf", "-l deu", "--force-ocr", "--deskew", document, finalfilename]
result = subprocess.run(
cmd
)
und der Traceback:
Code: Alles auswählen
Traceback (most recent call last):
File "OCR-Final1.py", line 4, in <module>
import tesseract
File "/home/pi/.local/lib/python3.7/site-packages/tesseract/__init__.py", line 26, in <module>
import ConfigParser
ModuleNotFoundError: No module named 'ConfigParser'
Danke
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 08:34
von sparrow
@HerrYves: Dein Code und die Fehlermeldung sind etwas ganz anderes als deine vorherige Fehlerbeschreibung. Du hast gesagt, du führst die Zeile mit dem subprocess aus und bekommst "wieder die Fehlermeldung".
Der Traceback zeigt dir aber, dass der import des Moduls "tesseract" zu dem Fehler führt, nicht etwa deine Zeile mit dem Subprocess. Wofür brauchst du denn überhaupt das Modul tesseract? Bist du Astrophysiker und möchtest die Konzentration von Dunkler Materie Halonen berechnen? Denn dafür ist das Modul laut Beschreibung bei PyPI da.
Also schmeiß die unnötigen Importe von tesseract und ocrmypdf raus. Die brauchst du für den Code nicht.
Und gewöhn die an, vernünftige Namen zu verwenden. s_path darf ruhig "source_path" heißen, etc.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 09:16
von sparrow
@HerrYves: Übrigens entfernst du dich immer mehr von dem eigentlichen Problem. Du versuchst gerade ein gestricktes Workaround, das womöglich gar nicht nötig ist, weil du das eigentliche Problem nicht findest. Im zweiten Beitrag hat dich __blackjack__ gebeten Ausgaben zu posten. Statt das zu tun, hast du aber in Aktionismus versucht etwas zu tun. Solltest du aber nicht.
Also, was gibt der folgende Code - und nur der folgende Code - aus:
Code: Alles auswählen
import sys
print(f"Sys Version: {sys.version}")
import ocrmypdf
print("after import")
print(ocrmypdf)
print(f"Version: {ocrmypdf.__version__}")
print(f"Function: {ocrmypdf.ocr})")
print("done")
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 11:35
von Sirius3
Nochwas: warum verwendest Du os.path.join, wenn Du doch eigentlich pathlib benutzt?
Code: Alles auswählen
from pathlib import Path
import subprocess
source_path = Path('/mnt/ocr_source')
target_path = Path('/mnt/ocr_target')
backup_path = Path('/mnt/ocr_backup')
for document in source_path.glob('*.pdf'):
final_filename = target_path / document.name
subprocess.run(["ocrmypdf", "-l", "deu", "--force-ocr", "--deskew", document, final_filename], check=True)
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 12:25
von HerrYves
@sparrow:
Danke für Deinen Hinweis, Du hast ich bin von eigentlichen Problem abgekommen.
Die Rückgabe aus Deinem Code lautet wie folgt:
Code: Alles auswählen
Sys Version: 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0]
after import
<module 'ocrmypdf' (namespace)>
Traceback (most recent call last):
File "Forum_test.py", line 6, in <module>
print(f"Version: {ocrmypdf.__version__}")
AttributeError: module 'ocrmypdf' has no attribute '__version__'
Des Weiterm hier mein kompletter Code:
Code: Alles auswählen
# !/usr/bin/env python3
from pathlib import Path
import ocrmypdf
source_path = Path('/mnt/ocr_source')
target_path = Path('/mnt/ocr_target')
for document in source_path.glob('*.pdf'):
# finaler Dateiname
finalfilename = (target_path / document.name)
# OCR Erstellung des Dokuments
ocrmypdf.ocr(document, finalfilename, deskew=True, language="deu")
und der Traceback auf den Code
Code: Alles auswählen
Traceback (most recent call last):
File "OCR-Final1.py", line 13, in <module>
ocrmypdf.ocr(document, finalfilename, deskew=True, language="deu")
AttributeError: module 'ocrmypdf' has no attribute 'ocr'
ich danke Euch für die Unterstützung und Eure Geduld
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 13:02
von sparrow
Das "<module 'ocrmypdf' (namespace)>" ist seltsam und kenne ich so nicht. Eigentlich sollte dort folgend der Pfad zu der Datei kommen, aus der das Modul stammt. Ist hier nicht der Fall. "namespace" habe ich an der Stelle noch nicht gesehen - und das deutet darauf hin, dass da nicht das Modul geladen wird, das da geladen werden sollte.
Re: OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi
Verfasst: Donnerstag 21. Januar 2021, 13:31
von HerrYves
@sparrow:
So habe ich die Fehlermeldung auch interpretiert. Darauf hin habe ich die Verzeichnisse von Ubuntu und RasPi verglichen und festgestellt, dass auf dem RasPi Dateien und Verzeichnisse fehlen und habe dann die Dateien rüber kopiert --> ging dann ja aber in die Hose.
