Saltar al contenido principal

Fotogrametría (réflex / sin espejo)

Usa este flujo cuando captures fotos con una réflex, una cámara sin espejo o un dron y quieras convertirlas en un mapa AR Clip VPS.

Pautas de captura

  • Busca un solape del 70–80 % entre fotos consecutivas.
  • Dispara desde varias alturas e incluye puntos de referencia fáciles de reconocer.
  • Mantén la exposición constante; evita el trepidado.
  • Opcional: coloca marcas de control en el suelo del tamaño de un código QR para validar la escala.

Reconstrucción

  1. Importa el conjunto de fotos en Metashape, RealityCapture, Meshroom o tu paquete de fotogrametría preferido.
  2. Ejecuta los pasos de alineación y reconstrucción densa.
  3. Exporta la nube de puntos resultante como LAS/LAZ/PLY con atributos de color. Mantén la resolución de textura manejable (≤8K).

Subida con la API REST de Python

El fragmento de abajo reproduce el flujo de arclip.design: pedir una ranura de subida, enviar el archivo LAS/PLY en streaming y finalizar el mapa para que arranque el procesado del back-end.

# upload_photogrammetry.py
from pathlib import Path
import os
import requests

API_BASE = "https://api.arclip.app/vps/api/v3"
TOKEN = os.environ["ARCLIP_TOKEN"] # crea un token personal en arclip.design
DATA_PATH = Path("outputs/cathedral.las")

headers = {"Authorization": f"Bearer {TOKEN}"}

payload = {
"name": "Old Town Square",
"dataType": "point_cloud",
"sourceFormat": "las",
"coordinate": {"lat": 50.08746, "lon": 14.42125, "alt": 194.2}
}

init = requests.post(f"{API_BASE}/maps/import", json=payload, headers=headers)
init.raise_for_status()
info = init.json()
upload_url = info["uploadUrl"]
map_id = info["mapId"]

with DATA_PATH.open("rb") as src:
put = requests.put(upload_url, data=src, headers={"Content-Type": "application/octet-stream"})
put.raise_for_status()

finalize = requests.post(f"{API_BASE}/maps/{map_id}/finalize", json={"publish": False}, headers=headers)
finalize.raise_for_status()
print(f"Map {map_id} queued → status: {finalize.json()['status']}")
  • ARCLIP_TOKEN es un token bearer generado en Console → Settings → API tokens.
  • dataType y sourceFormat describen la carga para que el back-end elija la pipeline correcta.
  • Pon publish en True si quieres publicar automáticamente al terminar el procesado; si no, revisa antes el mapa en la Console.

Seguir el procesado

import os
import requests

API_BASE = "https://api.arclip.app/vps/api/v3"
TOKEN = os.environ["ARCLIP_TOKEN"]
MAP_ID = "map_12345"

resp = requests.get(f"{API_BASE}/maps/{MAP_ID}", headers={"Authorization": f"Bearer {TOKEN}"})
resp.raise_for_status()
print(resp.json()["status"]) # p. ej. PROCESSING → READY → PUBLISHED

En cuanto el estado pase a READY, abre arclip.design → MapsPreview para inspeccionar la geometría, el mapa de calor y los anclajes. Repite el paso de fotogrametría si detectas huecos o geometría invertida.