open3d Reconstruction system 问题解决

发布时间 2023-04-29 18:47:36作者: 黑逍逍

1. https://github.com/luckyluckydadada/Azure-Kinect-DK-3D-reconstruction

 

2. open3d 版本:

  0.14.1

  0.16.0 0.17.0 会报错:open3d.cuda.pybind.piplines.odommetry.OdomtryOption boject has no attribute 'max_depth_diff' 

3. 结果

  

问题一:

 

 

 

 

根据错误提示,问题出在文件 opencv_pose_estimation.py 的第 178 行,Transform_good[:3, 3] = [t_approx[0], t_approx[1], t_approx[2]] 这行代码。根据错误信息,看起来是尝试将一个序列赋值给一个数组元素,但是数组维度不够。

可能的解决方法是将 [t_approx[0], t_approx[1], t_approx[2]] 这个列表改为 numpy 数组,可以使用 np.array() 函数将其转换为 1D numpy 数组,即

Transform_good[:3, 3] = np.array([t_approx[0], t_approx[1], t_approx[2]])

 

问题二:

这个报错是由于试图将形状为 (3,1) 的数组广播到形状为 (3,) 的数组,导致维度不匹配。你可以使用 np.squeeze() 函数将数组的维度降为1维,或者使用 [0] 索引来访问数组的第一个元素,例如将这一行代码

Transform_good[:3, 3] = np.array([t_approx[0], t_approx[1], t_approx[2]])[0]

 

问题三:

这个错误发生在使用joblib库并行处理任务时,其中一个工作进程异常终止导致整个程序崩溃。可能的原因是调用函数时发生了段错误或者内存占用过高导致操作系统强制杀死进程。可以考虑增加机器的内存或者减小并行任务的规模

 

减小并行任务规模可以通过减少每个任务的输入数据量来实现。在这种情况下,您可以尝试使用更小的输入数据集来运行代码,或者将原始数据分成更小的块,并逐步处理它们。您还可以通过减少同时运行的作业数来减小并行任务规模。这可以通过在调用 Parallel() 函数时将 n_jobs 参数设置为较小的数字来实现。例如,如果您正在使用 16 个作业来并行处理数据,您可以将 n_jobs 设置为 8 或 4,以便减小作业的规模

 MAX_THREAD 的值是根据 CPU 核心数和分块数量来计算的,因此可以尝试调整代码中 n_fragments 的值来降低并行任务规模,n_fragments是指待处理的碎片(fragment)数量,可以理解为需要被并行处理的任务数量。在这个上下文中,这个变量的值会用来计算并行任务规模

 

问题四: