我想在不打开渲染窗口的情况下访问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/

10-10 18:00