一次不算太好的 E3PO 项目体验
概述
E3PO 是一个用于 360° 视频流传输模拟的开源平台,乍一看,有点懵,360° 视频是啥,E3PO 又是啥,这让我有些新奇和好奇。
我查了一下百度百科:360 度视频就是多个摄像机同时对同一个空间下的物体进行多个角度拍摄,支持多角度视频播放或者“360 度视频播放”的网站,比如 Youtube,允许用户在无需暂停视频播放的情况下,自由切换观看角度。
这让我想起来 VR 和前段时间微信中特别火的一个网址,就是可以旋转 360° 看一群小姐姐。这种行为能让我们具有更好的观看体验,置身处地的体验一种视频这种情节在科幻场景中经常出现,每次都会引起人们的期待。但这种方案的传输难度、实时性都是亟待解决的环节,目前还没有比较完善的 360° 视频传输方案,E3PO 就是一种比较先进和强大的探索方案,致敬。
首先声明:我并非一个 360° 视频的研究者,只是对 E3PO 的好奇者,所写的所有的感受都是切实体验,言辞可能比较激烈,因为这是一次不算太好的体验。
E3PO
E3PO 是一个应用于 360° 视频流传输的开源平台,能模拟用户在 VR 设备中实际看到的视频内容并进行输出,在客观评价指标之外,提供对方案主观性能的分析与评估。所以它是一款评估视频流的一种解决方案,与我最开始想的剪辑方案有些不同。
它的原理还是需要知道一些的,后面执行程序能看到更明显的对比,知行合一,可以更好地理解 E3PO 的机理,更深入的体验 360° 视频。
E3PO 主要有三大模块:
video pre-processor: 根据用户的特定投影和预先设置好的平铺参数将 360 全景视频进行分割,得到小视频的平铺块
streaming simulatorl: 读取实现提供的头部运动轨迹的文件,模拟详细的动作,决定将动作与平铺视频块进行的对应关系
system evaluator: 合成用于屏幕上显示视频并计算各种指标
安装及与准备
首先按照官网提供的步骤进行安装工作
E3PO 源码仓库下载
去360VidStr 下载一份你想要的 motion_trace(原理中提到的头部运行轨迹),这个仓库中还有一些 360° 视频,你需要下载一个相应的视频,官方 demo 中并没有提供相应视频。
下载新的 360° 视频,后续运行时要注意修改对应 yml 中的视频名
E3PO 是用 Python 实现的,Python 程序的运行通常需要安装一系列依赖,但是这个过程我们可以边运行边按照错误安装,也可以去BasicTutorial查看对应的依赖目录。
pytorch 比较大,安装起来也比较复杂,建议去百度或者谷歌搜一下安装教程,否则很容易安装错误
由于日常中我也会做很多人工智能,我已经是具备其中很多的环境,我主要介绍一下我遇到的一些问题。
E3PO 支持 ffmpeg 全局安装进行使用,可以参考ffmpeg 安装这篇文章,相应配置一下环境变量,命令行通过
ffmpeg --version
测试一下即可。
cv2 的安装我就麻了,我按照正常的安装逻辑使用
conda install cv2
结果显示找不到。原因很简单,因此 cv2 不是独立的库,需要安装 opencv-python 模块,也安装上。
照例测试一番,命令行输入 python,进入 python 环境,然后执行import cv2
,又出错了。一个从未见过的错误numpy._DTypeMeta’ object is not subscriptable
。去谷歌搜了一番,没绷住,opencv 和 numpy 的版本不匹配,需要升高 numpy 或者降低 opencv。numpy 很早就安装过,很久没有更新过,确实可能出现类似问题。执行命令更新一下 pip install --upgrade numpy
,cv2 模块安装就没问题了。
其余模块安装比较简单,就不赘述了。
程序运行
make_preprocessing
安装完后,我就开始运行,执行下面的代码,视频的预处理模块,先使用默认参数。
然后就抛出了一个我到现在没想明白的错误,找不到 source\video
目录,我没有修改过代码,也没有动作原来的项目结构,况且我这个目录切切实实的存在啊。摸不着头脑,没办法,文件夹目录是存在的,所以我怀疑是代码层面的问题。
于是我就找到了 base_data.py 文件,反复看了几遍,代码没什么问题,这行代码是 assert 是不影响整体逻辑的,因此我选择把把它注释掉,重新运行。
我不知道是我的问题,还是官方的问题,这里的错误莫名其妙的。这里我重新下载了几次源代码,运行都会出现这个问题。
又出现了错误,这里是我的失误,没有认真的阅读 yml 文件,新增的 mp4 名字没有和配置对应好,custom_eac.yml 中使用的名字是 video_2.mp4
,为了后续测试方便,也修改为 video_2.mp4
。这个测试文件的名字起得有些随便,语义性稍微有点差。
运行过程非常慢,应该是受限于电脑的配置情况,大约运行了差不多一个小时,最终生成了在两个文件夹生成了产物,从下面生成过程也可以发现,先生成 background video,后来由一步步的进行转化,convert 这个部分处理起来慢一些。
下面对比一下处理前后的效果,右边是原视频,左边是处理过的视频。跟原理部分的内容是想符合的,根据用户的特定投影和平铺参数将 360° 全景视频分割成小视频平铺块,相当于实现了平铺效果。
make_decision
make_decision 模块执行的非常快,大约 1s 就完成了,生成了一个 decision.json 文件。
make_evaluation
执行 make_evaluation 模块,这部分可以修改一下参数,也可以默认。
最终会生成一个合成的 output.mp4 和一个 evalution.json 文件。可惜不能放视频,合成的视频非常有感觉,就像第一视角的体验一般,体验起来非常好,让我不由得更期待 E3PO 的发展了。
Convert Method
E3PO 默认提供了 8 中 Convert Method,在 yml 中进行修改 projection_mode 配置就可以,其余的更复杂配置可以参见官网Config。
官网提供了 8 种风格的对比,效果相对明显一些,因为运行比较慢,我只尝试了一组。
总结
整体体验下来,E3PO 还是非常强大的,它提供了一套从视频编码到决策模拟再到评估的全流程开源平台,是一个相对完整的闭环方案,效果也特别不错,对于 360° 视频开发者来说,是极大的利好。
有两个问题,还是亟待解决的,其一代码运行错误的问题,我反复尝试了,这个问题每次都会出现,是否是程序 bug?其二,文档写的不详细,这点希望进一步优化。
版权声明: 本文为 InfoQ 作者【战场小包】的原创文章。
原文链接:【http://xie.infoq.cn/article/16b93ad2e5dffb6be3f483df6】。文章转载请联系作者。
评论