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文件。

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM