Spaces:
Paused
Paused
Commit
·
61703cc
1
Parent(s):
1a57d99
feat: update generate video
Browse files- Dockerfile +2 -0
- web_server.py +15 -0
Dockerfile
CHANGED
|
@@ -30,6 +30,8 @@ RUN ./.pixi/envs/default/bin/python3 -m ensurepip
|
|
| 30 |
|
| 31 |
RUN ./.pixi/envs/default/bin/python3 -m pip install psutil
|
| 32 |
|
|
|
|
|
|
|
| 33 |
RUN ./.pixi/envs/default/bin/python /app/download_pre_datas.py
|
| 34 |
|
| 35 |
CMD ["./.pixi/envs/default/bin/python", "web_server.py"]
|
|
|
|
| 30 |
|
| 31 |
RUN ./.pixi/envs/default/bin/python3 -m pip install psutil
|
| 32 |
|
| 33 |
+
RUN ./.pixi/envs/default/bin/python3 -m pip install moviepy
|
| 34 |
+
|
| 35 |
RUN ./.pixi/envs/default/bin/python /app/download_pre_datas.py
|
| 36 |
|
| 37 |
CMD ["./.pixi/envs/default/bin/python", "web_server.py"]
|
web_server.py
CHANGED
|
@@ -14,6 +14,7 @@ from typing import Any, Dict, Optional, List
|
|
| 14 |
from dataclasses import dataclass
|
| 15 |
sys.path.append(os.getcwd())
|
| 16 |
|
|
|
|
| 17 |
from fastapi import FastAPI, Body, Header, Depends, HTTPException, Query
|
| 18 |
from fastapi.responses import HTMLResponse, Response
|
| 19 |
from omegaconf import OmegaConf, DictConfig
|
|
@@ -43,6 +44,17 @@ class SubmissionStatus(enum.Enum):
|
|
| 43 |
FAILED = 4
|
| 44 |
|
| 45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
def get_gpu_memory():
|
| 47 |
output_to_list = lambda x: x.decode('ascii').split('\n')[:-1]
|
| 48 |
COMMAND = "nvidia-smi --query-gpu=memory.used --format=csv"
|
|
@@ -198,6 +210,7 @@ class EnvHandler:
|
|
| 198 |
self._scene_cnt = 0
|
| 199 |
self._scene_done = False
|
| 200 |
self._save_data = {'type': 'closeloop', 'frames': []}
|
|
|
|
| 201 |
self._obs, self._info = self.env.reset()
|
| 202 |
|
| 203 |
self._log(f"Switched to scene: {scene_config.name}")
|
|
@@ -289,6 +302,7 @@ class EnvHandler:
|
|
| 289 |
'collision': self._info['collision'],
|
| 290 |
'rc': self._info['rc']
|
| 291 |
})
|
|
|
|
| 292 |
|
| 293 |
if not self._scene_done:
|
| 294 |
return EnvExecuteResult(cur_scene_done=False, done=False)
|
|
@@ -302,6 +316,7 @@ class EnvHandler:
|
|
| 302 |
with open(os.path.join(self.cur_otuput, 'eval.json'), 'w') as f:
|
| 303 |
json.dump(results, f)
|
| 304 |
self._score_list.append(results.copy())
|
|
|
|
| 305 |
|
| 306 |
self._log(f"Scene {self.cur_scene_index} completed. Evaluation results saved.")
|
| 307 |
|
|
|
|
| 14 |
from dataclasses import dataclass
|
| 15 |
sys.path.append(os.getcwd())
|
| 16 |
|
| 17 |
+
from moviepy import ImageSequenceClip
|
| 18 |
from fastapi import FastAPI, Body, Header, Depends, HTTPException, Query
|
| 19 |
from fastapi.responses import HTMLResponse, Response
|
| 20 |
from omegaconf import OmegaConf, DictConfig
|
|
|
|
| 44 |
FAILED = 4
|
| 45 |
|
| 46 |
|
| 47 |
+
def to_video(observations: List[Any], output_path: str):
|
| 48 |
+
frames = []
|
| 49 |
+
for obs in observations:
|
| 50 |
+
row1 = np.concatenate([obs['CAM_FRONT_LEFT'], obs['CAM_FRONT'], obs['CAM_FRONT_RIGHT']], axis=1)
|
| 51 |
+
row2 = np.concatenate([obs['CAM_BACK_RIGHT'], obs['CAM_BACK'], obs['CAM_BACK_LEFT']], axis=1)
|
| 52 |
+
frame = np.concatenate([row1, row2], axis=0)
|
| 53 |
+
frames.append(frame)
|
| 54 |
+
clip = ImageSequenceClip(frames, fps=4)
|
| 55 |
+
clip.write_videofile(output_path)
|
| 56 |
+
|
| 57 |
+
|
| 58 |
def get_gpu_memory():
|
| 59 |
output_to_list = lambda x: x.decode('ascii').split('\n')[:-1]
|
| 60 |
COMMAND = "nvidia-smi --query-gpu=memory.used --format=csv"
|
|
|
|
| 210 |
self._scene_cnt = 0
|
| 211 |
self._scene_done = False
|
| 212 |
self._save_data = {'type': 'closeloop', 'frames': []}
|
| 213 |
+
self._observations_save = []
|
| 214 |
self._obs, self._info = self.env.reset()
|
| 215 |
|
| 216 |
self._log(f"Switched to scene: {scene_config.name}")
|
|
|
|
| 302 |
'collision': self._info['collision'],
|
| 303 |
'rc': self._info['rc']
|
| 304 |
})
|
| 305 |
+
self._observations_save.append(self._obs['rgb'])
|
| 306 |
|
| 307 |
if not self._scene_done:
|
| 308 |
return EnvExecuteResult(cur_scene_done=False, done=False)
|
|
|
|
| 316 |
with open(os.path.join(self.cur_otuput, 'eval.json'), 'w') as f:
|
| 317 |
json.dump(results, f)
|
| 318 |
self._score_list.append(results.copy())
|
| 319 |
+
to_video(self._observations_save, os.path.join(self.cur_otuput, 'video.mp4'))
|
| 320 |
|
| 321 |
self._log(f"Scene {self.cur_scene_index} completed. Evaluation results saved.")
|
| 322 |
|