OpenAI gym:如何在CartPole-v0中获取像素

时间:2017-04-21 07:03:45

标签: deep-learning reinforcement-learning openai-gym

我想访问OpenAI健身房import argparse import sys def showtop20(): print('running showtop20') def listapps(): print('running listapps') parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() # Create a showtop20 subcommand parser_showtop20 = subparsers.add_parser('showtop20', help='list top 20 by app') parser_showtop20.set_defaults(func=showtop20) # Create a listapps subcommand parser_listapps = subparsers.add_parser('listapps', help='list all available apps') parser_listapps.set_defaults(func=listapps) # Print usage message if no args are supplied. # NOTE: Python 2 will error 'too few arguments' if no subcommand is supplied. # No such error occurs in Python 3, which makes it feasible to check # whether a subcommand was provided (displaying a help message if not). # argparse internals vary significantly over the major versions, so it's # much easier to just override the args passed to it. if len(sys.argv) <= 1: sys.argv.append('--help') options = parser.parse_args() # Run the appropriate function (in this case showtop20 or listapps) options.func() # If you add command-line options, consider passing them to the function, # e.g. `options.func(options)` 环境中的原始像素,而无需打开渲染窗口。我该怎么做?

示例代码:

CartPole-v0

PS。我很难找到OpenAI健身房的好文档。它只是我,还是根本不存在?

修改:我无需打开渲染视频。

3 个答案:

答案 0 :(得分:1)

我遇到过类似的问题:

这是修复它的方法,在/ gym / envs / classic_control的rendering.py文件中找到Viewer类中的以下行:

self.window = pyglet.window.Window(width=width, height=height, display=display)

将此行更改为:

self.window = pyglet.window.Window(width=width, height=height, display=display, visible=False)

希望它有所帮助!!

答案 1 :(得分:0)

我很好奇,所以我开始研究源代码,这就是我发现的东西。

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,)

因此,基本上,我们获得的每个图像都来自窗口显示内容的缓冲区。 因此,如果我们不在窗口上绘制任何东西,那么我们将不会得到图像,因此需要窗口才能获得图像。 因此,您需要找到一种方法,使窗口不显示,但其值存储在缓冲区中。 我知道这不是您想要的,但我希望它可以引导您找到解决方案。

答案 2 :(得分:-1)

有人在这里提供答案:

https://github.com/openai/gym/issues/374

“atari和doom环境在他们的观察中给出了像素(即,从步骤返回的值)。我认为没有其他任何像素。

render在不同的操作系统上产生不同的结果,因此它们不属于任何用于基准测试目的的官方环境。但是如果你想创建一个观察以像素为单位的新环境,你可以通过包装现有环境并调用render来实现它。“

我也在努力获取原始像素,而我正试图找到一种方法来查看返回的内容是否符合预期。

可以找到文档: https://gym.openai.com/docs

讨论OpenAI的论坛: discuss.openai.com

虽然不是很热闹。