Aller au contenu principal

Panoramas et vidéo

Construisez une carte AR Clip VPS à partir de photos 360° ou d'une vidéo de visite stabilisée. Utilisez cette méthode quand la photogrammétrie n'est pas pratique.

Extraire les images​

ffmpeg -i hotel-tour.mp4 -vf fps=1 tour_frames/frame_%04d.jpg
  • Pour une vidéo, gardez 1 à 2 images par seconde.
  • Pour les caméras 360°, comme Insta360 ou Ricoh Theta, exportez des JPG équirectangulaires.

Envoyer les images avec Python​

Compressez en zip les images retenues, et envoyez-les via l'API REST.

# cluster_frames.py
from pathlib import Path
import zipfile
import os
import requests

API_BASE = "https://api.arclip.app/vps/api/v3"
TOKEN = os.environ["ARCLIP_TOKEN"]
FRAMES_DIR = Path("tour_frames")
ARCHIVE = Path("tour_frames.zip")

with zipfile.ZipFile(ARCHIVE, "w", compression=zipfile.ZIP_DEFLATED) as zf:
for frame in sorted(FRAMES_DIR.glob("*.jpg")):
zf.write(frame, frame.name)

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

init = requests.post(
f"{API_BASE}/pipelines/feature-cluster/import",
json={"name": "Hotel Lobby Tour", "frameCount": len(list(FRAMES_DIR.glob('*.jpg')))},
headers=headers,
)
init.raise_for_status()
cluster_info = init.json()
upload_url = cluster_info["uploadUrl"]
cluster_id = cluster_info["clusterId"]

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

finalize = requests.post(
f"{API_BASE}/pipelines/feature-cluster/{cluster_id}/finalize",
json={},
headers=headers,
)
finalize.raise_for_status()
print(f"Feature cluster {cluster_id} ready")

L'API renvoie un clusterId. Vous en aurez besoin à l'étape suivante.

Transformer le cluster en carte​

import os
import requests

API_BASE = "https://api.arclip.app/vps/api/v3"
TOKEN = os.environ["ARCLIP_TOKEN"]
headers = {"Authorization": f"Bearer {TOKEN}"}

payload = {
"name": "Hotel Lobby Tour",
"dataType": "feature_cluster",
"clusterId": "cluster_abc123",
"publish": False
}

resp = requests.post(f"{API_BASE}/maps/import", json=payload, headers=headers)
resp.raise_for_status()
print(resp.json()["mapId"])

Une fois le traitement terminé (statut READY), testez le parcours sur un téléphone avec le SDK iOS, Android ou Unity. Vérifiez que la localisation reste stable tout au long de la visite.

Conseils​

  • Marchez à vitesse régulière et évitez les virages brusques.
  • Gardez un éclairage homogène. Refaites les prises de vue là où les hautes lumières sont brûlées.
  • Faites au moins une boucle complète, et terminez là où vous avez commencé.

Suite : Modèles CAO et BIM — transformez une maquette de bâtiment en carte.