Maximiliano Panaino
Detección de fallas en log PPK de drone con Python
Hace un tiempo empecé a aprender el lenguaje de programación Python, con la idea de poder aplicarlo a tareas relacionadas a la Topografía / Agrimensura.
En este caso puntual, el problema a resolver es el siguiente:
PROBLEMA
Luego de hacer un vuelo con el drone y procesar el archivo del log GPS PPK (se utilizó un receptor Emlid M+), se obtiene un archivo con las coordenadas de las imágenes, como se ve a continuación:

La cantidad de imágenes tomadas por el drone debe ser igual a la cantidad de coordenadas del log GPS, pero en este caso hay un problema, ya que no coinciden: las imágenes son 2457 y las coordenadas GPS son 2456, es decir hay un “geotag” menos.
Si bien es raro que algo así ocurra, en este caso sucedió. Por lo tanto, hay que detectar cuál fue el geotag que no se grabó, a qué imagen corresponde y descartar esa imagen del dataset antes de hacer el procesamiento fotogramétrico.
No se puede descartar cualquier imagen al azar, ya que se pierde la correlación imagen-geotag, y por lo tanto, todo el beneficio del procesamiento PPK.
SOLUCION
Una opción es buscar visualmente el “hueco”. Luego de encontrarlo, la parte más difícil es saber a qué número de imagen corresponde. Contarla manualmente sería poco práctico, más en el caso donde sean varios “huecos”.
Otra opción es automatizar el proceso. Para esto desarrollé un script de Python (enlace al final del artículo), que pide como entrada:
Input:
- Archivo de coordenadas del procesamiento GPS.
- Número de la primera imagen

Y devuelve:
Output:
- Cantidad de “huecos” encontrados.
- Número de la primer y última imagen del vuelo, para comprobar que coincide con las imágenes reales tomadas por el drone.
- Número de las imágenes que no tienen geotag.
- Gráficos donde se visualizan los “huecos”.
Al correr el programa con nuestro ejemplo, donde faltaba un solo geotag, se obtiene lo siguiente:
- Gráfico con el hueco encontrado y el número de la primera y última imagen del set:

- Gráfico con las imágenes que no tienen geotag y nombre de todas las imágenes del vuelo:

- Si hacemos zoom sobre el círculo rojo podemos ver que efectivamente falta el geotag de la imagen 2060:

Probando el script en un archivo donde faltan varios geotags
Si eliminamos manualmente varios geotags para probar como se comporta el script obtenemos los siguientes resultados:


- Si hacemos zoom sobre uno de los círculos rojos:

Probando el script en un archivo donde no falta ningún geotag

Por lo vemos que el script funciona correctamente para distintos casos y hemos podido aplicar el lenguaje Python para automatizar un proceso que llevaría mucho tiempo si lo hiciéramos manual o visualmente.
Link del repositorio de Github con el script e instrucciones: