我们应该如何在健身房中实现环境的render
方法,以便Monitor
制作的视频不是黑色的(就像我现在看到的那样(
或者,在什么情况下,这些视频会是黑色的
为了提供更多的上下文,我试图使用健身房的包装Monitor
。这个包装器(每隔一段时间,确切的频率是多少?(向文件夹中写入一些.json
文件和一个.mp4
文件,我想这代表了代理所遵循的轨迹(具体是哪个轨迹?TR
(一般来说,我们应该如何实现render
,这样我们才能制作出环境的动画?当然,这个问题的答案也取决于环境的类型,但我想提供一些指导(
这可能不是一个详尽的答案,但我是这样做的。
首先,我在类的开头将rgb_array
添加到元数据字典中的render.modes
列表中。如果你没有这样的东西,添加字典,像这样:
class myEnv(gym.Env):
""" blah blah blah """
metadata = {'render.modes': ['human', 'rgb_array'], 'video.frames_per_second': 2 }
...
当然,你可以更改所需的帧速率,但我不知道每个帧速率是否都能工作。
然后我改变了render
的方法。根据输入参数mode
,如果是rgb_array
,则返回一个三维numpy数组,即只是一个"numpyed"PIL.Image()
(np.asarray(im)
,其中im
是PIL.Image()
(。如果mode
是human
,只需打印图像或做一些事情,以您喜欢的方式显示您的环境。举个例子,我的代码是
def render(self, mode='human', close=False):
# Render the environment to the screen
im = <obtain image from env>
if mode == 'human':
plt.imshow(np.asarray(im))
plt.axis('off')
elif mode == 'rgb_array':
return np.asarray(im)
所以基本上返回一个rgb矩阵。
看看健身房的源代码,似乎还有其他方法可以工作,但我不是视频渲染专家,所以对于其他方法我无能为力。
关于你的问题";视频究竟多久保存一次&";,我可以向你指出这个链接,它帮助了我。
最后一点要注意的是,如果你想像这个家伙一样解决这个问题,用健身房监视器包装器保存视频不会对错误缩进起作用(截至今天30/12/20,健身房版本0.18.0(。
(如果我的英语有时觉得奇怪,我很抱歉,请随意严厉纠正我(