Hallo allemaal - ik ben hier nu bijna 3 dagen mee bezig geweest en heb eindelijk een methode ontwikkeld om video van de DJI FPV drone te importeren in Drone2Map met als doel orthomosaics en andere 2D-projecten te maken. Ik kon geen informatie of eerdere literatuur vinden over een methode om DJI's FPV drone te integreren in het Drone2Map-systeem, dus ik hoop dat dit de volgende persoon kan helpen die op zoek is naar een antwoord op deze vraag. Ik weet zeker dat er betere manieren zijn om te doen wat ik ga beschrijven, en als die er zijn, laat het me dan weten. Ook, als deze methode nuttig is voor andere drones, hoor ik dat graag. <\/P>
Voordat ik begin wil ik een paar aannames\/voorbehouden uitleggen. Deze methode is alleen ontwikkeld voor het converteren van video genomen onder een nadir- tot schuine hoek naar geotagde stilstaande beelden die geïmporteerd kunnen worden in Drone2Map. Het vereist minimale ervaring met command line interactie en python scriptbewerking, een paar derde partij applicaties naast Drone2Map, en opletten op je hoogte en timing tijdens de vlucht (de DJI FPV hoogteweergave is consequent onnauwkeurig en nutteloos). Ik ga ervan uit dat voor de meeste mensen de beelden worden vastgelegd op een constante hoogte boven vlak(ker) terrein. Dat kan een onjuiste aanname zijn, maar het is er één die in deze samenvatting wordt gemaakt. Voor dit proces moet je de DJI FPV drone ingesteld hebben om SRT data op te nemen.<\/EM> Dit staat standaard aan, maar kan aan- of uitgezet worden in het systeeminstellingenmenu. Deze methode vereist ook: VLC Media Player<\/STRONG>, Exif Tool<\/STRONG>, een scriptbewerkingssoftware <\/STRONG>(ik gebruik Visual Studio).<\/P>VLC Media Player is hier te vinden: https:\/\/www.videolan.org\/vlc\/download-windows.html<\/A><\/P>Exif Tool hier (download de Windows executable en installeer. Verander de applicatienaam van "exiftool(-k).exe" naar "exiftool.exe" en plaats die dan in de C:\Windows map): https:\/\/exiftool.org\/<\/A> <\/P>Visual Studio Code hier: https:\/\/code.visualstudio.com\/download<\/A> <\/P>Met dit alles klaar om te gaan, is het tijd om te beginnen. Het eerste is het creëren van een werkmap. Voor dit voorbeeld noem ik die "C:\User\YOUR_NAME\Documents\FPV Geotagging". Verplaats je data (video en .SRT) van je microSD kaart naar deze map. Maak nu kopieën van deze data, voor het geval dat. Ga naar deze site: https:\/\/djitelemetryoverlay.com\/srt-viewer\/<\/A>. Op de startpagina klik je op "Load File(s)" en upload je het .SRT bestand voor de video van de vlucht die je wilt converteren naar geotagde beelden. Bewonder de ongelooflijk coole visualisatie van je vluchtpad en data. Download de telemetriedata als CSV. Dit zal een registratie zijn van de GPS Lat\/Lon\/Hoogte (als je die laatste vertrouwt, ik persoonlijk niet) data voor elk frame van de video. Sla dit op in onze werkmap.<\/P>Open je FPV video in VLC Media Player. Open het menu Tools en selecteer Preferences. Linksonder in het Preferences venster dat net geopend is, staat een schakelaar om te wisselen tussen eenvoudige en geavanceerde voorkeuren. Selecteer geavanceerde voorkeuren. Scroll in het menu aan de linkerkant naar beneden naar het "Video" menu. Klik op het dropdownmenu om alle videovoorkeuren te zien, en klik op "Filters". Het rechterdeel van dit venster toont nu verschillende filters met selectievakjes ernaast. Vink degene aan genaamd "Scene video filter" (in mijn versie van VLC is dat de derde van boven in de tweede kolom). Met dat filter geselecteerd, ga terug naar het scrollbare menu links en klik op het pijltje naast "Filters". Scroll omlaag en selecteer "Scene filter". Verander de voorkeuren zodat het beeldformaat "JPG" is en het pad prefix onze werkmap is (in dit geval "C:\User\YOUR_NAME\Documents\FPV Geotagging"). Pas vervolgens de opnameverhouding aan volgens de framerate van je camera en hoeveel foto's je uit deze video wilt exporteren. DJI FPV neemt op met 60 frames per seconde, dus ik stel de opnameverhouding in op 60 om elke seconde video een foto vast te leggen. Voor meer informatie over hoe dit werkt en welke opnameverhouding je moet gebruiken, bekijk deze geweldige gids (https:\/\/www.vlchelp.com\/automated-screenshots-interval\/#:~:text=Expand%20further%2C%20Video%20%3E%20Filters%20%3E,would%20make%20it%2050%20seconds<\/A>). Klik onderaan rechts op Save en sluit dan het VLC venster. Open de video opnieuw in VLC en hij zou moeten beginnen met het exporteren van elke seconde een foto naar onze werkmap. Controleer of dit gebeurt. Zo niet, raadpleeg dan de eerder gelinkte bron. Elk frame zou geëxporteerd moeten worden als een afbeelding genaamd "scene00001.jpg", "scene00061.jpg", "scene00121.jpg", enzovoort. De nummers na "scene" corresponderen met het frame in de video waaruit ze zijn vastgelegd (bijv., "scene0001.jpg" is een JPG afbeelding van het eerste frame van de video). Met deze opgeslagen in de map is het tijd om de afbeeldingen te geotaggen. <\/P>Open Visual Studio Code, evenals de eerder opgeslagen CSV. Als je VS Code nog moet instellen, doe dat dan nu. Er is veel documentatie online over hoe dat moet. Gebruik je een andere codebewerkingssoftware, negeer dan dit deel .<\/P>Aangenomen dat je Microsoft Excel gebruikt, ga terug naar de CSV, maak een nieuwe kolom naast de "FRAMECNT" kolom genaamd "File Name". Markeer de frame telling waarden in de "FRAMECNT" kolom, klik rechts en selecteer "Format cells". Kies in het menu links "Special" en dan "ZIP Code" onder de kolom "Type". Dit voegt leidende nullen toe aan onze frame telling. Er zijn andere manieren om dit te doen, dat weet ik, en als jij een betere methode hebt post die dan alsjeblieft. Dit is gewoon een snelle manier om dit te doen. Maak in de eerste cel onder "File Name" een formule om de naam van ons bestand opnieuw samen te stellen; we willen bijvoorbeeld dat "scene00001.jpg" in de eerste cel onder "File Name" staat, "scene00061.jpg" in de tweede enzovoort. Zorg ervoor dat je deze plakt of maakt als Waarden alleen in een nieuwe kolom voor deze namen. Maak een nieuw blad binnen deze CSV aan en open een Windows Verkenner venster. Navigeer naar de werkmap. Sorteer alle bestanden op naam en markeer alle drone afbeeldingsbestanden (en alleen<\/EM> die afbeeldingen). Houd shift ingedrukt, klik rechts en selecteer "Copy as path..." Keer terug naar Excel en ons lege blad. Plak de lijst met bestanden erin. Maak weer een nieuwe kolom genaamd "File Name", en haal daaruit alleen bestandsnamen uit het einde van het pad dat we zojuist geplakt hebben (met bijvoorbeeld "=RIGHT(A2,14)"). Sleep die formule helemaal naar beneden door alle rijen heen. Zorg ervoor dat je deze kolom ook plakt als Waarden). Maak vijf nieuwe kolommen genaamd "LATITUDE", "LAT REF", "LONGTIUDE", "LON REF", en "ALTITUDE" aan. Gebruik X of V lookup om lat, long en hoogte waarden voor elk bestand terug te halen met behulp van de referentiepunten uit beide kolommen genaamd "File Name" . Vul in Lat/Lon Ref kolommen N/S of E/W in respectievelijk (zie: https:\/\/exiftool.org\/faq.html#Q14<\/A> voor uitleg hierover). Er zijn misschien betere/makkelijkere/beter uitgelegde manieren om dit te doen; zoek daarvoor Microsoft's ondersteuningspagina's over X- en V-lookups op als je wilt leren hoe dit werkt. Mijn excuses voor eventuele verwarring hierover; het uiteindelijke doel is een lijst met lat/lon/hoogte waarden per bestand wat bereikt kan worden door bovenstaande stappen te volgen. Als dit klaar is sla dan dit tabblad apart op als CSV in onze werkmap onder naam "SRT_Telemtry.csv".<\/P> <\/P>Ga terug naar Visual Studio Code en plak onderstaande codeblok:<\/P> <\/P> <\/P> <\/P>import os import csv with open('F:\/Drone Footage \/05.10.2022 \/Frame_Geotagging_Data.csv','r') as file: reader=csv.DictReader(file) for lyrname in reader: picture_filename = lyrname['File Name'] gps_latitude = lyrname['Latitude'] gps_longitude = lyrname['Longitude'] gps_altitude = '20' gps_lat_ref = lyrname['Lat Ref'] gps_lon_ref = lyrname['Lon Ref'] command_string = f'exiftool -GPSLatitude="{gps_latitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLatitudeRef="{gps_lat_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitude="{gps_longitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitudeRef="{gps_lon_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSAltitude="{gps_altitude}" {picture_filename}' os.system(command_string)<\/code><\/pre> <\/P> <\/P> <\/P> Verander het pad naar jouw eigen werkmap (de string na het commando "open" op regel 3) en sla dit script op in onze werkmap onder naam "batch_exif_writing.py" . Open een command terminal en verander je directory naar die werkmap (met bijvoorbeeld: "cd C:\Users\YOUR_NAME\Documents\FPV Geotagging"). Typ vervolgens "python batch_exif_writing.py" in en druk op enter. Je zou nu berichten moeten zien verschijnen zoals "1 image has been updated" terwijl al jouw bestanden geotagd worden.<\/P>Zodra het script klaar is met draaien (mijn computer deed er ongeveer 5 minuten over), zijn jouw afbeeldingen nu geotagd en kunnen ze geladen worden in Drone2Map! Hoe dan ook, ik hoop dat deze gids iemand helpt daarbuiten op zoek om de DJI FPV drone en Drone2Map te gebruiken. Ik ben nog bezig met het verwerken van de beelden om eventuele artefacten/ongewilde delen van de beelden uit het opnameproces te verwijderen. Maar dat is een onderwerp voor een andere dag. Laat me alsjeblieft weten als je bewerkingen/suggesties/opmerkingen/kritieken hebt over dit proces. Ik weet zeker dat er gemakkelijkere manieren zijn om dit te doen, maar dit is wat voor mij werkte en ik moest het in een vacuüm doen. Dank je wel!<\/P>
Exif Tool hier (download de Windows executable en installeer. Verander de applicatienaam van "exiftool(-k).exe" naar "exiftool.exe" en plaats die dan in de C:\Windows map):
Visual Studio Code hier:
Met dit alles klaar om te gaan, is het tijd om te beginnen. Het eerste is het creëren van een werkmap. Voor dit voorbeeld noem ik die "C:\User\YOUR_NAME\Documents\FPV Geotagging". Verplaats je data (video en .SRT) van je microSD kaart naar deze map. Maak nu kopieën van deze data, voor het geval dat. Ga naar deze site:
Open je FPV video in VLC Media Player. Open het menu Tools en selecteer Preferences. Linksonder in het Preferences venster dat net geopend is, staat een schakelaar om te wisselen tussen eenvoudige en geavanceerde voorkeuren. Selecteer geavanceerde voorkeuren. Scroll in het menu aan de linkerkant naar beneden naar het "Video" menu. Klik op het dropdownmenu om alle videovoorkeuren te zien, en klik op "Filters". Het rechterdeel van dit venster toont nu verschillende filters met selectievakjes ernaast. Vink degene aan genaamd "Scene video filter" (in mijn versie van VLC is dat de derde van boven in de tweede kolom). Met dat filter geselecteerd, ga terug naar het scrollbare menu links en klik op het pijltje naast "Filters". Scroll omlaag en selecteer "Scene filter". Verander de voorkeuren zodat het beeldformaat "JPG" is en het pad prefix onze werkmap is (in dit geval "C:\User\YOUR_NAME\Documents\FPV Geotagging"). Pas vervolgens de opnameverhouding aan volgens de framerate van je camera en hoeveel foto's je uit deze video wilt exporteren. DJI FPV neemt op met 60 frames per seconde, dus ik stel de opnameverhouding in op 60 om elke seconde video een foto vast te leggen. Voor meer informatie over hoe dit werkt en welke opnameverhouding je moet gebruiken, bekijk deze geweldige gids (
Open Visual Studio Code, evenals de eerder opgeslagen CSV. Als je VS Code nog moet instellen, doe dat dan nu. Er is veel documentatie online over hoe dat moet. Gebruik je een andere codebewerkingssoftware, negeer dan dit deel .<\/P>
Aangenomen dat je Microsoft Excel gebruikt, ga terug naar de CSV, maak een nieuwe kolom naast de "FRAMECNT" kolom genaamd "File Name". Markeer de frame telling waarden in de "FRAMECNT" kolom, klik rechts en selecteer "Format cells". Kies in het menu links "Special" en dan "ZIP Code" onder de kolom "Type". Dit voegt leidende nullen toe aan onze frame telling. Er zijn andere manieren om dit te doen, dat weet ik, en als jij een betere methode hebt post die dan alsjeblieft. Dit is gewoon een snelle manier om dit te doen. Maak in de eerste cel onder "File Name" een formule om de naam van ons bestand opnieuw samen te stellen; we willen bijvoorbeeld dat "scene00001.jpg" in de eerste cel onder "File Name" staat, "scene00061.jpg" in de tweede enzovoort. Zorg ervoor dat je deze plakt of maakt als Waarden alleen in een nieuwe kolom voor deze namen. Maak een nieuw blad binnen deze CSV aan en open een Windows Verkenner venster. Navigeer naar de werkmap. Sorteer alle bestanden op naam en markeer alle drone afbeeldingsbestanden (en alleen<\/EM> die afbeeldingen). Houd shift ingedrukt, klik rechts en selecteer "Copy as path..." Keer terug naar Excel en ons lege blad. Plak de lijst met bestanden erin. Maak weer een nieuwe kolom genaamd "File Name", en haal daaruit alleen bestandsnamen uit het einde van het pad dat we zojuist geplakt hebben (met bijvoorbeeld "=RIGHT(A2,14)"). Sleep die formule helemaal naar beneden door alle rijen heen. Zorg ervoor dat je deze kolom ook plakt als Waarden). Maak vijf nieuwe kolommen genaamd "LATITUDE", "LAT REF", "LONGTIUDE", "LON REF", en "ALTITUDE" aan. Gebruik X of V lookup om lat, long en hoogte waarden voor elk bestand terug te halen met behulp van de referentiepunten uit beide kolommen genaamd "File Name" . Vul in Lat/Lon Ref kolommen N/S of E/W in respectievelijk (zie:
<\/P>
Ga terug naar Visual Studio Code en plak onderstaande codeblok:<\/P>
import os import csv with open('F:\/Drone Footage \/05.10.2022 \/Frame_Geotagging_Data.csv','r') as file: reader=csv.DictReader(file) for lyrname in reader: picture_filename = lyrname['File Name'] gps_latitude = lyrname['Latitude'] gps_longitude = lyrname['Longitude'] gps_altitude = '20' gps_lat_ref = lyrname['Lat Ref'] gps_lon_ref = lyrname['Lon Ref'] command_string = f'exiftool -GPSLatitude="{gps_latitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLatitudeRef="{gps_lat_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitude="{gps_longitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitudeRef="{gps_lon_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSAltitude="{gps_altitude}" {picture_filename}' os.system(command_string)<\/code><\/pre> <\/P> <\/P> <\/P> Verander het pad naar jouw eigen werkmap (de string na het commando "open" op regel 3) en sla dit script op in onze werkmap onder naam "batch_exif_writing.py" . Open een command terminal en verander je directory naar die werkmap (met bijvoorbeeld: "cd C:\Users\YOUR_NAME\Documents\FPV Geotagging"). Typ vervolgens "python batch_exif_writing.py" in en druk op enter. Je zou nu berichten moeten zien verschijnen zoals "1 image has been updated" terwijl al jouw bestanden geotagd worden.<\/P>Zodra het script klaar is met draaien (mijn computer deed er ongeveer 5 minuten over), zijn jouw afbeeldingen nu geotagd en kunnen ze geladen worden in Drone2Map! Hoe dan ook, ik hoop dat deze gids iemand helpt daarbuiten op zoek om de DJI FPV drone en Drone2Map te gebruiken. Ik ben nog bezig met het verwerken van de beelden om eventuele artefacten/ongewilde delen van de beelden uit het opnameproces te verwijderen. Maar dat is een onderwerp voor een andere dag. Laat me alsjeblieft weten als je bewerkingen/suggesties/opmerkingen/kritieken hebt over dit proces. Ik weet zeker dat er gemakkelijkere manieren zijn om dit te doen, maar dit is wat voor mij werkte en ik moest het in een vacuüm doen. Dank je wel!<\/P>
OMG this is amazing @RyanWalter . gonna try this out and let you know how it goes!
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.