重建任务全流程
本教程将指导您创建第一个三维重建任务,从图像上传到最终获取三维空间。
步骤一:安装依赖
npm i @realsee/universal-uploader步骤二:封装获取token方法
获取上传 Token(/open/saas/v1/upload/token)
- 接口: GET /open/saas/v1/upload/token
- 返回: 临时上传凭证(TmpSecretId, TmpSecretKey, SessionToken, Bucket, Region, Prefix 等)和图像文件id(input_image_id)
- 用途: 用于通过 如视 SDK 上传全景图像到 COS
let input_image_id;
const getTokenByOpenApi = async () => {
const res = await fetch('xxxx?input_image_id=input_image_id');
const data = await res.json();
const token = data.token;
input_image_id = data.input_image_id;
return token;
}步骤三:初始化上传工具
const ASYNC_ADAPTORS: Record<ProviderName, ProviderAdaptor> = {
'cos': () => import('@realsee/universal-uploader/adaptors/cos'),
};
const uploader = new Uploader(ASYNC_ADAPTORS['cos'], {
getToken: getTokenByOpenApi,
});步骤四:上传图像
配置参数
-
key: string— 文件名 (文件名需固定为panoImage.jpg) -
file— 文件内容(Blob)
添加上传图像的方法:
const result = await uploader.upload('panoImage.jpg', file, {
parallel: Uploader.defaultUploadHandler.parallel,
partSize: Uploader.defaultUploadHandler.partSize,
retry: Uploader.defaultUploadHandler.retry,
onProgress(event) {
log(
'progress',
`event.percentage(${event.transferredParts}/${event.totalParts})`
);
},
onSuccess(event) {
log(
'success',
`download_url: ${event.download_url}`,
`download_url_not_cached: ${event.download_url_not_cached}`,
`etag: ${event.etag}`,
);
},
onError(error) {
console.log(error);
log(
'error',
error.message,
);
}
});
console.log('result', result);步骤五:触发 VGGT 深度任务
触发 VGGT 请求(/open/saas/v1/vggt/trigger)
- 接口: POST /open/saas/v1/vggt/trigger
- 参数示例:
{
"input_image_id": "2aa48574-86a7-41ae-9643-xxxx",
"type": "pano"
}添加创建任务的方法:
const triggerVGGTTask = async (inputImageId) => {
const res = await fetch('/open/saas/v1/vggt/trigger', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
input_image_id: inputImageId,
type: 'pano'
})
});
const data = await res.json();
return data;
};步骤六:轮询等待任务完成
轮询检查状态(/open/saas/v1/vggt/poll)
- 接口: GET /open/saas/v1/vggt/poll?input_image_id=id
- 逻辑:
- 周期性查询任务状态(pending → running → success/failed)
- 成功时返回3D 模型(glb格式)的下载地址
添加轮询任务状态的方法:
const pollTaskStatus = async (inputImageId) => {
const checkStatus = async () => {
const res = await fetch(`/open/saas/v1/vggt/poll?input_image_id=${inputImageId}`);
const data = await res.json();
return data;
};
return new Promise((resolve, reject) => {
const interval = setInterval(async () => {
const status = await checkStatus();
if (status.status === 'success') {
clearInterval(interval);
resolve(status); // 返回包含 glb 下载地址的数据
} else if (status.status === 'failed') {
clearInterval(interval);
reject(new Error('任务失败'));
}
}, 2000); // 每2秒查询一次
});
};