We gaan het vandaag over zbarimg hebben (uit de zbar suite van barcode tools) en zijn vermogen om QR code afbeeldingen te lezen. Daarbij beginnen we met een leesbare QR code afbeelding en laten deze geleidelijk aan degraderen, om te zien wat er gebeurd.
Met qrencode maken we QR code afbeeldingen en met zbar lezen we ze terug uit. Beide hulpprogramma's zijn beschikbaar in de standaard softwarebronnen van openSUSE Leap 15.4. En installeer je met de volgende opdracht:
dany@pindabook:~> sudo zypper install zbar qrencode
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
De volgende 8 NIEUWE pakketten zullen worden geïnstalleerd:
libGraphicsMagick3-config libGraphicsMagick-Q16-3 libGraphicsMagickWand-Q16-2 libwmf-0_2-7 libzbar0
libzbarqt0 qrencode zbar
8 nieuwe te installeren pakketten.
Totale downloadgrootte: 1,7 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 5,2 MiB worden
gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j):
Ophalen: libGraphicsMagick3-config-1.3.35-150300.3.3.1.x86_64 (Hoofd-opslagruimte) (1/8), 44,8 KiB
Ophalen: libGraphicsMagick3-config-1.3.35-150300.3.3.1.x86_64.rpm ..................[gereed (1,2 KiB/s)]
Ophalen: libwmf-0_2-7-0.2.12-150000.4.4.1.x86_64 (Hoofd-opslagruimte) (2/8), 141,3 KiB
Ophalen: libwmf-0_2-7-0.2.12-150000.4.4.1.x86_64.rpm ...........................................[gereed]
Ophalen: libzbar0-0.23.1-1.12.x86_64 (Hoofd-opslagruimte) (3/8), 126,3 KiB
Ophalen: libzbar0-0.23.1-1.12.x86_64.rpm ...........................................[gereed (1,8 MiB/s)]
Ophalen: qrencode-4.0.0-1.17.x86_64 (Hoofd-opslagruimte) (4/8), 49,9 KiB
Ophalen: qrencode-4.0.0-1.17.x86_64.rpm ........................................................[gereed]
Ophalen: libGraphicsMagick-Q16-3-1.3.35-150300.3.3.1.x86_64 (Hoofd-opslagruimte) (5/8), 1,2 MiB
Ophalen: libGraphicsMagick-Q16-3-1.3.35-150300.3.3.1.x86_64.rpm ...................[gereed (10,8 MiB/s)]
Ophalen: libzbarqt0-0.23.1-1.12.x86_64 (Hoofd-opslagruimte) (6/8), 38,2 KiB
Ophalen: libzbarqt0-0.23.1-1.12.x86_64.rpm .........................................[gereed (2,7 KiB/s)]
Ophalen: libGraphicsMagickWand-Q16-2-1.3.35-150300.3.3.1.x86_64 (Hoofd-opslagruimte)
(7/8), 87,2 KiB
Ophalen: libGraphicsMagickWand-Q16-2-1.3.35-150300.3.3.1.x86_64.rpm ............................[gereed]
Ophalen: zbar-0.23.1-1.12.x86_64 (Hoofd-opslagruimte) (8/8), 78,5 KiB
Ophalen: zbar-0.23.1-1.12.x86_64.rpm ...............................................[gereed (2,7 KiB/s)]
Controleren op conflicten tussen bestanden: ....................................................[gereed]
(1/8) Installeren van: libGraphicsMagick3-config-1.3.35-150300.3.3.1.x86_64 ....................[gereed]
(2/8) Installeren van: libwmf-0_2-7-0.2.12-150000.4.4.1.x86_64 .................................[gereed]
(3/8) Installeren van: libzbar0-0.23.1-1.12.x86_64 .............................................[gereed]
(4/8) Installeren van: qrencode-4.0.0-1.17.x86_64 ..............................................[gereed]
(5/8) Installeren van: libGraphicsMagick-Q16-3-1.3.35-150300.3.3.1.x86_64 ......................[gereed]
(6/8) Installeren van: libzbarqt0-0.23.1-1.12.x86_64 ...........................................[gereed]
(7/8) Installeren van: libGraphicsMagickWand-Q16-2-1.3.35-150300.3.3.1.x86_64 ..................[gereed]
(8/8) Installeren van: zbar-0.23.1-1.12.x86_64 .................................................[gereed]
We hebben als voorbeeld het volgende VCard tekstbestand gecodeerd
BEGIN:VCARD VERSION:4.0 FN:Dany Pinoy N:Pinoy;Dany; ORG:Pindanet TITLE:Oprichter URL:https://pindanet.be END:VCARD
Met qrencode genereren we verschillende QR code's voor elk van de foutcorrigerende niveaus, en vervolgens elk van de zwart-wit afbeeldingen grijs gemaakt met ImageMagick. Elke code had een blokgrootte van 3 pixels, de standaard van qrencode.
We maken vier QR code afbeeldingen met verschillende kwaliteiten:
dany@pindabook:~> for i in L M Q H; do qrencode -l "$i" -o bw"$i".png < pindanet; done
We converteren de aangemaakte QR code afbeeldingen van zwart-wit naar grijswaarden met de volgende ImageMagick opdrachtregel:
dany@pindabook:~> for i in L M Q H; do convert bw"$i".png -type Grayscale gray"$i".png; done
zbarimg had geen moeite met het lezen van de kleinste afbeelding, "grayL.png", hieronder getoond op zijn native 147x147 pixel grootte:
dany@pindabook:~> zbarimg grayL.png
Name Error (Connection ":1.81" is not allowed to own the service "org.linuxtv.Zbar" due to security policies in the configuration file)
QR-Code:BEGIN:VCARD
VERSION:4.0
FN:Dany Pinoy
N:Pinoy;Dany;
ORG:Pindanet
TITLE:Oprichter
URL:https://pindanet.be
END:VCARD
scanned 1 barcode symbols from 1 images in 0,01 seconds
...
Voor vervagingstests gebruikte we de ImageMagick vervagingsfunctie, waarbij we alleen de sigma variëren in stappen van 0,1 op "grayL.png" om een reeks afbeeldingen te produceren, die hieronder als voorbeeld worden getoond.
dany@pindabook:~> for i in $(LC_ALL=C seq 0.1 0.1 3); do convert grayL.png -blur 0x"$i" grayL_"$i".png; done
Bij welke sigma faalt zbarimg? Falen is in dit geval met exit code 4, wat betekent dat er geen barcode is gedetecteerd in één of meer van de afbeeldingen. Er zijn geen andere fouten opgetreden. We stuurden elk van de afbeeldingen naar zbarimg en registreerden de sigma en de exit code:
dany@pindabook:~> for j in $(LC_ALL=C seq 0.1 0.1 3); do zbarimg grayL_"$j".png &>/dev/null; echo "0x$j - $?"; done | column
0x0.1 - 0 0x0.6 - 0 0x1.1 - 4 0x1.6 - 4 0x2.1 - 4 0x2.6 - 4
0x0.2 - 0 0x0.7 - 0 0x1.2 - 4 0x1.7 - 4 0x2.2 - 4 0x2.7 - 4
0x0.3 - 0 0x0.8 - 0 0x1.3 - 4 0x1.8 - 4 0x2.3 - 4 0x2.8 - 4
0x0.4 - 0 0x0.9 - 0 0x1.4 - 4 0x1.9 - 4 0x2.4 - 4 0x2.9 - 4
0x0.5 - 0 0x1.0 - 0 0x1.5 - 4 0x2.0 - 4 0x2.5 - 4 0x3.0 - 4
Dus de sigma-drempel voor detecteerbaarheid in een onscherpe "grayL.png" ligt tussen 1,0 en 1,1:
Is het foutcorrectieniveau van invloed op de onscherpheidsdrempel? Om dat uit te zoeken hebben we bovenstaande oefening herhaald met de M-, Q- en H-beelden. De drie hogere foutcorrectieniveaus hadden bijna dezelfde iets hogere sigma-drempel:
Level Size Threshold L 147x147 1.0 - 1.1 M 159x159 1.3 - 1.4 Q 183x183 1.3 - 1.4 H 195x195 1.4 - 1.5
En het is indrukwekkend dat zbarimg deze wazige beelden correct kan lezen:
dany@pindabook:~> zbarimg grayH_1.4.png
Name Error (Connection ":1.176" is not allowed to own the service "org.linuxtv.Zbar" due to security policies in the configuration file)
QR-Code:BEGIN:VCARD
VERSION:4.0
FN:Dany Pinoy
N:Pinoy;Dany;
ORG:Pindanet
TITLE:Oprichter
URL:https://pindanet.be
END:VCARD
...
We hebben heel wat QR code afbeeldingen aangemaakt. Voor we ze definitief verwijderen, controleren we of onze bestandsfilter wel de juiste bestanden zal wissen. Beter voorkomen, dan spijt hebben.
dany@pindabook:~> ls bw*.png gray{L,M,Q,H}*.png
Blijkt uit het weergegeven overzicht dat er geen bestanden worden weergegeven die we nog nodig hebben, kunnen we ze verwijderen met:
dany@pindabook:~> rm bw*.png gray{L,M,Q,H}*.png
De geïnstalleerde software en zijn afhankelijkheden die niet door andere software op jouw systeem wordt gebruikt, verwijder je met de opdracht:
dany@pindabook:~> sudo zypper remove -u zbar qrencode
[sudo] wachtwoord voor root:
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
De volgende 8 pakketten zullen worden VERWIJDERD:
libGraphicsMagick3-config libGraphicsMagick-Q16-3 libGraphicsMagickWand-Q16-2 libwmf-0_2-7 libzbar0
libzbarqt0 qrencode zbar
8 te verwijderen pakketten.
Na de bewerking zal 5,2 MiB worden vrijgemaakt.
Doorgaan? [j/n/v/...? alle opties tonen] (j):
(1/8) Verwijderen van qrencode-4.0.0-1.17.x86_64 ...............................................[gereed]
(2/8) Verwijderen van zbar-0.23.1-1.12.x86_64 ..................................................[gereed]
(3/8) Verwijderen van libzbarqt0-0.23.1-1.12.x86_64 ............................................[gereed]
(4/8) Verwijderen van libGraphicsMagickWand-Q16-2-1.3.35-150300.3.3.1.x86_64 ...................[gereed]
(5/8) Verwijderen van libzbar0-0.23.1-1.12.x86_64 ..............................................[gereed]
(6/8) Verwijderen van libGraphicsMagick-Q16-3-1.3.35-150300.3.3.1.x86_64 .......................[gereed]
(7/8) Verwijderen van libwmf-0_2-7-0.2.12-150000.4.4.1.x86_64 ..................................[gereed]
(8/8) Verwijderen van libGraphicsMagick3-config-1.3.35-150300.3.3.1.x86_64 .....................[gereed]