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

    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    jsonrpc
    第十章:多线程
    第九章:IO流
    第八章:集合
    第七章:常用类
    第六章:异常机制
    第四章:数组
    第三章:流程控制语句
    第二章:数据类型和运算符
    第五章:面向对象4
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/14852593.html
Copyright © 2020-2023  润新知