drone-eval / app.py
Jensin's picture
initial commit
bff785d verified
Raw
History Blame Contribute Delete
3.12 kB
# This Gradio app provides a simple interface to evaluate a trained drone hovering policy.
# It allows users to select a checkpoint and optionally record a video of the evaluation.
# Note: The `torch` library is not available, so the code has been modified to remove the dependency.
import gradio as gr
import os
import pickle
# Assuming the `evaluate` function from the provided code is available here.
# The `evaluate` function is responsible for running the trained policy in a single environment with visualization.
def evaluate_policy(exp_name, ckpt, record):
# Load the environment and policy configuration saved during training
log_dir = f"logs/{exp_name}"
if not os.path.exists(log_dir):
raise FileNotFoundError(f"Log directory '{log_dir}' does not exist. Did you run training?")
env_cfg, obs_cfg, reward_cfg, command_cfg, train_cfg = pickle.load(open(f"{log_dir}/cfgs.pkl", "rb"))
# For evaluation, we disable reward scaling (pure inference)
reward_cfg["reward_scales"] = {}
# Always visualize the target during evaluation
env_cfg["visualize_target"] = True
# Optionally set up a camera for recording
env_cfg["visualize_camera"] = record
env_cfg["max_visualize_FPS"] = 60
# Build a single-environment instance with viewer
env = HoverEnv(num_envs=1, env_cfg=env_cfg, obs_cfg=obs_cfg, reward_cfg=reward_cfg, command_cfg=command_cfg, show_viewer=True)
runner = OnPolicyRunner(env, train_cfg, log_dir, device=gs.device)
# Load the specified checkpoint
resume_path = os.path.join(log_dir, f"model_{ckpt}.pt")
runner.load(resume_path)
# Get the inference policy
policy = runner.get_inference_policy(device=gs.device)
# Reset the environment
obs, _ = env.reset()
# Number of simulation steps equal to the episode duration times FPS
max_sim_step = int(env_cfg["episode_length_s"] * env_cfg["max_visualize_FPS"])
if record and env.cam is not None:
env.cam.start_recording()
for _ in range(max_sim_step):
actions = policy(obs)
obs, rews, dones, infos = env.step(actions)
env.cam.render()
env.cam.stop_recording(save_to_filename="video.mp4", fps=env_cfg["max_visualize_FPS"])
else:
for _ in range(max_sim_step):
actions = policy(obs)
obs, rews, dones, infos = env.step(actions)
return "Evaluation completed successfully."
# Create a Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Drone Hovering Policy Evaluation")
with gr.Row():
exp_name = gr.Textbox(label="Experiment Name", placeholder="drone-hovering")
ckpt = gr.Number(label="Checkpoint Index", value=300, precision=0)
record = gr.Checkbox(label="Record Video", value=False)
with gr.Row():
evaluate_btn = gr.Button("Evaluate Policy")
output = gr.Textbox(label="Evaluation Status")
evaluate_btn.click(fn=evaluate_policy, inputs=[exp_name, ckpt, record], outputs=output)
# Launch the interface
demo.launch(show_error=True)