ubuntu16中Open3D算法测试笔记

ubuntu16中Open3D算法测试

open3d测试代码来自https://github.com/intel-isl/Open3D

一、Open3D测试说明

    用彩色图和深度图重建三维模型,只支持针孔相机模型,不支持全景图重建。
    彩色图支持jpg,png格式的32位图,深度图只能是16位png图片。

二、安装Open3D

1. 环境:已安装opencv和cmake3.10以上版本

1.1 安装cmake3.18.0

    参考https://blog.csdn.net/fly_hps/article/details/106663431

1.2 安装opencv3.2.0

    安装流程参考文章一https://blog.csdn.net/public669/article/details/99044895。其中,在make阶段出现一些问题本文没有提,如果有问题详细可参考文章二https://blog.csdn.net/weixin_41896508/article/details/80795239罗列的方法解决。
      针对文章二补充:
    1)问题一中:下载ippicv_linux_20151201.tgz,如果打不开文中提供的链接可以去github下载https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20151201/ippicv。下载后,文中说放在opencv-3.2.0/3rdparty/ippicv/downloads/,我的是放在opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/,比文中多了一层,不确定放在哪里可以先执行make,报错是报哪里就放在哪里。
    2)解决完文中问题后在make阶段报错 “…opencv_lapack.h:2:45: fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h:No such file…”,则执行sudo apt-get install liblapacke-dev checkinstall,如果依然报错找不到文件,则打开出错文件opencv-3.2.0/build/opencv_lapack.h,把第2行:

#include "LAPACKE_H_PATH-NOTFOUND/lapacke.h"

去掉 LAPACKE_H_PATH-NOTFOUND/ ,改成:

#include "lapacke.h"

      针对文章一补充:
     1)添加路径时,如果是在服务器上无法显示图形界面,把所有的gedit命令替换成vim即可。

2. 安装Open3D的两种方式

2.1 pip换源安装(建议)

pip install open3d -i https://pypi.douban.com/simple

2.2 编译安装

#拉取open3d
git clone --recursive https://github.com/intel-isl/Open3D
#进入Open3D/文件夹中
cd Open3D
#拉子模块
git submodule update --init --recursive
#创建build文件夹
mkdir build 
cd build
#在build文件夹下编译
cmake -DCMAKE_INSTALL_PREFIX=../open3d/ .. 
#如果这里make有error, 比如缺少头文件,那就重新拉取子模块
make -j8
make install 
#因为open3d的0.10版本安装上之后很多东西不兼容所以选择0.9版本
#如果是python2安装open3d    
pip install open3d=0.9.0.0 
#如果是python3安装open3d 
pip3 install open3d=0.9.0.0

三、样例数据下载

     因为是用github的样例代码进行测试的,所以如果是pip安装的open3d,还是要把https://github.com/intel-isl/Open3D的文件clone下来

1. 数据集1

     在Open3D/examples/python/ReconstructionSystem/scripts/有几个sh脚本,依次执行可以下载它的数据集,sh脚本把数据集下载在了 Open3D/examples/Python/ReconstructionSystem/dataset/,可查看一下是否下载成功。
     我只有sh download_tutorial.sh执行成功,下载了数据集tutorial,其他的失败了。

2. 数据集2

     open3d官网: http://www.open3d.org/docs/release/tutorial/ReconstructionSystem/system_overview.html
     页面中提供的一个样例下载链接[quicklink]: https://drive.google.com/open?id=11U8jEDYKvB5lXsK3L1rQcGTjp0YmRrzT,数据集文件名016
​​ubuntu16中Open3D算法测试笔记_第1张图片
    下载后手动放在 Open3D/examples/Python/ReconstructionSystem/dataset/ 下

四、系统重建测试(reconstruction system)

系统重建测试如果有报错拉到后面4看解决办法。

1.测试数据集1中下载的tutorial

测试数据:

Open3D/examples/Python/ReconstructionSystem/dataset/tutotial
说明:tutorial中有depth和image两个文件夹,描述一个卧室场景

测试过程:

cd到Open3D/examples/Python/ReconstructionSystem/,
依次执行

python3 run_system.py config/tutorial.json --make
python3 run_system.py config/tutorial.json --register
python3 run_system.py config/tutorial.json --refine
python3 run_system.py config/tutorial.json --integrate

或者直接执行

python3 run_system.py config/tutorial.json --make --register --refine --integrate
测试结果:

保存在Open3D/examples/Python/ReconstructionSystem/dataset/tutorial/scene/下的.ply文件
效果展示:
ubuntu16中Open3D算法测试笔记_第2张图片

测试时间:

make和register各用7分钟,一共生成了13个碎片(fragment);
refine很快;
integrate用了47分钟左右;

2.测试数据集2中下载的016

测试数据:

Open3D/examples/Python/ReconstructionSystem/dataset/016
说明:016中有depth和image两个文件夹,数据集image和depth两个文件夹各2G多,描述一个完整的房子内部;

测试过程:

修改Open3D/examples/Python/ReconstructionSystem/config/tutorial.json(或者复制内容重建一个json),把参数

"path_dataset": "dataset/tutorial/",

更改为

"path_dataset": "dataset/016/",

然后测试过程同上

测试结果:

保存在Open3D/examples/Python/ReconstructionSystem/dataset/016/scene/下的.ply文件
效果展示:
ubuntu16中Open3D算法测试笔记_第3张图片

测试时间:

make和register各用90分钟左右,生成319个碎片;
refine很快;
integrate用了20个小时;

3. 其他数据集测试参数调整说明

     1) 如果要测试其他数据集,让config/下的json文件中要测试的文件名和data/下的数据集名称对应,数据集中depth和image下的图片名称和数量一一对应。
     2) 在Open3D/examples/Python/ReconstructionSystem/config/tutorial.json中可能需要修改的参数

参数 默认值 说明
path_intrinsic 缺省 说明图片分辨率和相机内参的json文件的路径
max_depth 3.0 相机拍摄的最大距离
min_depth 0.3 相机拍摄的最小距离

     算法默认图片分辨率为640x480,如果图片分辨率不是640x480或者要修改相机内参,需为参数path_intrinsic添加一个值:

"path_intrinsic": "dataset/myDataset/camera.json",

     然后在Open3D/examples/Python/ReconstructionSystem/dataset/myDataset/ 下新建camera.json,内容形式如下(下列数据是算法默认数据):

{ 
	"width" : 640, 
	"height" : 480, 
	"intrinsic_matrix" : 
	[ 512.0, 
	0, 
	0, 
	0, 
	525.0, 
	0, 
	319.5, 
	239.5, 
	1 ] 
}

4. 重建报错解决办法

    1) 报错AttributeError: module 'open3d' has no attribute 'pipelines',open3d版本更新导致的。搜索Open3D/examples/Python/ReconstructionSystem/下的所有 .py文件中出现的 o3d.piplines.xxx.pipelines 删掉,改成o3d.xxx
    2) 在1中,每一句都会有同样的错误AttributeError: 'bool' object has no attribute 'lower',需到相应的.py文件中修改。比如第三句–refine时报错:

Traceback (most recent call last):
  File "run_system.py", line 78, in <module>
    refine_registration.run(config)
  File "/root/open3d/examples/Python/ReconstructionSystem/refine_registration.py", line 179, in run
    make_posegraph_for_refined_scene(ply_file_names, config)
  File "/root/open3d/examples/Python/ReconstructionSystem/refine_registration.py", line 137, in make_posegraph_for_refined_scene
    if config["python_multi_threading"].lower() == "true":
 AttributeError: 'bool' object has no attribute 'lower'

   上面的错误到refine_registration.py中把

if config["python_multi_threading"].lower() == "true":

  改为

if str(config["python_multi_threading"]).lower() == "true":

五、总结

测试时间非常长,测试过程中cpu拉满,gpu空闲。

你可能感兴趣的:(备忘录)