不知道大家在复现pvn3d的时候有没有被pcl折磨过,反正我是被狠狠的折磨了,属于是一点点版本差异,环境差异就要报错,安装不了。可惜当时很多错误我解决就解决了,没有记录,因为当时非常烦躁,已经搞了两天了,就这个错误截了个图,并且印象比较深刻。
这个错误大概是说,你x86系统大小端识别问题,建议是遇到这个问题就放弃吧,我反正是解决了好久没有成功。简单说一下我找到的解决办法。
大小端错误
因为PCLPointCloud2.h
文件无法确定系统的字节序,从而引发了编译错误。通常分为大端(Big Endian)和小端(Little Endian)。
修改setup.py
文件,找到如下:
#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)
#define BIG_ENDIAN
#elif defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN)
#define LITTLE_ENDIAN
#elif defined(_WIN32) || defined(__i386__) || defined(__x86_64__)
#define LITTLE_ENDIAN
#else
#error "unable to determine system endianness"
#endif
在 #if defined(__BYTE_ORDER)
之前添加 如下,因为一般电脑都是小端,或者你可以用命令查看,具体我忘了,可以搜一下。
#define LITTLE_ENDIAN
保存,并继续运行:
python setup.py build_ext -i
希望你看到这可以解决问题,不过想来不太行,我就没有解决。我接下来讲一下我如何解决问题。
安装python-pcl
参考的文章是https://blog.csdn.net/CHONGjjj/article/details/132077998,作者讲的很全面,win10解决问题很好,不过我按照他的方法安装不了python-pcl,所以才写了一篇。
下面是一些关键步骤
1. 安装vs2017(别装新版本,要不安不上指定版本的Cython) 链接是 https://qiniu-pic.atri.wiki/share/download/visual_studio_community_2017_version_15.3.exe
2. 我选的python版本是3.6,安装的Cython版本是0.25.2,其他版本包的版本都是适配这些版本,别问为什么,问就是,其他的试过,不行,看了一堆乱七八糟的博客,然后尝试这样安装,发现可以,并且和别人也试验过,他也是只有这样可以,就很怪。conda创建环境不多说。
conda create -n pvn3d python=3.6
3. 然后安装PCL1.8.1, https://github.com/PointCloudLibrary/pcl/releases?page=3,
选择第四个 ,当然,可以根据自己计算机来选择。并且!安装的时 候尽量放在根目录不要有空格,安装下来是pcl 1.8.1,建议修改为pcl181。
其实我不知道这样也会报错,但是之前看到有博客提过一嘴,并且我三周目这样尝试确实没出错,所以建议大家就这样做,反正没有损失。
pcl安装结束,一般会自动跳转安装openni,安装就可以了,如果不小心跳过了,也可以到这个位置:~\3rdParty\OpenNI2 点击如图安装
这里安装后需要自己设置几个环境变量,可以选择win+r,然后输入sysdm.cpl,回车。在高级选项中选择环境变量,然后点击新建,添加变量名和变量值:
需要添加 VTK_ROOT,然后路径就是E:\PCL181\3rdParty下的VTK,PCL_ROOT,就是你的安装位置,OPEN_NI2_ROOT,也是在E:\PCL181\3rdParty下,BOOST_ROOT,同上。
然后在系统变量中找到path,双击,继续添加变量,我建议是把我图中的都添加了,反正我之前老报错找不到什么什么包,这边建议,用到的全填加。
3. 在https://github.com/strawlab/python-pcl下载源代码。
然后下载这个文件: https://qiniu-pic.atri. wiki/share/download/gtk%2B-bundle_3.10.4-20131202_win64.zip
解压后把gtk中bin里面的文件放进 python-pcl-master文件夹中的pkg-config文件夹,注意,这里是要把bin里面的文件全部复制到pkg-config中,不要把bin放到pkg-config里,实测,我要是把bin放到pkg-config里面,后面会出现一堆报错然后又到大小端问题,然后解决不了,恭喜又开始新的周目。难受了。
然后在pkg-config文件夹运行 InstallWindowsGTKPlus.bat这个文件,如果遇到与问题,可以右键然后管理员运行。运行成功如图有三个文件夹基本就是对了:
然后切换到之前安装好py3.6和Cython版本为0.25.2的环境,在 python-pcl-master运行:
python setup.py build_ext -i
就是这一步,报错老多了,一个一个来看吧,我把我遇到的都给你们说一说吧,主要是还是调整代码的问题,眼睛我都看花了,配置文件代码太多了,还生怕修改的不对直接瘫了。看能不能帮到你们吧
如果安装成功就:
python setup.py install
这样就算安装成功,然后
pip list
有版本号为0.3.0rc1的python-pcl就装好了,注意他安装成功会生成_ext.cp36-win_amd64.pyd文件,需要放到pvn3d中E:\pvn3d\lib\pointnet2_utils下,这个问题我后面会专门写一章来讲。
“boost/shared_ptr.hpp”: No such file or directory
问题主要是无法找到boost包,属于是常见抽风了,明明添加了环境变量,明明就在他该在的位置,欸,就是找不到!这里的方法通用,也适应其他的包eigen,vtk,openni,qhull,flann。
修改方法,去setup.py里面第95行开始,是pcl需要用到的包的root目录定义:
默认设置是通过你设置的pcl_root去定义这些包的路径的,但是我检查过,没有什么问题,但就是找不到包,没办法建议这里别用路径加法了,直接用绝对路径定义把图中boost_root路径定义为
E:\PCL181\3rdParty\Boost
自己按自己的路径修改哈,大概就是定位到pcl安装路径,然后在旗下的 3rdParty\Boost。并且,理论上是可以了,但是建议继续修改如图位置:
我没有单独修改尝试过,在撕代码的时候,发现这里也是定义包路径,就一并修改了,并且他定义了不同版本的pcl的包路径,你可以只修改你下载的版本的包路径,建议还是绝对路径,包不出错。
其他包同这个一样修改!!!
(pvn3d) E:\PCL181\Pointnet2_PyTorch>python setup.py build_ext running build_ext
这个错误应该比较小众,我也还是提一下,因为看到有些复现博客让你在pointnet2_pytorch下运行setup.py,就会出现这个错误,我不知道他们为什么这么说哈,可能打错了,或者什么的,反正我打开看了,这个文件夹下的setup并没有链接gcc,运行什么东西,就只写了些变量。
遇到这个问题,就是运行了错误的setup。请在E:\PCL181\Pointnet2_PyTorch\pointnet2_ops_lib下运行setup.py文件,就没问题了。
ValueError: cannot find context for forkserver
如果出现这个报错,他会提示你报错位置,去到指定位置,把forkserver改为spawn就好了
这个问题,我遇到了,但是没有截图留存,不过是个小bug,没关系。
小问题汇总
这里总结一些其他小问题,在上面都或多或少提过,以防你看的不仔细,这里汇总一下。
1. 安装尽量不要留空格和小数点。原安装文件:PCL 1.8.1,我一般改为:PCL181
2. 我的环境,python3.6,cython0.25.2,Visual Studio 2017,这里建议,创建完环境,只安装这些,就直接安装pcl,这样容易成功一点。并且我只是建议这些环境,因为我尝试过python3.8,3.10还有一些其他环境,都没安装上。
3. 运行成功会生成一个_ext.cp36-win_amd64.pyd文件,记得放到E:\pvn3d\lib\pointnet2_utils位置哦。
好了以上就是全部内容,希望有帮助。