How to Run Agisoft Metashape in Headless Mode with Python Scripting

Cómo ejecutar Agisoft Metashape en modo Headless con scripts Python

Agisoft Metashape no es sólo una interfaz gráfica para la creación de modelos 3D, sino también un potente motor de automatización. Con los scripts de Python, los usuarios pueden ejecutar Metashape en modo headless (es decir, sin interfaz gráfica), ideal para el procesamiento basado en servidor, los flujos de trabajo por lotes y la integración en pipelines en la nube. En este artículo, exploramos cómo utilizar la API Python de Metashape en modo sin cabeza, con ejemplos y consejos.

¿Qué es el Modo Sin Cabeza en Agisoft Metashape?

El modo Headless se refiere a ejecutar Metashape a través de la línea de comandos o de scripts de Python, sin lanzar la interfaz gráfica de usuario. Esto es especialmente útil para flujos de trabajo automatizados en servidores remotos o instancias en la nube (por ejemplo, AWS EC2, Google Cloud, Azure).

¿Por qué utilizar Headless Scripting?

  • Automatiza los flujos de trabajo repetitivos (por ejemplo, importar fotos, alinear, exportar)
  • Ejecuta varios trabajos por lotes durante la noche
  • Procesa datos en la nube sin necesidad de una GUI
  • Integrar la fotogrametría en los procesos empresariales

Requisitos

  • Agisoft Metashape Professional instalado (1.8 o posterior)
  • Licencia válida (nodo bloqueado o flotante)
  • Python 3.x (viene incluido con Metashape)
  • Acceso a la CLI (Símbolo del sistema, Terminal, SSH)

Ejecutar un script Python sin cabeza

Metashape proporciona una herramienta de línea de comandos que puede utilizarse para ejecutar scripts de Python:

metashape.sh -r script.py

En Windows, utiliza:

metashape.exe -r C:\path\to\script.py

También puedes pasar argumentos al script:

metashape.exe -r script.py --project_folder "C:\data\site1"

Ejemplo de guión sin cabeza

A continuación se muestra un sencillo script de Python que carga imágenes, las alinea y construye una nube de puntos dispersa.

import Metashape
import sys
import os

path = sys.argv[1] if len(sys.argv) > 1 else "project"
images_path = os.path.join(path, "images")
output_path = os.path.join(path, "output.psx")

doc = Metashape.Document()
chunk = doc.addChunk()
chunk.addPhotos([os.path.join(images_path, f) for f in os.listdir(images_path) if f.endswith(".jpg")])
chunk.matchPhotos(accuracy=Metashape.HighAccuracy, preselection=Metashape.GenericPreselection)
chunk.alignCameras()
doc.save(output_path)

Pasos típicos del flujo de trabajo en Python

  • Importar fotos
  • Alinear cámaras
  • Optimizar la alineación
  • Construye una nube densa
  • Construir DEM
  • Construir ortomosaico o malla
  • Exportar resultados

Dónde encontrar la referencia de la API de Python

La API oficial de Python está documentada aquí: https://agisoft.freshdesk.com. Incluye descripciones de todas las clases, métodos y parámetros para una automatización avanzada.

Ejemplo: Script de Automatización Completa

# Example: Full pipeline (simplified)
import Metashape

doc = Metashape.Document()
chunk = doc.addChunk()
chunk.addPhotos(["/data/images/img1.jpg", "/data/images/img2.jpg"])
chunk.matchPhotos(accuracy=Metashape.HighAccuracy)
chunk.alignCameras()
chunk.buildDepthMaps(quality=Metashape.MediumQuality)
chunk.buildDenseCloud()
chunk.buildModel()
chunk.buildUV()
chunk.buildTexture()
doc.save("/data/project_complete.psx")

Opciones avanzadas

  • Exportar ortomosaicos como GeoTIFFs
  • Importar BPC desde CSV
  • Procesamiento por lotes de varias carpetas
  • Despliegue basado en la nube (Docker, EC2, sincronización remota)

Consejos para la ejecución sin cabeza

  • Utiliza sys.argv para pasar rutas de proyectos o imágenes dinámicamente
  • Incluye siempre el tratamiento de errores en los guiones para ejecuciones desatendidas
  • Registra el progreso en un archivo (a través de logging o print() redirigido al registro)
  • Comprueba la disponibilidad de licencias cuando utilices licencias flotantes
  • Utiliza doc.save() periódicamente para evitar la pérdida de datos

Conclusión

La API Python de Agisoft Metashape y sus capacidades headless abren un nuevo nivel de flexibilidad para profesionales e investigadores. Desde canalizaciones automatizadas de imágenes de drones hasta la generación de modelos 3D basados en la nube, las posibilidades son infinitas. Con un poco de programación, puedes convertir Metashape en un potente motor silencioso que funcione entre bastidores: más rápido, repetible y manos libres.