Ubuntu Server无桌面无显示器情况下虚拟屏幕xvfb的安装及设置—ubuntu18.04server服务器系统下为python安装虚拟显示器 (使用jupyter notebook在web端播放openai的gym下保存的运行视频——需安装ipython)

1.  安装xvfb

sudo apt-get install xvfb

 

 

 

Xvfb是流行的虚拟现实库,可以使很多需要图形界面的程序虚拟运行。

 

 

 

 

 

2. 安装pyvirtualdisplay

pyvirtualdisplay 是Xvfb的 python 封装。

pip install pyvirtualdisplay

 

 

 

 

 

 

3.  在 Ubuntu 上安装 OpenGL Library

 

sudo apt-get install libgl1-mesa-dev

 

 

 

 

 

4.  安装 python-opengl

sudo apt-get install python-opengl

 

注:

如果不安装 python-opengl 运行图形显示的应用时报错:

 

测试代码:

from pyvirtualdisplay import Display
import gym

display = Display(visible=0, size=(1024, 768))
display.start()

env_id = "CartPole-v0"
env = gym.make(env_id)

env.reset()
env.render()


display.stop()

 

 

 

 

 如果只是为了在服务器上把具有图像显示功能的程序跑起来的话那么上面的内容就可以了,但是一般需要使用在服务器上运行图像显示功能的应用一般都是运行爬虫和运维等需求,但是在机器学习中则是主要在使用open_ai下的gym来运行可以显示图像的应用,下面部分介绍使用jupyter notebook在web端播放openai的gym下保存的运行视频。(注意:本文中所介绍的所有功能和方法都不支持与服务器虚拟显示下图像界面进行交互的功能)

 

 

 

 

 =====================================================

 

 

 

 

使用jupyter查看openai的gym下保存的运行视频:

 

1.  安装视频编解码工具  ffmpeg

sudo apt install ffmpeg

 

 

经过验证在Ubuntu18.04系统中使用系统安装ffmpeg容易报错,如下:

Unknown encoder 'libx264'的解决方法

https://blog.csdn.net/wmm3525/article/details/105792620 

 

 

 

 

 

于是,使用conda 安装  ffmpeg :

conda install ffmpeg

conda uninstall ffmpeg

 

 

 

测试代码:

from pyvirtualdisplay import Display
import gym

display = Display(visible=0, size=(1024, 768))
display.start()

env_id = "CartPole-v0"
env = gym.make(env_id)
env = gym.wrappers.Monitor(env, "videos", force=True)

env.reset()

while True:
    env.render()
    state, reward, end_flag, info = env.step(env.action_space.sample())
    print(state, reward, end_flag, info)
    if end_flag == True:
        break


display.stop()

 

 

成功运行,可以查看到保存的视频文件:

 

 

 

 

 

 

2.   安装  ipython 

 pip install ipython

 

 

 

 

测试代码:

import base64
import glob
import io
import os

from IPython.display import HTML, display


def ipython_show_video(path: str) -> None:
    """Show a video at `path` within IPython Notebook."""
    if not os.path.isfile(path):
        raise NameError("Cannot access: {}".format(path))

    video = io.open(path, "r+b").read()
    encoded = base64.b64encode(video)

    display(HTML(
        data="""
        <video alt="test" controls>
        <source src="data:video/mp4;base64,{0}" type="video/mp4"/>
        </video>
        """.format(encoded.decode("ascii"))
    ))


list_of_files = glob.glob("videos/*.mp4")
latest_file = max(list_of_files, key=os.path.getctime)
print(latest_file)
ipython_show_video(latest_file)

 

备注:需要在测试文件所在文件夹下面建立 videos 文件夹,并且在videos文件夹下面需要有 mp4文件。

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2021-06-05 13:34  Angry_Panda  阅读(3754)  评论(1编辑  收藏  举报

导航