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