TMC2是点云编码的参考软件,我的电脑的操作系统是Windows10,使用的工具是Visual Studio 2019,TMC2的编译过程大致分为以下几步:
1. 参考软件的下载,包括TMC2,以及TMC2调用的HM和HDRTools共3个参考软件
我是根据 N18665_PCC_CTC.doc 这篇文档上的链接来下载对应版本的软件的,链接如下:
TMC2:http://mpegx.int-evry.fr/software/MPEG/PCC/TM/mpeg-pcc-tmc2.git
HM :https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/HM-16.20+SCM-8.8
HDRTools:https://gitlab.com/standards/HDRTools/tags/v0.18
注:以上材料下载不到的话直接去百度云上下载吧。。。
链接:https://pan.baidu.com/s/1gLPmOlbOlJb2WG8MUxA7uw 提取码:vgnb
下载完成后,新建一个文件夹TMC2_test,将TMC2的压缩包解压到TMC2_test中,再在TMC2_test中新建external文件夹,
将HM和HDRTools解压到external中,然后在TMC2_test中新建ply文件夹,用来存放待编码的点云序列,我这里存放
loot_vox10_1000.ply 到 loot_vox10_1009.ply 共十帧ply文件
注:TMC2需要账号密码才能下载(我也没有),HM要用TortoiseSVN来下载
2. 生成可执行文件( .exe ),都以Release版本举例
2.1 生成TMC2可执行文件:
打开解TMC2解压后的文件夹 -- 新建 build 文件夹 -- 打开命令行,使用cd命令切换到 build 目录下 -- 根据自己的VS版本在命令
行输入如下命令:VS2019就输入:cmake .. -G "Visual Studio 16 2019"
VS2017就输入:cmake .. -G "Visual Studio 15 2017 Win64"
VS2015就输入:cmake .. -G "Visual Studio 14 2015 Win64"
执行命令完成后会发现build文件夹下生成sln文件,双击打开 -- 选择Release,x64(VS上方的菜单中有两个下三角选项,一
个用来选择是生成Release还是Debug版本的可执行文件,Release版本速度很快,Debu版本用来调试;另一个选项就选 x64
就可以了,应该会快一点)-- 直接按快捷键 F7 生成解决方案(或者点击 生成 -- 生成解决方案 ),可以在TMC2解压后文件
夹的 bin 目录下的 Release 目录下发现生成的可执行程序
2.2 生成HM的可执行文件
虽然 N18665_PCC_CTC.doc 这篇文档中有说到要给HM打上一个补丁,但是我发现不打补丁也可以正常运行,因此我的博客
中省去了打补丁的步骤(注:打补丁的方法参考这篇博客 https://blog.csdn.net/machuang1996/article/details/100773444 ,
具体做法就是在Linux操作系统下,先使用cd命令切换到HM的目录下,然后在命令行输入 svn + patch + patch文件所在的路
径,回车。亲测这个方法可以正确给HM打补丁。但是目前为止我还没有使用打过补丁的HM来压缩点云序列),对了,
在TMC2解压目录下的 -> dependencies -> hm-modification 目录下有两个patch文件,两个分别都试一下,哪个能用就用哪个
-----------------------------------------------------接下来才是真正的生成HM可执行文件的步骤-------------------------------------------------
来看看如何生成HM的可执行文件:打开解压后的HM的文件夹 -- 打开 build 文件夹,打开sln文件,由于HM只是被TMC2调用
的,只追求速度最快就好,因此选择Release,x64 -- 在TAppEncoder项目上右击,选择属性,可以看到 配置属性 -> 常规
-> 输出目录这一栏有一长串地址,为了让路径变的简单,我这里删去了后面多余的路径,只保留到了bin目录下面 -- 对于
TAppDecoder 执行相同的操作 -- F7编译,可以发现 bin 目录下生成了两个exe
2.3 生成 HDRTools 的可执行文件
打开解压后的HDRTools的目录,打开sln,因为同样只是被TMC2调用,所以也选择Release,x64,经查看发现项目的输出目
录原本就在 bin 目录下,因此直接F7编译生成可执行文件即可
3. 运行,分为Release版本和Debug版本下的运行
为了方便寻找目录,在 TMC2 解压后的目录下 -- 打开 cfg 文件夹 -- 打开 sequence 文件夹 -- 调用了哪个序列的配置文件,就
打开哪个配置文件,这里我打开 loot_vox10.cfg ,将 uncompressedDataPath 的值修改为 loot_vox10_%04d.ply
3.1 Release版本的运行
编码
打开powershell(不知道怎么打开就去百度)-- 使用cd命令切换到 TMC2 解压后的文件夹下,复制以下命令行(其中
frameCount=1 是编码1帧的意思,想编几帧就改成几,由于我的电脑配置还可以,再加上使用的都是Release版本的exe,
因此编码1帧只用了1分多钟,还是挺快的,但是如果是Debug版的跑一帧就要运行二十分钟。。):
注:第一个配置文件好像只能用ctc-common.cfg,用其他的会出错,不知道为什么
./bin/Release/PccAppEncoder.exe --configurationFolder=cfg/ --config=cfg/common/ctc-common.cfg --config=cfg/condition/ctc-all-intra.cfg --config=cfg/sequence/loot_vox10.cfg --config=cfg/rate/ctc-r3.cfg --uncompressedDataFolder=../ply/ --frameCount=1 --videoEncoderPath=../external/HM-16.20+SCM-8.8/bin/TAppEncoder.exe --colorSpaceConversionPath=../external/HDRTools-v0.18/bin/HDRConvert.exe --reconstructedDataPath=S26C03R03_rec_%04d.ply --compressedStreamPath=S26C03R03.bin --keepIntermediateFiles=1 --apply3dMotionCompensation=0
解码
使用powershell在同样的路径下,复制以下命令行:
./bin/Release/PccAppDecoder.exe --compressedStreamPath=S26C03R03.bin --videoDecoderPath=../external/HM-16.20+SCM-8.8/bin/TAppDecoder.exe --colorSpaceConversionPath=../external/HDRTools-v0.18/bin/HDRConvert.exe --inverseColorSpaceConversionConfig=cfg/hdrconvert/yuv420torgb444.cfg --reconstructedDataPath=S26C03R03_dec_%04d.ply --keepIntermediateFiles=1
3.2 Debug版本的运行
运行Debug版本是为了能够调试,方便看代码
编码
打开TMC2,选择Debug,x64 -- PccAppEncoder项目上右击 -- 设为启动项目 -- 再右击 -- 属性 -> 配置属性 -> 调试 -- 修改工作
目录,改为 $(SolutionDir).. -- 再添加命令参数如下:
--configurationFolder=cfg/ --config=cfg/common/ctc-common.cfg --config=cfg/condition/ctc-all-intra.cfg --config=cfg/sequence/loot_vox10.cfg --config=cfg/rate/ctc-r3.cfg --uncompressedDataFolder=../ply/ --frameCount=1 --videoEncoderPath=../external/HM-16.20+SCM-8.8/bin/TAppEncoder.exe --colorSpaceConversionPath=../external/HDRTools-v0.18/bin/HDRConvert.exe --reconstructedDataPath=S26C03R03_rec_%04d.ply --compressedStreamPath=S26C03R03.bin --keepIntermediateFiles=1 --apply3dMotionCompensation=0
然后关键的一步!!将 PccLibEncoder 项目中 PCCPatchSegmenter.cpp 文件下的第316行内容为:
assert( enablePointCloudPartitioning && patchExpansionEnabled == false ); 的这一行给注释掉!!不然会报错
然后 ctrl + F5 运行即可(我实验室的电脑跑一帧大概20分钟)
解码
将 PccAppDecoder 设为启动项目,工作目录同样修改为 $(SolutionDir).. ,命令参数如下:
--compressedStreamPath=S26C03R03.bin --videoDecoderPath=../external/HM-16.20+SCM-8.8/bin/TAppDecoder.exe --colorSpaceConversionPath=../external/HDRTools-v0.18/bin/HDRConvert.exe --inverseColorSpaceConversionConfig=cfg/hdrconvert/yuv420torgb444.cfg --reconstructedDataPath=S26C03R03_dec_%04d.ply --keepIntermediateFiles=1
有了编码产生的 bin 文件的话,直接运行就好啦