You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gym环境中录制Breakout强化学习模型的视频/GIF?

在Gymnasium ALE/Breakout-v5中录制强化学习 Episode 视频/GIF

下面提供两种实用的录制方案,直接适配你的Python 3.11环境和Breakout-v5场景:


方案一:用Gymnasium官方RecordVideo Wrapper录制视频

这是最简便的官方方案,无需手动处理帧数据,直接通过封装环境实现指定episode录制。

1. 安装依赖

先确保安装必要包:

pip install gymnasium[other] moviepy

2. 代码修改示例

在你的强化学习循环中,给环境添加RecordVideo封装,指定只录制第12集:

import gymnasium as gym
from gymnasium.wrappers import RecordVideo

# 初始化环境,必须设置render_mode为rgb_array
env = gym.make("ALE/Breakout-v5", render_mode="rgb_array")
# 配置录制规则:仅第12集触发录制,视频保存到指定文件夹
env = RecordVideo(
    env,
    video_folder="./breakout_records",
    episode_trigger=lambda episode_id: episode_id == 12
)

# 你的强化学习主循环
for episode in range(1, 13):
    obs, info = env.reset()
    done = truncated = False
    total_reward = 0
    
    while not done and not truncated:
        # 替换成你的AI决策逻辑,比如agent.predict(obs)
        action = env.action_space.sample()
        obs, reward, done, truncated, info = env.step(action)
        total_reward += reward
    
    print(f"Episode {episode}: 总奖励 = {total_reward}")
    # 第12集录制完成后关闭环境释放资源
    if episode == 12:
        env.close()

说明

  • 录制的视频会保存在./breakout_records文件夹中,文件名包含对应episode编号
  • episode_trigger是触发录制的判断函数,这里只在episode_id等于12时启动录制
  • 无需手动调用env.render(),RecordVideo会自动处理帧捕获

方案二:手动捕获帧生成GIF

如果需要生成GIF格式的演示,可通过imageio库手动收集帧并生成文件,灵活性更高。

1. 安装依赖

pip install imageio

2. 代码修改示例

import gymnasium as gym
import imageio

env = gym.make("ALE/Breakout-v5", render_mode="rgb_array")
target_episode = 12
frames = []

for episode in range(1, 13):
    obs, info = env.reset()
    done = truncated = False
    total_reward = 0
    
    # 目标episode开始时捕获第一帧
    if episode == target_episode:
        frames.append(env.render())
    
    while not done and not truncated:
        # 替换成你的AI决策逻辑
        action = env.action_space.sample()
        obs, reward, done, truncated, info = env.step(action)
        total_reward += reward
        
        # 目标episode每一步都捕获帧
        if episode == target_episode:
            frames.append(env.render())
    
    print(f"Episode {episode}: 总奖励 = {total_reward}")

# 生成并保存GIF,fps设为30匹配游戏帧率
if frames:
    imageio.mimsave("./breakout_episode_12.gif", frames, fps=30)
env.close()

常见问题解决

  • 如果遇到FFmpeg相关错误:需要单独安装FFmpeg。Ubuntu用sudo apt install ffmpeg,Mac用brew install ffmpeg,Windows可从官网下载后添加到系统环境变量。
  • 确保render_mode设置为rgb_array,这是捕获像素帧的必要模式。

内容的提问来源于stack exchange,提问作者Ali Ghiasvand Mohammadkhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:42:10