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
oprint()
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.