Swebrick

För dig som hittat tillbaka till LEGO®. En mötesplats för vuxna entusiaster.
Huvudmeny

Barad-Dur i QR-kod format

Startat av Teabox, 20 Juli 2023 kl. 10:08

Föregående ämne - Nästa ämne

Teabox

Jag fortsätter med att bygga QR-koder :) Här har ni mitt försök att kombinera en tavla på Barad-Dur med en QR-kod (som går till min instagram). Den är tänkt att stå tillsamman med min Middle Earth karta i Skaerbaek.


Barad-Dur in QR-code format by Teabox, on Flickr


Barad-Dur in QR-code format by Teabox, on Flickr


Barad-Dur in QR-code format by Teabox, on Flickr

Och som bonus så tänkte jag gå in lite i varför det fungera att leka med färger när man gör en QR-kod.

En bra QR-kod läsare tar hänsyn till att en QR-kod kan vara ojämnt upplyst. Dvs de mörka och ljusa partierna inte är exakt lika mörka/ljusa över hela QR-koden. Denna logiken gör att man kan ha olika färger med olika ljushet för de mörka och ljusa partierna :)

Exakt hur de olika kamera-apparna för våra mobiler kompensera för ojämnt upplyst QR-kod vet jag inte, men det finns ett populärt open source bibliotek, ZXing, som tillåter mig att studera koden för detta.

Så om vi börja med denna bilden:

t1_0_source.jpg

Första steget som görs är att göra om den till gråskala.

t1_1_grayscale.png

När detta görs så ändras "ljusheten" i pixlarna. Pixlarnas rödhet, grönhet och blåhet viktas olika när de görs om till gråa. Detta görs normalt för att våra ögon är olika känsliga för rött, grönt och blått ljus och jag antar att man vill att koden ska jobba med en bild som stämmer överens med hur våra ögon ser den.

Nedanför ser ni hur rött, grönt och blått behandlas olika. Grönt blir ljusare, medan blått blir mörkare.

greyscale.png

(Mer info om detta här https://www.tutorialspoint.com/dip/grayscale_to_rgb_conversion.htm
och på Wikipedia: https://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale )

Nästa steg är att göra bilden svart-vit. För att kompensera för ojämn belysning, delas bilden in i mindre rutor där varje ruta får sitt eget tröskelvärde för var som ska bli vitt respektive svart. (Om en ruta är väldigt jämn i ljusheten så tittar logiken på tidigare rutor för att bestämma tröskelvärde.)

t1_2_binarized_2.png

Här kan vi se att Dark blueish grey tolkas som vitt när det är omgärdat av svart, men som svart när det är bredvid en tan bit (Röd cirkel). Vi kan också se hur små variationer i ljushet i de svart bitarna tolkas som vita pixlar (Lila cirkel). Men så länge dessa felen inte blir för många så kan QR-kodens inbyggda felkorrigering kompensera för dem.

Den här logiken är anledningen till att jag har en mörk-orangea rad överst på ögat. Utan den linjen så kommer den orangea delen under tolkas som svart istället för vitt. Det är nämligen extra viktigt att det blir rätt med de tre stora rektangel hörn-bitarna. Det finns ingen felkorrigering i dem. Om en del av en blir svart där den borde vara vit eller tvärtom så kan det bli omöjligt för koden att "se" QR-koden.

Därefter fortsätter koden med att försöka hitta QR-koden i bilden och processa den, men detta kommer jag inte gå in på. Det enda som är värt att nämna nu, är att när den ska läsa av de olika data-rutorna, så tittar den enbart på en pixel i mitten av varje ruta. Så hela data-rutan behöver inte vara vit eller svart, det räcker alltså att bara en pixel i mitten är i rätt färg :)

Sen vill jag visa ett exempel på det som kan ställa till det som mest för QR-koder i LEGO, reflektioner! Här "försvinner", på grund av reflektioner i LEGO-bitarna, en av de tre viktiga hörn-bitarna och QR-koden kan inte hittas alls av koden.

error2.jpg


MrUzagi

Jag har funderat på hur QR-koder funkar ibland. lärorikt.  :)

Gideon

Väldigt intressant! Jag har också märkt att reflektioner varit det största problemet, har funderat på om det faktiskt vore bättre att bygga koder med plates istället för tiles så man får lite "anti glare"-yta?
Regionansvarig Gävle-Dala
Flickr   Instagram

Teabox

Tack för de fina orden :)

Citat från: Gideon skrivet 21 Juli 2023 kl. 10:19Väldigt intressant! Jag har också märkt att reflektioner varit det största problemet, har funderat på om det faktiskt vore bättre att bygga koder med plates istället för tiles så man får lite "anti glare"-yta?

Jag har inte gjort någon ordentlig Tiles vs Plate jämförelse, men under min "field research" på Örebro eventet märkte jag inte någon skillnad på Tiles eller Plates. Kan vara intressant att dyka djupare ner i dock :)



lindyhep

#5
Citat från: Teabox skrivet 21 Juli 2023 kl. 16:12Tack för de fina orden :)

Jag har inte gjort någon ordentlig Tiles vs Plate jämförelse, men under min "field research" på Örebro eventet märkte jag inte någon skillnad på Tiles eller Plates. Kan vara intressant att dyka djupare ner i dock :)

Det är ju fortfarande rätt "stora" ytor, även på en plate, som kan orsaka blänk. Skulle det kanske bli större skillnad om man använde baksidan på bitarna som yta utåt? Eller ställer det till andra problem i avläsningen när det är så ojämnt?

Härligt upplägg på det hela. Kombinationen qr-kod - bild och sen på det kombinationen i posten med info om hur det funkar. Alldeles lysande!