deep-learning - OpenAI健身房: How to get pixels in CartPole-v0

标签 deep-learning reinforcement-learning openai-gym

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

相关文章:

python - 我需要在 Kfold 循环中重置模型权重吗?

python - 如何找出策略迭代的值?

machine-learning - 坚持理解 TD(0) 和 TD(λ) 更新使用之间的区别

python - gym.make ('CartPole-v0' ) 返回什么以及它是如何工作的?

python - Torchvision 0.2.1 变换。Normalize 未按预期工作

python - 如何为 GPU 设备指定或设置变量

machine-learning - 是否可以在caffe中使用任意图像尺寸?

machine-learning - 电源管理的强化学习

python - 如何创建具有多种功能的 OpenAI Gym 观察空间

python-3.x - 如何设置 openai-gym 环境以特定状态而不是 `env.reset()` 开始?