服务器无法调用gym中的render,采用Monitor保存视频的方法解决

这篇具有很好参考价值的文章主要介绍了服务器无法调用gym中的render,采用Monitor保存视频的方法解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

由于服务器上没有图形化界面,所以在调用gym中的render()函数时,会报错pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
思路是:把视频保存下来,下载到本地再看。

解决方案

直接调用gym.wrappers.Monitor把视频保存到本地
代码示例如下:

# test.py

import gym
from gym.wrappers import Monitor

outdir = 'video_record'
env = gym.make('MountainCar-v0')
env = Monitor(env, outdir, video_callable=lambda episode_id: True,  force=True) # 主要是修改这行代码,把env传递给Monitor函数
state = env.reset()
done = False
while not done:
    action = env.action_space.sample()
    state_next, reward, done, info = env.step(action)
env.close()

outdir为视频保存路径;video_callable表示多少个episode记录一次视频,可将True改为指定的episode数,只记录特定的episode;force为是否覆盖之前的视频。

然后在终端输入:

xvfb-run -a -s "-screen 0 640x480x24" python test.py 

如果不适用xvfb运行的话,还是会报错

可能遇到的问题

当运行之后,发现视频无法打开,那是因为在源码中有一个bug,参考Fix video recording
gym/wrappers/monitoring/video_recorder.py源代码如下:

if frame.dtype != np.uint8:
	raise error.InvalidFrame("Your frame has data type {}, but we require uint8 (i.e. RGB values from 0-255).".format(frame.dtype))

	self.proc.stdin.write(frame.tobytes())

应该修改为:

if frame.dtype != np.uint8:
	raise error.InvalidFrame("Your frame has data type {}, but we require uint8 (i.e. RGB values from 0-255).".format(frame.dtype))

self.proc.stdin.write(frame.tobytes())

即:找到gym包的安装目录,把video_recorder.py中的self.proc.stdin.write(frame.tobytes())这一行代码放到if代码块外面来文章来源地址https://www.toymoban.com/news/detail-405808.html

总结

  • 调用Monitor保存录像
  • 要使用xvfb-run运行代码
  • 修改gym源码中的一个bug

参考资料

  • Extending OpenAI Gym environments with Wrappers and Monitors [Tutorial]
  • Fix video recording.
  • Record OpenAI gym Video with Monitor

到了这里,关于服务器无法调用gym中的render,采用Monitor保存视频的方法解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包