我想在不打开渲染窗口的情况下访问 OpenAIgym CartPole-v0
环境中的原始像素。我该怎么做?
示例代码:
import gym
env = gym.make("CartPole-v0")
env.reset()
img = env.render(mode='rgb_array', close=True) # Returns None
print(img)
img = env.render(mode='rgb_array', close=False)
# Opens annoying window, but gives me the array that I want
print(img.shape)
PS。我很难找到 OpenAI Gym 的良好文档。是只有我这样,还是根本不存在?
编辑:我不需要打开渲染视频。
最佳答案
我对此感到好奇,所以我开始研究源代码,这就是我发现的。
Open AI 使用 pyglet 来显示窗口和动画。
为了显示动画,所有内容都绘制到窗口上然后渲染。
然后 pyglet 将显示的内容存储到缓冲区中。
如何在开放人工智能中编写代码的虚拟版本
import pyglet
from pyglet.gl import *
import numpy as np
display = pyglet.canvas.get_display()
screen = display.get_screens()
config = screen[0].get_best_config()
pyglet.window.Window(width=500, height=500, display=display, config=config)
# draw what ever you want
#get image from the buffer
buffer = pyglet.image.get_buffer_manager().get_color_buffer()
image_data=buffer.get_image_data()
arr = np.frombuffer(image_data.get_data(),dtype=np.uint8)
print(arr)
print(arr.shape)
输出:
[0 0 0 ... 0 0 0]
(1000000,)
所以基本上我们得到的每个图像都来自窗口上显示的缓冲区。 因此,如果我们不在窗口上绘制任何内容,我们就得不到图像,因此需要窗口来获取图像。 所以你需要找到一种方法,使窗口不显示,但它的值存储在缓冲区中。 我知道这不是您想要的,但我希望它可以引导您找到解决方案。
关于deep-learning - OpenAI健身房: How to get pixels in CartPole-v0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43536034/