パノラマと動画
360° 写真や、手ぶれを補正して歩きながら撮った動画から、AR Clip VPS のマップを作ります。フォトグラメトリー が難しいときに使います。
フレームを取り出す
ffmpeg -i hotel-tour.mp4 -vf fps=1 tour_frames/frame_%04d.jpg
- 動画からは、1 秒あたり 1〜2 フレームを取り出します。
- Insta360 や Ricoh Theta などの 360° カメラでは、正距円筒図法(エクイレクタングラー)の JPG で書き出します。
Python でフレームをアップロードする
選んだフレームを zip にまとめ、REST API でアップロードします。
# 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")
API は clusterId を返します。これは次のステップで使います。
クラスターをマップにする
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"])
処理が終わったら(ステータスが READY)、iOS、Android、Unity のいずれかの SDK を使って、スマートフォンでルートをテストします。ツアー全体を通して、ローカライズが安定しているかを確認してください。
コツ
- 一定の速さで歩き、急に向きを変えないようにします。
- 明るさにむらがないようにします。白飛びしている場所は撮り直します。
- 少なくとも 1 周は歩き、歩き始めた場所に戻ります。
次へ: CAD と BIM のモデル — 建物のモデルをマップにします。