您的位置:首页 > 其它

facebook开源项目全景投影转换Transform360

2017-09-18 15:19 225 查看
本篇文章主要是本人实操facebook开源全景投影项目的笔记。

关于facebook的全景投影转换,相关介绍请参考以下博客:

Facebook为虚拟现实视频研发棱锥式编码
http://blog.csdn.net/cabbage2008/article/details/50561150
项目的git地址:https://github.com/facebook/transform360/

项目构建发布,请参考项目根目录中的README文件。

以下给出本人发布后的Transform360 include和lib,具体信息见资源描述:
http://download.csdn.net/download/fan2273/9990613 (win64发布版本,官方git issue反应无法使用)
http://download.csdn.net/download/fan2273/9990865 (Ubuntu下编译的版本)

(注意!!经本人测试,此开源项目支持多种投影格式转换,V1版本和当前版本支持的格式各有不同)

以下图片为cubemap转换,完成测试后会给出所有格式转换的预览图。



介绍:

这里主要介绍一下构建Transform360的步骤以及相关信息。

Transform360在git上托管的有两个版本(目录中V1为前半版本)。

两个版本的差别在于V1版无需openCV支持,而当前版本需和openCV一同编译嵌入ffmpeg。

Transform既可在linux平台也可以在windows平台下发布,发布步骤请参照README文档。(后面贴出翻译)

1.与openCV发布

使用Cmake,选择Transform360目录,点击configure。

此时,会出现一个报错。提示为找不到openCV的路径及cmake文件。

错误信息如下:

CMake Error at CMakeLists.txt:11 (find_package):

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has

asked CMake to find a package configuration file provided by "OpenCV", but

CMake did not find one.

Could not find a package configuration file provided by "OpenCV" with any

of the following names:

OpenCVConfig.cmake

opencv-config.cmake

Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set

"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"

provides a separate development package or SDK, be sure it has been

installed.

请点击Entry中,第三项,选择openCV的源码路径。再点击发布,即可。

2.VS build工程

打开发布的目录,使用对
d8bf
应版本VS打开解决方案,然后点击构建解决方案。

此时,可能会报两个错误:

1.错误
C2065“M_PI”: 未声明的标识符Transform360


2.语法错误:“float”的前面应有“;”

3.samplingArc 函数不接受1个参数

4.缺少类型说明符-假定为int。注意:C++不支持默认int

错误1与错误3,都来源于M_PI的宏定义问题。这是π的宏定义,但在VS的math.h里面没有关于它的定义,因此自己补上定义就好。

#define M_PI        3.14159265358979323846

错误2和错误4,来源于 constexpr 描述符的定义问题。简单百度就可以知道,这是一个 常量标识符。但这个标识符是在VC11后提出来的,也就是VC2015版本之后,编译器才能识别这个标识符。简单的处理方法就是,cmake发布的时候,选择VS2015-2017的进行发布构建。发布之后,可以发现错误得到解决。

5.VS工程进行install的时候,报MSB3073错误,报错如下:

严重性 代码说明项目
文件 行
禁止显示状态

错误 MSB3073
命令“setlocal

"C:\Program Files\CMake\bin\cmake.exe" -DBUILD_TYPE=Release -P cmake_install.cmake

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1

:cmDone

if %errorlevel% neq 0 goto :VCEnd

:VCEnd”已退出,代码为 1。 INSTALLG:\Coding\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets133

同时,PACKAGE项目构建显示缺少NSIS,根据报错信息便可下载,这里给出下载地址:
http://nsis.sourceforge.net/Download
关于以上的MSB3073错误,原因是默认install路径为C盘program file文件夹,需要管理员权限。右键管理员权限启动VS,再进行install build就通过了。

项目默认的发布目录为C:\Program Files\libtransform360,可以在这个目录中找到include和lib。

3.使用minGW进行win10平台下的交叉编译

关于ffmpeg编译的教程,网上有一些写的不错的,这边列出几个博客,可以参考借鉴一下:
http://www.latelee.org/multistream/ffmpeg-2-6-3-windows-mingw-compile-note.html 在雷神群里的李迟大神站点 http://blog.csdn.net/longji/article/details/54891236?locationNum=6&fps=1win10下msys2编译 http://lists.ffmpeg.org/pipermail/ffmpeg-user/2014-December/024803.htmlffmpeg交叉编译依赖库的站点
这里说一下本人遇到的问题

1.minGW的库配置:

基本参考以上博客,正常情况下可以完成minGW的交叉编译环境搭建。我主要是遇到了pkg-config崩溃的问题。

参照的大部分博客,minGW提供的pkg-config直接可用版本都来源于http://ftp.gnome.org/pub/gnome/binaries/

然而,我是用的这个ftp站点下,无论是哪个版本或者哪个位数cpu的pkg-config都出现崩溃的错误。即使修改了兼容和管理员权限,都未能解决这个问题。

后来,我通过google搜索到了国外的一个minGW+pkg-config的站点:
https://sungkwang.wordpress.com/2013/07/10/use-gcc-with-pkg-config-in-windows-7-mingw/
稍后我会把这份pkg-config传上来,如果博客没更新,可以看我的资源。

我不知道我这个是特例还是站点exe版本的pkg-config有问题。当然,大家可以去下源码自己编译一次。

2.FFMPEG的configure配置:

./configure --enable-shared --disable-static --enable-memalign-hack

我是用的是这个配置,更多的请根据自己需要开启的库设定。

若是配置时带有路径,请确定将所有windows下的“\”更换成linux下的“/”,否则gcc会认为你处于交叉编译环境,而要求你开启交叉编译。报错信息如下:

gcc is unable to create an executable file.

If gcc is a cross-compiler, use the --enable-cross-compile option.

Only do this if you know what cross compiling means.

C compiler test failed.

3.Transform360的配置:

请参照源码目录下的README文档,完成FFMPEG的filter注册。

在配置FFMPEG准备make的时候,请注意使用以下配置命令,将编译好的transform的库和头文件引入:

--extra-ldflags="-L/Transform360-lib-file-dir" --extra-cflags="-I/Transform360-include-dir"

(注意路径的斜杠)

根据README文档编译,可能会提示需要很多依赖库,诸如FreeType和FriBidi及Libass,这部分可以参考站点:
http://lists.ffmpeg.org/pipermail/ffmpeg-user/2014-December/024803.html
但,我已完成配置早起版本Transform360_v1,正常使用,未见对库的依赖。同时在facebook的git上,也未见详细的依赖库的清单及说明,这部分依赖仅是README中提供的参考配置ffmpeg方案。

4.可能遇到的问题

编译到transform360时,提示找不到VideoFrameTransformHandler.h头文件,或链接器未连接。

请注意./configure时是否添加了transform360的lib和include地址

其实,本人这里并未成功完成最新版本Transform360的编译(即依赖openCV的版本)。

使用cmake生成Transform360的VS工程后,构建工程仅产生了lib,未产生include,切install的项目构建报错。

从而我在构建ffmpeg时遇到上述问题,一直无法解决。

考虑到facebook官方也未指出新版本和V1版本的显著差异,同时也保留了V1版本。

而V1版本是单独的.c文件,可以较为简单的作为ffmpeg的filter加入,直接进行发布构建。(已完成并测试通过)

总结:

总体来说,本来是抱着棱锥投影的心态去测试的这个项目,结果最后结果是立方体投影,还是有些失望。

不过,对照JVET的360Lib来说,facebook的这个transform360效率高很多。因为是依赖ffmpeg的关系,所以可以直接对输入的MP4格式(暂时仅知道支持)进行直接转换投影,而且效率几乎接近实时。

以下是测试的结果,输入视频为4K全景等角圆柱投影(具体参数不给出了)

frame=10589 fps= 23 q=31.0 Lsize=   56405kB time=00:07:03.62 bitrate=1090.8kbits/s speed=0.933x

video:49467kB audio:6669kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.479140%

[aac @ 00ed9fc0] Qavg: 577.630

今天更新大概先到这里——2017.9.21
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: