Ergebnis 1 bis 6 von 6

Thema: QR-Code per Shell/CMD auslesen

  1. #1
    Avatar von syrius
    Registriert
    Mar 2015
    Beiträge
    2,124
    Gefällt mir!
    1,233
    Du gefällst: 2,816

    QR-Code per Shell/CMD auslesen

    Moin,

    arbeite aktuell an einem Archivier-/Sortiersystem für gescannte Dokumente. Gehen wir davon aus, dass 1000 Seiten eingescannt werden woraus ein 1000 seitiges PDF entsteht. Jetzt gehe ich her, zerteile das PDF auf seine einzelnen Seiten, konvertiere jede in ein TIF und lese die QR-Codes aus um zusammengehörige Seiten wieder zu einem einzelnen PDF zu mergen. Da die zu scannenden Seiten nicht immer von mir selbst gedruckt werden und sich daher die Qualität stark unterscheiden kann kommt es vor, dass nicht immer der QR-Code erkannt bzw. ausgelesen wird.

    Jetzt habe ich allerdings eine Webseite gefunden, die so ein Beispiel für ein nicht auslesbaren QR, trotzdem korrekt auslesen konnte (online-barcode-reader.inliteresearch.com). Da würde ich auch gern hin kommen.

    Mein Vorgehen aktuell ist wie folgt:

    1. PDF zerteilen
    Code:
    pdftk ${PDF_TEMP} burst output ${HOMEDIR}/${PDF_REAL_FILENAME}_%05d.pdf
    2. PDF in TIF konvertieren
    Code:
    convert -monochrome -density 495 ${line_temp} ${HOMEDIR}/${TIFF_FILENAME}.tif
    3. QR-Code aus TIF auslesen
    Code:
    zbarimg "${line}"
    4. TIF in TXT konvertieren*
    Code:
    tesseract ${line} ${HOMEDIR}/${FILENAME_BLANK}
    (*) Sollte 3. fehlschlagen, wird versucht in TXT zu konvertieren und daraus per REGEX die gewünschten Inhalte zu finden/auszulesen. Funktioniert gut aber nicht zuverlässig genug.

    Da es sich um sehr sensitive Daten handelt, kommt ein externer Dienstleister (API) nicht in Frage.

    Jetzt ist die Frage... welche Möglichkeiten bleiben mir um das ganze noch weiter zu optimieren und alle QR-Codes zuverlässig ausgelesen zu bekommen.

    Danke vorab!

    Gruß
    SzeneBox.org bei Telegram https://t.me/szenebox

  2. Diesen Mitgliedern gefällt dieser Beitrag:

    FLX

  3. Werbung - Hier werben?
  4. #2
    Senior Avatar von Nimbus
    Registriert
    Oct 2015
    Beiträge
    561
    Gefällt mir!
    96
    Du gefällst: 573
    Jetzt ist die Frage... welche Möglichkeiten bleiben mir um das ganze noch weiter zu optimieren und alle QR-Codes zuverlässig ausgelesen zu bekommen.
    Ich würde jetzt einfach mal Stumpf mit der Auflösung (Eingabedaten vergrößern/verkleiner) oder mit Filtern/Kontrast/Helligkeit rumspielen um zu sehen, ob meine Ergebnisse besser werden.

    Alternativ könnte man mit OpenCV den QR-Code extrahieren (+ eventuell überarbeiten) bevor man ihn ausließt.

  5. Diesen Mitgliedern gefällt dieser Beitrag:


  6. #3
    THEMENSTARTER

    Avatar von syrius
    Registriert
    Mar 2015
    Beiträge
    2,124
    Gefällt mir!
    1,233
    Du gefällst: 2,816
    Durch etwas Spielen mit den Parametern bin ich jetzt schon weiter gekommen.

    Code:
    convert -density 300 file.pdf -blur 1x0.9 file.tif
    zbarimg -q --raw file.tif
    Durch das runterschrauben der Dichte und aktivieren des Blur-Effekt, lassen sich die weißen Pixel stopfen und es klappt bisher mit dem Auslesen.

    Vorher: Screenshot by Lightshot
    Nachher: Screenshot by Lightshot
    SzeneBox.org bei Telegram https://t.me/szenebox

  7. #4
    Senior
    Registriert
    Jan 2018
    Beiträge
    308
    Gefällt mir!
    170
    Du gefällst: 131
    statt blur zu benutzen um die löcher zu schließen würde ich mir eventuell mal morphologische filter angucken
    ich bin mir nicht mehr sicher welcher filter nochmal genau auf solch ein problem angewendet werden habe aber gerade "closing" im kopf

    einfach aus dem bild ein schwarz weiß bild machen => dann https://de.wikipedia.org/wiki/Schwellenwertverfahren anwenden => dann ?closing? dann solltest du die löcher noch etwas besser geschlossen haben

    vllt helfen dir die begriffe ja irgendwie weiter, habe gerade nicht soviel zeit sonst hätte ich dir das noch etwas genauer geschrieben

    - - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

    source:


    binary:



    binary + closing:


    binary + closing +dilate (mehrere unterschiedliche kernel verwendet):
    kernel größe 3

    kernel größe 5

    kernel größe 7


    bsp code.
    https://pastebin.com/RrUpuGaZ
    Geändert von masterholdy (18.01.2019 um 10:06 Uhr)

  8. Diesen Mitgliedern gefällt dieser Beitrag:


  9. #5
    THEMENSTARTER

    Avatar von syrius
    Registriert
    Mar 2015
    Beiträge
    2,124
    Gefällt mir!
    1,233
    Du gefällst: 2,816
    Danke euch beiden!

    Mit dem Spielen der Qualität sowie mit der weiteren Unterstützung von masterholdy konnten nun deutlich mehr QR-Codes ausgelesen werden. Es geht zwar nicht alles mit einem Oneliner aber besser als nichts und Zeit spielt für diesen Prozess weniger eine Rolle.

    Arbeite derzeit damit:

    Code:
    if [ -z "${qrcode}" ]; then convert -density 310 $line -blur 1x0.9 file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then convert -density 320 $line -blur 1x1.0 file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then convert -density 350 $line -blur 1x0.9 file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then convert -density 300 $line -blur 2x3.0 file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then convert -density 400 $line -blur 2x1.5 file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then convert -density 200 $line -blur 2x0.5 file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then convert -density 450 $line -negate -morphology Close Disk -negate file.tif; qrcode=`zbarimg -q --raw file.tif | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    Es gibt zwar von 1020 Seiten aktuell noch 8 Stück die nicht funktionieren aber das sollte auch noch werden.
    SzeneBox.org bei Telegram https://t.me/szenebox

  10. Diesen Mitgliedern gefällt dieser Beitrag:


  11. #6
    THEMENSTARTER

    Avatar von syrius
    Registriert
    Mar 2015
    Beiträge
    2,124
    Gefällt mir!
    1,233
    Du gefällst: 2,816
    Folgendes funktioniert jetzt für mich. Habe darüber 3774 Seiten ohne einen Fehler auslesen können.

    Code:
    if [ ! -f "${homedir}/file.tif" ]; then debug_scan="#00"; echo "Check #00"; convert -density 300 "$line" -blur 1x0.9 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#01"; echo "Check #01"; convert -density 350 "$line" -morphology Smooth Octagon:2 -blur 1x0.8 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#02"; echo "Check #02"; convert -density 350 "$line" -morphology Smooth Octagon:1 -blur 1x0.9 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#03"; echo "Check #03"; convert -density 310 "$line" -blur 1x0.9 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#04"; echo "Check #04"; convert -density 320 "$line" -blur 1x1.0 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#05"; echo "Check #05"; convert -density 350 "$line" -blur 1x0.9 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#06"; echo "Check #06"; convert -density 300 "$line" -blur 2x3.0 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#07"; echo "Check #07"; convert -density 400 "$line" -blur 2x1.5 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#08"; echo "Check #08"; convert -density 200 "$line" -blur 2x0.5 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#09"; echo "Check #09"; convert -density 400 "$line" -morphology Smooth Octagon:1 -blur 1x0.8 "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    if [ -z "${qrcode}" ]; then debug_scan="#10"; echo "Check #10"; convert -density 450 "$line" -negate -morphology Close Disk -negate "${homedir}/file.tif"; qrcode=`zbarimg -q --raw "${homedir}/file.tif" | grep -i "vertrag" | grep -o "[0-9]*$" | grep -E '\<[0-9]{6}\>'`; fi
    Fertig ist das ganze noch nicht. Mit $debug_scan wird die Häufigkeit der genutzten Methoden gemessen um später weiter zu optimieren.
    SzeneBox.org bei Telegram https://t.me/szenebox

Ähnliche Themen

  1. (BASH) - Arbeiten mit Timestamp MySQL / Shell
    Von syrius im Forum Entwicklung / Programmierung
    Antworten: 3
    Letzter Beitrag: 12.10.2019, 13:32
  2. (BATCH) - SHELL - finde alle PHP-Variablen in Datei
    Von noobee im Forum Entwicklung / Programmierung
    Antworten: 5
    Letzter Beitrag: 27.10.2018, 22:03
  3. (BASH) - Hex senden zum seriellen Port via Shell
    Von noobee im Forum Entwicklung / Programmierung
    Antworten: 2
    Letzter Beitrag: 27.10.2016, 21:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
SzeneBox.org... im Mittelpunkt der Szene!
© since 2015 szeneBOX.org - All Rights Reserved
Domains: www.szenebox.org