我想在不打开渲染窗口的情况下访问OpenAI Gym 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将正在显示的内容存储到缓冲区中。
虚拟代码如何在开放式AI中编写的虚拟版本
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,)
因此,基本上,我们获得的每个图像都来自窗口显示内容的缓冲区。
因此,如果我们不在窗口上绘制任何东西,那么我们将不会得到图像,因此需要窗 Eloquent 能获得图像。
因此,您需要找到一种方法,使窗口不显示,但其值存储在缓冲区中。
我知道这不是您想要的,但我希望它可以引导您找到解决方案。
关于deep-learning - OpenAI体育馆: How to get pixels in CartPole-v0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43536034/