Перейти к основному содержимому

Фотограмметрия (DSLR / беззеркалка)

Этот пайплайн удобен, когда съёмка ведётся на профессиональную камеру или дрон, а результат нужно превратить в карту WebAR³ VPS.

Съёмка

  • Перекрытие кадров — 70–80 %.
  • Используйте несколько высот, включайте в кадр ориентиры.
  • Стабильная экспозиция, минимальный смаз.
  • Дополнительно: выложите контрольные метки для проверки масштаба.

Реконструкция

  1. Импортируйте снимки в Metashape, RealityCapture, Meshroom и т.п.
  2. Выполните выравнивание и плотную реконструкцию.
  3. Экспортируйте облако точек LAS/LAZ/PLY с цветом (текстуры ≤8K).

Загрузка через Python REST API

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

API_BASE = "https://was-vps.web-ar.xyz/vps/api/v3"
TOKEN = os.environ["WEBAR3_TOKEN"] # получите токен в space.web-ar.studio
DATA_PATH = Path("outputs/cathedral.las")

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

payload = {
"name": "Старый город",
"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()
map_id, upload_url = info["mapId"], info["uploadUrl"]

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_id} поставлена в очередь → {finalize.json()['status']}")
  • WEBAR3_TOKEN — персональный bearer-токен (Console → Settings → API tokens).
  • Поля dataType/sourceFormat подсказывают бэкенду, как обрабатывать загрузку.
  • publish=False позволяет проверить карту в консоли перед публикацией.

Мониторинг

import os
import requests

API_BASE = "https://was-vps.web-ar.xyz/vps/api/v3"
TOKEN = os.environ["WEBAR3_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"]) # PROCESSING → READY → PUBLISHED

Когда статус перейдёт в READY, откройте space.web-ar.studio → MapsPreview и убедитесь, что покрытие и тепловая карта выглядят корректно. При артефактах стоит пересчитать фотограмметрию.