让xvfb在M1 Mac上的jupyter笔记本中工作



我正在与OpenAI健身房合作,并使用以下代码在本教程的基础上渲染Jupyter笔记本内的视频:https://colab.research.google.com/drive/1flu31ulJlgiRL1dnN2ir8wGh9p7Zij2t

import gym
from gym import logger as gymlogger
from gym.wrappers import Monitor
gymlogger.set_level(40) #error only
import numpy as np
import random
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import math
import glob
import io
import base64
from IPython.display import HTML
from IPython import display as ipythondisplay, display
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, ConvLSTM2D, Flatten, Conv2D
from tf_agents.agents.dqn import dqn_agent
from tf_agents.replay_buffers import tf_uniform_replay_buffer
from tf_agents.specs import tensor_spec
display = Display(visible=0, size=(1400, 900))
display.start()
def show_video():
mp4list = glob.glob('video/*.mp4')
if len(mp4list) > 0:
mp4 = mp4list[0]
video = io.open(mp4, 'r+b').read()
encoded = base64.b64encode(video)
ipythondisplay.display(HTML(data='''<video alt='test' autoplay 
loop controls style='height: 400px;'>
<source src='data:video/mp4;base64,{0}' type='video/mp4' />
</video>'''.format(encoded.decode('ascii'))))
else: 
print('Could not find video')

def wrap_env(env):
env = Monitor(env, './video', force=True)
return env
env, spec = query_environment('MsPacman-v0')
env = wrap_env(env)
observation = env.reset()
while True:
env.render()
#your agent goes here
action = env.action_space.sample() 
observation, reward, done, info = env.step(action) 
if done: 
break;

env.close()
show_video()

在我的M1 Mac上,由于缺少xvfb,我无法使用下面这两行运行设置显示。我在M1 Mac上的所有软件包都是本机运行的。

display = Display(visible=0, size=(1400, 900))
display.start()

我已经尝试安装xvfbwrapper和导入Xvfb然后替换第一行如下所示,但错误是找不到Xvfb。我阅读并发现xvfb不再随mac电脑一起发货,所以我通过Xquartz: https://www.xquartz.org/安装了它,但它仍然不起作用。

from xvfbwrapper import Xvfb
display = Xvfb(width=1400, height=900)

没有这些行,仍然有一个视频生成,但它是在一个新的窗口,而不是在jupyter笔记本本身。(还有一个问题,我似乎无法关闭该窗口,一旦它生成,但这是另一个问题)。

我的问题是是否有任何修改我可以做,使上述代码工作?如果没有,有没有其他的方法来渲染视频在笔记本本身?

谢谢。

不知道为什么会出现这种情况,即使xvfb在PATH中,但必须再次将其添加到jupyter笔记本单元格中的环境中才能正常工作

os.environ["PATH"] += os.pathsep + '/opt/X11/bin'

最新更新