Pydcviewer: Software für Dokumenten-Kameras (plattformübergreifend)

Hallo zusammen,

weil es hier gerade passt: seit heute gibt es eine neue Version meiner Dokumentenkamera-Software bei gitlab.

Sie läuft plattformübergreifend unter Linux und Windows (Mac kann ich nicht testen) und bietet neben Zoom, Rotation, Helligkeit- und Kontrast-Einstellungen auch eine (einfache) OCR-Funktion, Pause/Ausblenden, eine (ausblendbare) Bildübersicht, etc.

Wir fangen jetzt an, sie zu testen - aber im Vergleich zum Vorgänger ist sie deutlich schneller und stabiler geworden. Wer also Lust hat, sie mal auszuprobieren - ich freue mich über Rückmeldungen.

Installation (Konsole Linux / Windows vermutlich ähnlich, global, ohne venv):

  • sudo git clone https://gitlab.com/thoschi/pydcviewer.git /opt/pydcviewer
  • sudo pip install -r /opt/pydcviewer/requirements.txt # Abhängigkeiten installieren

Danach sollte man das Programm starten können mit python3 /opt/pydcviewer/pydcviewer.py. Optional kann man die Desktop-Datei unter support verwenden:

  • sudo ln -s /opt/pydcviewer/support/pydcviewer.desktop /usr/share/applications/pydcviewer.desktop

Viele Grüße
Thomas

5 „Gefällt mir“

Hallo Thomas,

Vielen Dank ich werde die Software testen.

Viele GrüßeAlois

Hi Thomas,
das Programm startet hier leider nicht:

/usr/bin/python3 /opt/pydcviewer/pydcviewer.py
Traceback (most recent call last):
  File "/opt/pydcviewer/pydcviewer.py", line 54, in <module>
    import tkinter            # just for resolution checking
ModuleNotFoundError: No module named 'tkinter'

Ich hatte es in einer VM unter Proxmox versucht …
Viele Grüße,
Michael

Hallo Michael,

je nach Installation ist tkinter (als Standardbibliothek) schon installiert. Wenn nicht:

  • sudo apt-get install python3-tk

Funktioniert es dann? Evtl. fehlen noch andere Standard-Bibliotheken, dann ergänze ich die Befehle noch.

Viele Grüße
Thomas

Hallo Thomas,
ok, mit dem Paket würde es jetzt vermutlich starten – wenn es denn eine Webcam gäbe. Die Meldung sieht jetzt so aus:

/usr/bin/python3 /opt/pydcviewer/pydcviewer.py
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video1): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video2): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video3): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video4): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video5): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video6): can't open camera by index
Traceback (most recent call last):
  File "/opt/pydcviewer/pydcviewer.py", line 1018, in <module>
    c = cap()
  File "/opt/pydcviewer/pydcviewer.py", line 573, in __init__
    self.devices = self._detectdev()
  File "/opt/pydcviewer/pydcviewer.py", line 591, in _detectdev
    sys.exit('no webcam found')
NameError: name 'sys' is not defined

Wäre natürlich schön, wenn die Ausgabe der vorletzten Zeile grafisch erfolgt?!
Ich muss es später auf echter Hardware testen…

Viele Grüße,
Michael

Hallo Thomas,

erste Rückmeldung meinerseits.

Die Software ist unter Ubuntu 20.04 installiert und nach dem Start sehe ich das Kamerabild. Was ich nicht sehe ist das Menü von dem auf Github die Rede ist.

Edit: Jetzt habe ich erkannt, was das Menü ist. Es sind die drei weißen Flecken links im Bild.

Wenn ich auf die Flecken klicke, dann wird das Objekt

oberere weißer Fleck: gespiegelt
mittlerer weißer Fleck: 180 ° Drehung
unterer weißer Fleck: ebenfalls 180 ° Drehung.

Nochmal Edit:

Es sieht so aus als machten die beiden oberen Buttons das Gleiche. Also drehen und spiegeln, der untere dreht um 180 °

und nochmal Edit:
Offenbar machen die drei Buttons manchmal das Gleiche (drehen und spiegeln) und manchmal verhalten sie sich so wie oben beschrieben.

Viele Grüße

Alois

Hallo Alois und Michael,

danke für die Tests - das hilft mir weiter.

Ich vermute, die drei weißen Flecken sind der Platzhalter für das Menü, wenn das Fenster zu klein ist, um das ganze Menü darzustellen (min. vertikal 680px). Kannst Du das Fenster vergrößern (bzw. mit der Taste f in den Vollbildmodus schalten)? Wenn nicht, ändere ich mal die Menü-Dimensionen.

Was nicht sein soll, ist, dass beim Platzhalter irgendetwas angeklickt werden kann - das habe ich jetzt geändert. Ein git pull sollte dieses Problem (und Michaels Fehlermeldung) lösen.

Viele Grüße
Thomas

PS: In der aktualisierten Version wird jetzt versucht, eine Mindestfensterhöhe von 680 Pixeln zu erreichen - dann sollte der Menüstreifen zu sehen sein. Für geringere Auflösungen lasse ich mir ggf. noch etwas einfallen - an sich ist das Menü von der Größe frei skalierbar.
Auf der Todo-Liste steht auch ein horizontaler Menü-Streifen, mal schauen, wann ich dazu komme.

Hi.

Leider nicht ganz:

git pull
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 31 (delta 6), reused 20 (delta 1), pack-reused 0
Entpacke Objekte: 100% (31/31), 620.42 KiB | 3.13 MiB/s, fertig.
Von https://gitlab.com/thoschi/pydcviewer
 + e68b3b2...b797011 master     -> origin/master  (Aktualisierung erzwungen)
fatal: Verweigere den Merge von nicht zusammenhängenden Historien.

Ich hab’s auch schon so versucht:
git pull origin master --allow-unrelated-histories
=>

Von https://gitlab.com/thoschi/pydcviewer
 * branch            master     -> FETCH_HEAD
KONFLIKT (hinzufügen/hinzufügen): Merge-Konflikt in pydcviewer.py
automatischer Merge von pydcviewer.py

Also das ganze Verzeichnis nochmal weg und neu geklont …

Viele Grüße,
Michael

Hallo Michael,
Mist, Du hast Recht. Ich habe gestern noch einmal neu initialisiert, weil er ein paar build-ordner mit ins tracking gepackt hatte.
Also bei der o.g. Fehlermeldung einfach nochmal den Ordner löschen und git-clone- Befehl wiederholen.
Sorry für die Mehrarbeit. Mache ich nicht nochmal :slight_smile:
Viele Grüße
Thomas

1 „Gefällt mir“

Zum Vergleich mal, wie es aussehen sollte:

Hallo Thomas,

so

sieht es jetzt bei mir aus.

Viele Grüße

Alois

Hej Thomas,
erst mal vielen nochmal vielen Dank für das wunderbare Programm! Ich hatte es in der alten Version während des Lockdowns gerne im Einsatz und habe sie auch in der Schule ausgerollt. Ich fand damals schon beeindruckend, wie man mit 600 Zeilen Code eine bessere Software machen kann, als die Hersteller mit ihrer Blähsoftware. :+1:

Habe nun auch die neue Version getestet - Cool, was das Ganze für Fortschritte macht.
Allerdings zeigt die neue Version nicht mehr meine Tischdokucam an.
In der alten Version wurde die erkannt:

image

In der neuen Version wird nur noch das Bild der Webcam angezeigt. Wenn ich per Menü weiterschalten will passiert entweder nichts oder das Programm stürzt so ab:

Traceback (most recent call last):
  File "/opt/pydcviewer/pydcviewer.py", line 1072, in <module>
    func()
  File "/opt/pydcviewer/pydcviewer.py", line 686, in nextdev
    self.resolutions = self.res_detect(self.device)
AttributeError: 'cap' object has no attribute 'res_detect'

BTW:
Anfangs hatte ich noch diesen Fehler:

python3 /opt/pydcviewer/pydcviewer.py
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video1): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video3): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video4): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video5): can't open camera by index
[ WARN:0] global /tmp/pip-req-build-eirhwqtr/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video6): can't open camera by index
Traceback (most recent call last):
  File "/opt/pydcviewer/pydcviewer.py", line 1075, in <module>
    w.check()                                    # make sure, window position/dimension is correct
  File "/opt/pydcviewer/pydcviewer.py", line 191, in check
    self.pos = self.root.winfo_x(), self.root.winfo_y()
  File "/usr/lib/python3.8/tkinter/__init__.py", line 1304, in winfo_x
    self.tk.call('winfo', 'x', self._w))
_tkinter.TclError: can't invoke "winfo" command: application has been destroyed

Der lässt sich aber inzwischen nicht mehr reproduzieren - python-tk war schon installiert.

Grüße
Michael

Hi. Hier funktionierte die OCR-Funktion nicht auf Anhieb. Ich hatte schon tesseract-ocr-deu nachinstalliert – reicht aber offenbar nicht. Ansonsten wurde eine uralte Logitech Webcam ootb erkannt, die man unter Win10 nicht mehr verwenden kann! Super Sache!
Michael

@sedding - ich bin derzeit zuhause mit nur einer Kamera - daher kann ich das nicht wirklich testen. Hier war der Name der Funktion noch nicht geändert - teste Mal, ob es das schon war.
Mir war das mit dem Kamerafenster ganz lieb, aber die deutliche Rückmeldung bei uns war: nerviger Klick, es dauert außerdem zu lange (Auflösungstest). Daher habe ich das ganze umorganisiert.

Der andere Fehler weist darauf hin, dass das Fenster geschlossen wurde (durch was auch immer), als das Programm noch versucht hat, die Auflösung mittels Tkinter festzustellen. Das sollte im Normalbetrieb nicht vorkommen.

Danke und viele Grüße
Thomas

@Michael - ich war über einen Artikel gestolpert - OCR with just 4 lines of code. Darum wollte ich das mal probieren.
Bei mir gab es das Paket tesseract (für Linux). Unter Windows muss man die entsprechende Binary installieren (z.B. von hier - da habe ich aber keine Ahnung).
Ein guter „Hinweis“ darauf, dass es funktionieren müsste: der Befehl „tesseract“ sollte von der Konsole aufgerufen werden können. Wenn das nicht geht, fehlt etwas.
Notiz an mich selbst: Knopf ausblenden, wenn das nicht geht :slight_smile:
Viele Grüße
Thomas

Hi, erst später hatte ich gesehen, dass ja auch gemeldet wurde „Check if qtpy is installed“. Könnte ein Anhaltspunkt sein…
Michael

@Michael ich habe gelesen, dass bei einem ähnlichen Fehler ein sudo apt-get install python3-pyqt5 hilft. Bei mir sind die Python-QT-Sachen mitinstalliert worden als Abhängigkeit. Aber wer weiß, wann und wie.
Hilft es denn, wenn Du sie installierst?
Viele Grüße
Thomas

Hallo Thomas,

bei mir funktioniert OCR auch nicht. python3-pyqt5 ist installiert und tesseract lässt sich von der Konsole aufrufen.

Gruß

Alois

Hallo!

OCR funktioniert bei mir. Habt ihr tesseract-ocr-deu installiert?

Beste Grüße

Thorsten