In sommige toepassingen van dronetechnologie kan het een enorme meerwaarde opleveren om met visuele markers te werken. Een oud maar nog steeds erg courant voorbeeld zijn de 1D barcodes of “streepjescodes. Daarnaast zijn QR-codes ook een erg bekend concept geworden. Het doel van zulke markers is om informatie te coderen die makkelijk uit te lezen is met een visie-sensor zoals een camera of laser scanner, en die kan dus bijvoorbeeld ook onder een drone gemonteerd zijn. In dit theoretisch artikel gaan we dieper in op de mechanismes achter dergelijke markers, alsook de mogelijke dronetoepassingen en software om gescande data mee te verwerken.

Een visuele marker is typisch erg goedkoop, makkelijk te gebruiken en heeft geen batterij of andere voedingsbron nodig. Barcodes gebruiken bijvoorbeeld slechts 1 ruimtelijke dimensie om de data te encoderen en kunnen daarom uitgelezen worden door relatief goedkope 1D laser scanners. Later verschenen ook 2D alternatieven, zoals QR codes en Datamatrix. Doordat deze markers 2 ruimtelijke dimensies gebruiken om informatie te coderen, zal een 1D laser scanner niet volstaan om ze uit te lezen. Hier heb je dus een camera of andere 2D scanner voor nodig. Het voordeel van 2D markers is dat je een grotere hoeveelheid data kan coderen op een beperkte oppervlakte.

Met de opkomst van autonome systemen en Augmented Reality (AR) verschenen er ook nieuwe toepassingen voor visuele markers. Door de positie en orientatie van een marker nauwkeurig in een beeld te detecteren, is het mogelijk om het object waarop de marker bevestigd is veel beter te gaan lokalizeren of tracken. In dergelijke toepassingen volstaat het meestal om markers te gebruiken die slechts een weinig hoeveelheid data representeren, maar die wel makkelijk en nauwkeurig te detecteren zijn in een camera beeld. Voorbeeld van zulke markers zijn ArUco markers, ChromaTag en AprilTag.

TAG Scanning Algorithms

Voor het decoderen van een visuele marker bestaan er specifieke decodeerschema’s per type marker. Het visie algoritme is typisch verantwoordelijk om het code patroon zonder ruis aan het decodeerschema te leveren. Voor een QR code moet het algoritme bijvoorbeeld gaan achterhalen voor elk vakje in de QR code of het “wit” of “zwart” is, “grijs” is geen optie.

Een belangrijk onderscheid tussen verschillende algoritmes is het vermogen om de visuele marker te detecteren in een beeld. Een algoritme dat geen detectie doet, zal elk stukje van het beeld apart proberen te decoderen, of veronderstellen dat de marker het volledige beeld omvat. Dit kan implicaties hebben zoals een lange verwerkingstijd of vals negatieve detecties. Het vermogen om de visuele marker te kunnen detecteren is voornamelijk van belang bij autonome systemen, waarbij het systeem zelf onvoldoende voorkennis heeft over de positie van de marker in het beeld. Dit is in tegenstelling tot een manuele scanner die door een menselijke operator eerst op de juiste positie (en orientatie) gericht moet worden.

QR Code

Een QR code is een 2D marker die een grote hoeveelheid data kan opslaan. Om een QR code te scannen heb je dus een 2D scanner zoals een camera nodig. Het voornaamste voordeel ten opzichte van 1D markers is dat ze gedecodeerd kunnen worden door camera’s met lagere resolutie.

Erg kenmerkend voor een QR code zijn de grote vierkante patronen in de 3 hoeken van de marker. Deze Finder Patterns dienen, zoals de naam al doet vermoeden, om de QR code makkelijk te kunnen vinden of detecteren.

(image source: http://www.keepautomation.com/tips/qr_code/functions_of_qr_code_function_patterns.html)

Verder bestaan er onder de QR code nog verschillende versies. Versie 1 heeft het minste aantal modules (21×21). Bij elke hogere versie komen er telkens 4 modules bij in beide dimensies. Met een hogere versie heb je dus een groter oppervlak nodig (of kleinere individuele modules), maar kan je wel meer data opslaan.

(image source: https://www.qrcode.com/en/about/version.html)

Software voor QR code scanning

Voor het scannen van QR codes in camera beelden bestaan verschillende software pakketten, zoals ZBAR, PyBoof (BoofCV) en Scandit. Deze programma’s zijn typisch erg makkelijk in gebruik omdat ze minimale input van de gebruiker verwachten. Sommige pakketten kunnen zelfs gebruikt worden om meerdere types van visuele markers te detecteren. Experimenten hebben echter aangetoond dat hun verwerkingssnelheid en detectievermogen niet optimaal zijn en dat ze voor sommige toepassingen zelfs onvoldoende zijn. Deze software pakketten zijn met andere woorden heel algemeen inzetbaar, maar moeten hiervoor inboeten op hun prestatie om QR codes accuraat en snel te scannen.

Als alternatief werd het MustangQR algoritme ontwikkeld, waarbij het wel mogelijk is om extra toepassing-specifieke informatie mee te geven. Deze informatie wordt dan door het algoritme gebruikt om betere en snellere resultaten te krijgen. Een voor de hand liggend voorbeeld van zulke extra informatie is de set van mogelijke QR code versies. Als in een bepaalde applicatie enkel QR codes van versie 1 of versie 4 van toepassing zijn, dan heeft het geen zin om andere QR versies in acht te nemen in het detectie algoritme. Deze extra informatie wordt in MustangQR gebruikt om de verwerkingssnelheid te verhogen alsook de vals negatieve detecties te verminderen.

Een ander voorbeeld is een schatting van de grootte van de QR code in het beeld. In logistieke toepassingen worden producten vaak gelabeld door een QR code met een constante grootte. Als naast de fysieke grootte van de QR code ook de afstand tussen de marker tot de camera bij benadering gekend is (bijvoorbeeld doordat de producten over een transportband rollen met een vaste gekende afstand tot de camera), dan kan het aantal pixels van de QR code in het beeld geschat worden op basis van de camera en lens parameters. Die informatie kan zorgen voor drastische verbeteringen in zowel de snelheid als de accuraatheid van het MustangQR algoritme.

Experimentele resultaten

Het MustangQR algoritme werd ontwikkeld door Flanders Make in het InWareDrones ICON project. In dit project werd een geautomatiseerde drone ingezet om een snelle en accurate inventarisatie te bekomen in een groot magazijn. In deze toepassing werden enkel QR codes van versie 1 gebruikt, aangezien de vereiste hoeveelheid data voor product identificatie beperkt is (18 digits in deze logistieke applicatie). Door een constante fysieke grootte van de QR code markers en een meting van de afstand tussen de drone en het rek, konden we eveneens een schatting van de grootte van de QR codes in de camerabeelden berekenen. Deze extra informatie leidde tot een betere prestatie voor MustangQR ten opzichte van andere software pakketten, zoals aangetoond is door onderstaande tabellen. Merk op dat MustangQR zelfs 100% van de verschillende QR codes kan scannen bij een vliegsnelheid van 4 m/s met een gelimiteerde sluitertijd (Exp. time). Met een te hoge sluitertijd bij deze vliegsnelheid – wat resulteert in wazige beelden – is MustangQR nog steeds significant beter dan de andere scanning programma’s.

BARCode

Barcodes, in hun verschillende vormen, zijn te terugvinden op bijna alle verpakkingen die op de markt verkrijgbaar zijn. Het detecteren en vervolgens decoderen van barcodes heeft daarom erg veel toepassingen. Een streepjescode bestaat uit een reeks donkere strepen op een lichte achtergrond die een identificatienummer of ID coderen (zie afbeelding). De meest bekende 1D-barcodetypes zijn het EAN- en UPC-type dat voornamelijk wordt gebruikt voor het etiketteren van consumentenproducten bij de plaatselijke supermarkt. In de afgelopen decennia zijn er veel meer geavanceerde tagging-technologieën ontstaan, waardoor meer informatie kan worden opgeslagen (bijv. 2D-barcodes, QR-codes, RadioFrequency ID (RFID) enzovoort).

source (https://upcgo.com/en/upc-ean-fnscu-i-asin/)

De grootste kracht van een barcode is dat ze snel en robuust kan worden gelezen met behulp van een laserscanner. Een andere mogelijke oplossing om streepjescodes te lezen, is door een passief 2D-visiesysteem te gebruiken in combinatie met een computervisie-algoritme om de streepjescodes te detecteren en te decoderen.

Tijdens het Inwaredrone-project werd een sessie uitgevoerd voor het verzamelen van gegevens in een echt magazijn, de gegevens bestaan uit een reeks foto’s die door de drone zijn gemaakt tijdens het scannen van de verschillende niveaus van het rek. De analyse van de gegevens met behulp van de drie bibliotheken zbar, zxing en scandit toont duidelijk aan dat voor deze toepassing (bijvoorbeeld het scannen van rekken met een drone) SCANDIT de beste keuze is om een nauwkeurige barcodedetector te krijgen. De verwerkingstijd voor de drie bibliotheken bereikte niet de gewenste verwerkingstijd om deze in realtime te kunnen draaien.

Uit de resultaten van het project werd ook geconcludeerd dat het aantal gedetecteerde barcodes zal afnemen naarmate de dronesnelheid toeneemt. Dit gedrag werd verwacht omdat een hogere snelheid artefacten aan de verkregen afbeeldingen zal toevoegen.

ARUCO Marker

Een ArUco marker is een 2D marker met zwarte en witte modules, omgeven door een zwarte rand. Het coderingsschema is erg triviaal: elke aparte ArUco marker wordt simpelweg gelinkt met een unieke ID puur op basis van de volgorde van witte en zwarte modules. Deze mapping wordt opgeslagen in een look up table, wat het decoderen erg simpel en snel maakt. Het aantal unieke ArUco markers is typisch beperkt (max 1024), wat dus ook impliceert dat er slechts tot 1024 unieke IDs kunnen gecodeerd worden door de collectie van ArUco markers. Het voornaamste doel van een ArUco marker is dan ook niet om data te encoderen, maar eerder om als visueel anker gebruikt te worden in AGV-, Robotics- en Artificial Reality-applicaties.

Er bestaan verschillende versies ArUco markers, waarbij het aantal modules varieert tussen 4×4, 5×5, 6×6 en 7×7. Anders dan bij de QR codes betekent een hoger aantal modules niet dat er meer unieke IDs kunnen opgeslagen worden. Bij ArUco markers betekent een hoger aantal modules dat het makkelijker is om 2 verschillende ArUco markers van elkaar te onderscheiden (meer verschillen tussen de modules van elk mogelijk paar ArUco markers). Het nadeel van een hoger aantal modules is natuurlijk dat de resolutie van de modules kleiner wordt.

Image: Different versions of ArUco markers

ArUco markers zijn ontworpen om makkelijk en efficient gedetecteerd te worden in een camerabeeld. De ID die de ArUco marker codeert is typisch gelinkt aan toepassingsspecifieke metadata. In een AGV toepassing rond geautomatiseerde navigatie kan bijvoorbeeld een ArUco marker met ID 23 op een bepaald punt in de omgeving geplaatst worden. De ArUco marker fungeert dan als visueel ankerpunt. In een database wordt opgeslagen wat de ruimtelijke coordinaten zijn van de ArUco marker met ID 23, zodat deze informatie gebruikt kan worden om de AGV te lokalizeren wanneer de ArUco marker door de AGV gedetecteerd wordt.

Naast de metadata die gelinkt is aan de ID, kan ook de pose van de ArUco marker in het camerabeeld erg nuttige (ruimtelijke) informatie geven over de omgeving. Indien de fysieke grootte van de ArUco marker gekend is, en de camera die de ArUco marker detecteert gecalibreerd is, kan op basis van de pose van de marker in het beeld de effectieve ruimtelijke pose van de camera (en bij uitbreiding de pose van de AGV) bepaald worden ten opzichte van de marker. Het detecteren van de pose in het camerabeeld gebeurt op basis van de vier hoekpunten van de ArUco marker.

Dezelfde informatie kan ook gebruikt worden in Artificial Reality toepassingen, waarbij de pose van de ArUco marker en haar gekende grootte het mogelijk maken om 3D objecten te simuleren in een 2D afbeelding.

Bron: https://docs.opencv.org/master/d5/dae/tutorial_aruco_detection.html Bron: https://github.com/fdcl-gwu/aruco-markers/blob/master/images/detected_cube.gif

Andere tags

In dit artikel werden drie erg klassieke voorbeelden van marker types uitgebreid toegelicht. Uiteraard bestaan er nog andere varianten. Welke variant het beste is hangt vaak af van de specifieke toepassing, alsook van de gebruiksvoorwaarden (1D versus 2D sensors, kleur versus zwart-wit, vereiste software om te scannen, …). Voor 1D barcodes bestaan er veel gestandaardiseerde varianten. Typisch geldt dat de lengte van de code toeneemt naarmate er meer data in kan worden opgeslagen. Het werkingsprincipe van het coderingsschema blijft echter steeds hetzelfde.

Ook voor de 2D QR code bestaan er vele alternatieven, zoals Datamatrix, PDF417, Vuforia, Aztec, Trillcode, etc. Deze 2D markers worden gebruikt om relatief grote hoeveelheden data te encoderen, maar verschillen onderling in coderingsschema, formaat, en/of andere kenmerken (zoals Finder Patterns). Gelijkaardig aan de ArUco marker bestaan er varianten zoals AprilTag, ChromaTag, ARToolKit, ARTag, TRIP, RUNE-tag en CCTag.

 

Auteur
PIETER DE CLERCQ
Pieter is een onderzoeker/ingenieur gespecialiseerd in het verwerken van camera en lidar data voor object detectie en perceptie voor autonome voertuigen. Hij heeft ervaring in deep learning en andere takken binnen AI, maar ook in de meer klassieke computer vision en signaalverwerking.

Auteur
Merwan Birem
Merwan is Research Engineer bij Flanders Make (Leuven, België) en werkt in het DecisionS core lab. Merwans onderzoek richt zich op de gebieden computervisie (2D en 3D), beeld- en videoverwerking, machine- en deep learning-algoritmen voor detectie, classificatie, kwaliteitscontroleprocessen en robottoepassingen

Contacteer EUKA/Flanders Make voor meer informatie
Updates en nieuwe artikels ontvangen in je mailbox? Schrijf je dan snel in voor onze nieuwsbrief!

Pin It on Pinterest