ffeng1017's picture
WAV interactive demo (ZeroGPU)
23a59ea verified
Raw
History Blame Contribute Delete
1.37 kB
from collections import deque
import gymnasium as gym
import numpy as np
class Pixels(gym.Wrapper):
def __init__(self, env, cfg, num_frames=1, size=None):
super().__init__(env)
self.cfg = cfg
self.env = env
if size is None:
size = getattr(cfg, 'render_size', 128)
self.observation_space = gym.spaces.Dict({
'rgb': gym.spaces.Box(
low=0, high=255, shape=(num_frames*3, size, size), dtype=np.uint8),
'state': env.observation_space,
})
self._frames = deque([], maxlen=num_frames)
self._size = size
def _get_obs(self, is_reset=False):
frame = self.env.render(width=self._size, height=self._size)
if frame.shape[-1] == 3:
frame = frame.transpose(2, 0, 1)
num_frames = self._frames.maxlen if is_reset else 1
for _ in range(num_frames):
self._frames.append(frame)
return np.concatenate(self._frames)
def reset(self):
state, info = self.env.reset()
return {'state': state, 'rgb': self._get_obs(is_reset=True)}, info
def step(self, action):
state, reward, terminated, truncated, info = self.env.step(action)
return {'state': state, 'rgb': self._get_obs()}, reward, terminated, truncated, info
def close(self):
self.env.close()
def render(self, *args, **kwargs):
kwargs['height'] = kwargs.get('height', self._size)
kwargs['width'] = kwargs.get('width', self._size)
return self.env.render(*args, **kwargs)