■ はじめに

強化学習用にでPythonコードをまとめ始めました。前回はグラフをまとめました。

今回は、グラフと双璧を出す動画をやっていきます。
動画で学習結果を出すととっても分かりやすくなります。

動画によるデータの可視化は、強化学習でよく出てくるので知っていると便利です😊

ちなみに、以下のコードはColabで動かす事を前提にしています。


■学習済みモデルの動画作成(mp4)

① 必要ライブラリのインストール

何はなくとも、環境をインストールします

!pip install imageio opencv-python gymnasium minigrid stable-baselines3

② 動画保存用コード(MiniGrid対応)

import gymnasium as gym
import imageio
from stable_baselines3 import PPO

# --- 環境作成 ---
env = gym.make(
    "MiniGrid-Empty-5x5-v0",
    render_mode="rgb_array"
)

# --- 学習済みモデル読込 ---
model = PPO.load("model.zip")

obs, _ = env.reset()

frames = []

for step in range(300):
    frame = env.render()
    frames.append(frame)

    action, _ = model.predict(obs, deterministic=True)
    obs, reward, terminated, truncated, _ = env.step(action)

    if terminated or truncated:
        obs, _ = env.reset()

env.close()

# --- mp4 保存 ---
imageio.mimsave(
    "minigrid_play.mp4",
    frames,
    fps=10
)

print("🎬 動画保存完了: minigrid_play.mp4")

📌 ポイント

render_mode="rgb_array" が必須
env.render() の戻り値がそのままフレーム
fps=10 は MiniGrid にちょうど良い

■動画の再生(Colab / Jupyter)

僕は、

!ls

をやってファイルが存在する事を確認してから下記を実行します。

from IPython.display import Video
Video("minigrid_play.mp4", embed=True)

ノートブック内に直接再生されます。

■メモ用チェックリスト(重要)

☑ env.reset() は (obs, info)
☑ render_mode="rgb_array" を忘れない
☑ frames.append(env.render())
☑ terminated or truncated の両方を見る

■ついでに:GIF 版(軽く確認したい時)

imageio.mimsave(
    "minigrid_play.gif",
    frames,
    fps=10
)

■扱いのむづかしいOpenCV

よく、
「OpenCVとColabは、相性悪いから避けた方がいい」
と言われて避けられたりします。

これはある意味正論です。

OpenCVがColabで避けられるのは、
cv2.imshow() がGUIを必要とするためです。

つまり
「OpenCVがダメ」なのではなく
**「ColabにGUIが無い」**のが原因です。

OpenCVは
・フレーム生成
・描画
・mp4保存

では非常に強力で、再生だけを HTML / IPython.display に任せる構成にすると
Colabでも問題なく使えます。

・Colabで再生 → OpenCVは使わない
・Colabで動画生成 → OpenCVを使う
・再生は HTML / IPython.display
 →OpenCVも選択肢になる

僕の場合は、Colabで動画再生もしてるから、OpenCVは選べないですが、

「再生は、htmlでいいや」

と言う方には、OpenCVをお勧めします。

■ 結果:

今回は、強化学習の学習結果の確認で出て来る動画用コードを勉強しました。

学習結果を動画が欲しくなったら、このページをコピペして下さい。

■ 今回の学び:

今回、強化学習の結果確認でよく出て来る
「Pythonコードの再確認、動画編」
をやってみました。

初心者が陥りやすいミスとして、環境が壊れたのに気が付かない事があります。

エラーを見たら環境の破壊を疑って下さい😊

■ まとめ

別企画の「SLAM使った配送問題」でも、動画でハマってます。
動画は簡単なようで、奥が深いですね。

動画もイロイロなパターンがあり、やればやるほど、知らない事が出てきます。

ブログ化して溜まっているコードを吐き出しているのですが、減らすスピードより溜まるのが早い気がします。

消化スピードをちょっと上げないと辛いですね。