3.1. Combineren van 3D posities met Unreal digitale representatie
Wanneer we de X en Y as vastleggen, de pixel positie van 4 punten bepalen en de hoogte van de camera (in cm) ingeven, kan de XYZ positie van objecten in de ruimte bepaald worden.
Digital twin
Hitlab maakte een digital twin backbone in Unreal Unreal Engine | The most powerful real-time 3D creation tool .
In de code zorgt een python script voor het streamen van de3D posities welke door het unreal script vertaald worden door verplaatsingen in 3D
Het object Staat best binnen de afgezette ruimte en lager dan de camera.
Import RGB beeld van de camera met resolutie 1920 x 1080 en een frame rate van 30 frames per second. De 3D resolutie is gelimiteerd tot 1280 x 720 pixels.
Beeld aangeboden voor object detectie aan een resolutie van 640 x 480 pixels en een frame rate tussen de 30 en 60 fps. De keuze van resolutie is afhankelijk van het neurale netwerk en de camera setting. In de foto worden ook de XYZ coordinaten weergegeven. De Z-positie hier is gelijk aan 0, gezien het object op het grondvlak staat?
De tabellen hieronder geven een indicatie welke resoluties geselecteerd kunnen worden voor de realsense camera’s
Resolution Configuration Options on Real Sense D435 for Raspberry Pi-4 4 GB RAM
Afhankelijk van de keuze wordt en ander formaat aan beeld aangeboden aan het AI model. Wanneer een formaat gekozen wordt dat niet ondersteund wordt door de camera, dan wordt de stream in veel gevallen niet opgestart.
Eenmaal een stream gekozen worden de foto’s aangeboden aan het neuraal netwerk. Zoals in onderstaande illustratie is elke pixel in de foto een aparte node in het model. Dus om een beeld van 640 x 480 pixels te verwerken heb je een model met 307200 input nodig. In veel gevallen is een model getraind om een range van imput te aanvaarden. Voor het Yolo model moet de breedte en hoogte een veelvoud van 32 zijn. De RGB beelden op resolutie 1920 x 1080 kunnen niet gebruikt worden want 1080 is geen veelvoud van 32. Zelfde met 1280 x 720 is 720 geen veelvoud van 32. De volgende resolutie van 848 x 480 is 848 geen veelvoud van 32. Resolutie van 640 x 480 is de eerste resolutie die een veelvoud is van 32.
Deze resolutie werd gekozen omdat het “out of the box” het minste problemen geeft in de setup. De camera ondersteund deze resolutie en het Yolo model is geschikt om deze beelden te verwerken.
https://medium.com/@basu.preetam/what-is-deep-learning-62ea755f8c03
Een bemerking hierbij is dat de aspect ratio: de verhouding in pixels tussen de breedte en hoogte van het beeld is verschillend tussen 1920 x 1080 en 640 x 480. Dus in het beeld van de detectie hierboven zijn de zijkanten “weggeknipt” in vergelijking met het originele beeld in volle resolutie.
Dus na kalibratie van de setup, keuze van een geschikte resolutie, het opstarten van de beelden stroom, detectie van de objecten, berekening van de 3D posities kunnen deze gegevens naar de digitale versie doorgestuurd worden. Zoals hieronder.
De schaduw hier is verbonden met het object wat een indicatie kan zijn dat het object op het grondvlak staat.
Wanneer de camera, AI model en Unreal representatie allemaal op hetzelfde toestel gestart worden kan een verplaatsing in de echte wereld direct gevisualiseerd worden in de virtuele wereld.
Bij een tweede positie wordt het object op een hoogte geplaatst. Hier op een doos.
Het python script detecteerd het object met Yolo en door middel van de dieptefoto van de realsense en geometrie worden de QYZ coordinaten bepaald. Hier staat het object 15 hoog.
Deze gegevens worden opnieuw gevisualiseerd in Unreal.
Hier zien we dat de schaduw niet verbonden is met het object, wat een indicatie kan zijn dat het object niet op het grondvlak staat.