Hola a todos: He estado trabajando en esto durante casi 3 días y finalmente he desarrollado una metodología para importar video del dron DJI FPV a Drone2Map con el propósito de crear ortomosaicos y otros proyectos 2D. No pude encontrar información ni literatura previa sobre una metodología para integrar el dron DJI FPV en el sistema Drone2Map, así que espero que esto pueda ayudar a la próxima persona que busque una respuesta a esta pregunta. Estoy seguro de que hay mejores formas de hacer lo que estoy a punto de detallar, y si las hay, por favor háganmelo saber. Además, si esta metodología tiene alguna utilidad para otros drones, por favor avísenme. <\/P>
Antes de comenzar, quería exponer un par de suposiciones\/advertencias. Esta metodología solo se ha desarrollado para convertir video tomado en un ángulo de nadir a oblicuo en imágenes fijas georreferenciadas que pueden ser importadas a Drone2Map. Requiere un nivel mínimo de comodidad con la interacción por línea de comandos y edición de scripts en python, un par de aplicaciones de terceros además de Drone2Map, y prestar atención a tu altitud y tiempos durante el vuelo (la lectura de altitud del DJI FPV es consistentemente inexacta e inútil). Asumo que, para la mayoría de las personas, las imágenes se capturarán a una altura constante sobre terreno plano (o casi). Podría ser una suposición incorrecta, pero es la que se hace en este resumen. Para que este proceso funcione, debes tener el dron DJI FPV configurado para grabar datos SRT.<\/EM> Esto está activado por defecto, pero puede activarse o desactivarse en el menú de configuración del sistema. Esta metodología también requiere: VLC Media Player<\/STRONG>, Exif Tool<\/STRONG>, un software para editar scripts<\/STRONG> (yo uso Visual Studio).<\/P>VLC Media Player se puede encontrar aquí: https:\/\/www.videolan.org\/vlc\/download-windows.html<\/A><\/P>Exif Tool aquí (descarga el ejecutable para Windows e instálalo. Cambia el nombre de la aplicación de "exiftool(-k).exe" a "exiftool.exe" y luego colócalo en el directorio C:\Windows): https:\/\/exiftool.org\/<\/A> <\/P>Visual Studio Code aquí: https:\/\/code.visualstudio.com\/download<\/A> <\/P>Con todo esto listo, es hora de comenzar. Lo primero es crear un directorio de trabajo. Para este ejemplo, lo llamaré "C:\User\YOUR_NAME\Documents\FPV Geotagging". Mueve tus datos (video y .SRT) desde tu tarjeta microSD a este directorio. Haz copias de estos datos ahora, por si acaso. Ve a este sitio: https:\/\/djitelemetryoverlay.com\/srt-viewer\/<\/A>. En la página principal, haz clic en "Load File(s)" y sube el archivo .SRT del video del vuelo que quieres convertir en imágenes georreferenciadas. Maravíllate con la increíble visualización del trayecto y los datos de tu vuelo. Descarga los datos telemétricos como CSV. Este será un registro del GPS Latitud/Longitud/Altitud (si confías en esta última, personalmente yo no) para cada cuadro del video. Guarda esto en nuestro directorio de trabajo.<\/P>Abre tu video FPV en VLC Media Player. Abre el menú Herramientas y selecciona Preferencias. En la esquina inferior izquierda de la ventana de Preferencias que acaba de aparecer habrá un interruptor para cambiar entre preferencias simples y avanzadas. Selecciona preferencias avanzadas. En el menú a la izquierda, desplázate hacia abajo hasta el menú "Video". Haz clic en el menú desplegable para ver todas las preferencias de video y haz clic en "Filtros". La mitad derecha de esta ventana debería listar varios filtros con casillas al lado de cada uno. Marca el llamado "Scene video filter" (en mi versión de VLC, es el tercero desde arriba en la segunda columna). Con ese filtro seleccionado, vuelve al menú desplazable a la izquierda y haz clic en la flecha desplegable junto a la palabra "Filters". Desplázate hacia abajo y selecciona "Scene filter". Cambia las preferencias para que el formato de imagen sea "JPG" y el prefijo del camino del directorio sea nuestro directorio de trabajo (en este caso "C:\User\YOUR_NAME\Documents\FPV Geotagging"). Luego ajusta la proporción de grabación según la tasa de cuadros por segundo de tu cámara y cuántas fotos quieres exportar desde este video. DJI FPV graba a 60 cuadros por segundo, así que configuré la proporción a 60 para capturar una foto cada segundo del video. Para más información sobre cómo funciona esto y qué proporción usar, consulta esta excelente guía (https:\/\/www.vlchelp.com\/automated-screenshots-interval\/#:~:text=Expand%20further%2C%20Video%20%3E%20Filters%20%3E,would%20make%20it%2050%20seconds<\/A>). Haz clic en Guardar en la esquina inferior derecha y luego cierra la ventana VLC. Vuelve a abrir el video en VLC y debería comenzar a exportar una foto cada segundo en nuestro directorio de trabajo. Verifica que esto esté sucediendo. Si no es así, consulta el recurso enlazado anteriormente. Cada cuadro debería exportarse como una imagen llamada "scene00001.jpg", "scene00061.jpg", "scene00121.jpg", etc. Los números después de "scene" corresponden al cuadro del video del cual fueron capturados (es decir, "scene0001.jpg" es una imagen JPG del primer cuadro del video). Con estas guardadas en el directorio, es hora de georreferenciar las imágenes. <\/P>Abre Visual Studio Code, así como el CSV que guardamos antes. Si necesitas configurar VS Code, hazlo ahora. Hay mucha documentación online sobre cómo hacerlo. Si usas otro software para editar código, simplemente ignora esta parte .<\/P>Asumiendo que usas Microsoft Excel, vuelve al CSV, crea una nueva columna junto a la columna "FRAMECNT" llamada "File Name". Resalta los valores del conteo de cuadros en la columna "FRAMECNT", haz clic derecho y selecciona "Format cells" (Formato de celdas). En el menú izquierdo selecciona "Special" (Especial) y luego "ZIP Code" bajo la columna "Type" (Tipo). Esto añadirá ceros delante al conteo de cuadros. Sé que hay otras formas de hacer esto; si tienes un método mejor por favor compártelo. Esta es solo una forma rápida y sencilla. En la primera celda debajo de "File Name", crea una expresión para reconstruir el nombre del archivo; en este caso queremos que "scene00001.jpg" esté en la primera celda debajo de "File Name", luego "scene00002.jpg", etcétera. Asegúrate de copiar estos nombres o crear una nueva columna con estos nombres como Valores solamente. Crea una nueva hoja dentro del CSV y abre una ventana del Explorador de archivos Windows. Navega al directorio de trabajo. Ordena todos los archivos por nombre y resalta todos los archivos imagen del dron (y sólo<\/EM> las imágenes). Manteniendo presionada la tecla shift haz clic derecho y selecciona "Copy as path..." (Copiar como ruta...). Vuelve a Excel y nuestra hoja vacía. Pega la lista de archivos. Crea una nueva columna llamada nuevamente "File Name", y extrae los nombres desde el final de las rutas pegadas (la fórmula "=RIGHT(A2,14)" debería funcionar). Arrastra hacia abajo hasta completar todas las filas. Asegúrate también aquí copiar y pegar esta columna como Valores solamente). Crea cinco nuevas columnas llamadas "LATITUDE", "LAT REF", "LONGTIUDE", "LON REF", y "ALTITUDE". Usando una búsqueda X o V busca los valores latitud, longitud y altitud para cada archivo usando las columnas "File Name" como referencia. En las columnas Lat/Lon Ref ingresa N/S o E/W respectivamente (ver: https:\/\/exiftool.org\/faq.html#Q14<\/A> para explicación). Puede haber formas mejores/fáciles/mejor explicadas para hacer esto; consulta las páginas oficiales Microsoft sobre búsquedas X y V para más detalles. Disculpa cualquier confusión al respecto; el objetivo final aquí es obtener una lista con valores lat/lon/alt para cada archivo siguiendo lo expuesto aquí. Una vez hecho esto guarda esta pestaña como un CSV separado en nuestro directorio bajo el nombre "SRT_Telemtry.csv".<\/P> <\/P>Volviendo a Visual Studio, pega el siguiente bloque:<\/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> Cambia la ruta del archivo por tu propio directorio de trabajo (la cadena después del comando "open" en la línea 3) y guarda este script en nuestro directorio como "batch_exif_writing.py". Abre un terminal de comandos y cambia tu directorio al directorio de trabajo ("cd C:\Users\YOUR_NAME\Documents\FPV Geotagging"). Escribe "python batch_exif_writing.py" y presiona enter. Deberías ver mensajes continuos diciendo "1 image has been updated" aparecer en tu terminal mientras todos tus archivos son georreferenciados.<\/P>Una vez que termine el script (mi computadora tardó unos 5 minutos), tus imágenes estarán georreferenciadas y podrán cargarse en Drone2Map! En fin, espero que esta guía ayude a alguien ahí afuera buscando usar el dron DJI FPV y Drone2Map. Todavía estoy trabajando con las imágenes para limpiar cualquier artefacto / partes no deseadas de las imágenes del proceso de captura. Pero eso es un tema para otro día. Por favor, háganme saber si tienen ediciones / sugerencias / comentarios / críticas sobre este proceso. Estoy seguro de que hay formas más fáciles de hacer esto, pero esto fue lo que funcionó para mí y tuve que hacerlo en un vacío. ¡Gracias!<\/P>
Exif Tool aquí (descarga el ejecutable para Windows e instálalo. Cambia el nombre de la aplicación de "exiftool(-k).exe" a "exiftool.exe" y luego colócalo en el directorio C:\Windows):
Visual Studio Code aquí:
Con todo esto listo, es hora de comenzar. Lo primero es crear un directorio de trabajo. Para este ejemplo, lo llamaré "C:\User\YOUR_NAME\Documents\FPV Geotagging". Mueve tus datos (video y .SRT) desde tu tarjeta microSD a este directorio. Haz copias de estos datos ahora, por si acaso. Ve a este sitio:
Abre tu video FPV en VLC Media Player. Abre el menú Herramientas y selecciona Preferencias. En la esquina inferior izquierda de la ventana de Preferencias que acaba de aparecer habrá un interruptor para cambiar entre preferencias simples y avanzadas. Selecciona preferencias avanzadas. En el menú a la izquierda, desplázate hacia abajo hasta el menú "Video". Haz clic en el menú desplegable para ver todas las preferencias de video y haz clic en "Filtros". La mitad derecha de esta ventana debería listar varios filtros con casillas al lado de cada uno. Marca el llamado "Scene video filter" (en mi versión de VLC, es el tercero desde arriba en la segunda columna). Con ese filtro seleccionado, vuelve al menú desplazable a la izquierda y haz clic en la flecha desplegable junto a la palabra "Filters". Desplázate hacia abajo y selecciona "Scene filter". Cambia las preferencias para que el formato de imagen sea "JPG" y el prefijo del camino del directorio sea nuestro directorio de trabajo (en este caso "C:\User\YOUR_NAME\Documents\FPV Geotagging"). Luego ajusta la proporción de grabación según la tasa de cuadros por segundo de tu cámara y cuántas fotos quieres exportar desde este video. DJI FPV graba a 60 cuadros por segundo, así que configuré la proporción a 60 para capturar una foto cada segundo del video. Para más información sobre cómo funciona esto y qué proporción usar, consulta esta excelente guía (
Abre Visual Studio Code, así como el CSV que guardamos antes. Si necesitas configurar VS Code, hazlo ahora. Hay mucha documentación online sobre cómo hacerlo. Si usas otro software para editar código, simplemente ignora esta parte .<\/P>
Asumiendo que usas Microsoft Excel, vuelve al CSV, crea una nueva columna junto a la columna "FRAMECNT" llamada "File Name". Resalta los valores del conteo de cuadros en la columna "FRAMECNT", haz clic derecho y selecciona "Format cells" (Formato de celdas). En el menú izquierdo selecciona "Special" (Especial) y luego "ZIP Code" bajo la columna "Type" (Tipo). Esto añadirá ceros delante al conteo de cuadros. Sé que hay otras formas de hacer esto; si tienes un método mejor por favor compártelo. Esta es solo una forma rápida y sencilla. En la primera celda debajo de "File Name", crea una expresión para reconstruir el nombre del archivo; en este caso queremos que "scene00001.jpg" esté en la primera celda debajo de "File Name", luego "scene00002.jpg", etcétera. Asegúrate de copiar estos nombres o crear una nueva columna con estos nombres como Valores solamente. Crea una nueva hoja dentro del CSV y abre una ventana del Explorador de archivos Windows. Navega al directorio de trabajo. Ordena todos los archivos por nombre y resalta todos los archivos imagen del dron (y sólo<\/EM> las imágenes). Manteniendo presionada la tecla shift haz clic derecho y selecciona "Copy as path..." (Copiar como ruta...). Vuelve a Excel y nuestra hoja vacía. Pega la lista de archivos. Crea una nueva columna llamada nuevamente "File Name", y extrae los nombres desde el final de las rutas pegadas (la fórmula "=RIGHT(A2,14)" debería funcionar). Arrastra hacia abajo hasta completar todas las filas. Asegúrate también aquí copiar y pegar esta columna como Valores solamente). Crea cinco nuevas columnas llamadas "LATITUDE", "LAT REF", "LONGTIUDE", "LON REF", y "ALTITUDE". Usando una búsqueda X o V busca los valores latitud, longitud y altitud para cada archivo usando las columnas "File Name" como referencia. En las columnas Lat/Lon Ref ingresa N/S o E/W respectivamente (ver:
<\/P>
Volviendo a Visual Studio, pega el siguiente bloque:<\/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> Cambia la ruta del archivo por tu propio directorio de trabajo (la cadena después del comando "open" en la línea 3) y guarda este script en nuestro directorio como "batch_exif_writing.py". Abre un terminal de comandos y cambia tu directorio al directorio de trabajo ("cd C:\Users\YOUR_NAME\Documents\FPV Geotagging"). Escribe "python batch_exif_writing.py" y presiona enter. Deberías ver mensajes continuos diciendo "1 image has been updated" aparecer en tu terminal mientras todos tus archivos son georreferenciados.<\/P>Una vez que termine el script (mi computadora tardó unos 5 minutos), tus imágenes estarán georreferenciadas y podrán cargarse en Drone2Map! En fin, espero que esta guía ayude a alguien ahí afuera buscando usar el dron DJI FPV y Drone2Map. Todavía estoy trabajando con las imágenes para limpiar cualquier artefacto / partes no deseadas de las imágenes del proceso de captura. Pero eso es un tema para otro día. Por favor, háganme saber si tienen ediciones / sugerencias / comentarios / críticas sobre este proceso. Estoy seguro de que hay formas más fáciles de hacer esto, pero esto fue lo que funcionó para mí y tuve que hacerlo en un vacío. ¡Gracias!<\/P>
OMG this is amazing @RyanWalter . gonna try this out and let you know how it goes!
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.