Map Inference in the Face of Noise and Disparity代码环境搭建

1. 引言

地图生成算法网站Mapconstruction by pfoser里可以看到许多关于地图生成算法的介绍,Map Inference in the Face of Noise and Disparity是其中效果较好的算法,但是由于时间过去已久,Python相关的版本库迭代,作者也未使用版本管理工具,所以代码的运行也存在一定的问题

Map Inference in the Face of Noise and Disparity代码重现遇到的问题(持续更新....)_搬砖来的八块腹肌的博客-CSDN博客这篇文章没写完,笔者想给它写完

2. 资料下载

代码和数据下载地址:Bits - Software (uic.edu)

论文下载地址:https://www.cs.uic.edu/pub/Bits/JamesBiagioni/biagioni-gis12.pdf

3. 环境安装

作者经过不断的尝试,最终将环境所需要的软件版本使用Conda导出如下:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
bzip2=1.0.6=vc9_3
ca-certificates=2022.3.29=haa95532_1
certifi=2020.6.20=pyhd3eb1b0_3
cython=0.10.1=pypi_0
freetype=2.5.5=vc9_2
jpeg=9b=vc9_0
libpng=1.6.37=h7a46e7a_0
libtiff=4.0.6=vc9_3
numpy=1.10.1=py27_0
olefile=0.46=py27_0
opencv=2.4.11=py27_1
pillow=4.2.1=py27_0
pip=19.3.1=py27_0
python=2.7.18=hfb89ab9_0
rtree=0.9.7=pypi_0
scipy=0.16.0=np110py27_0
setuptools=44.0.0=py27_0
sqlite=3.30.1=h0c8e037_0
vc=9=h2eaa2aa_6
vs2008_runtime=9.00.30729.1=haa95532_6
wheel=0.37.1=pyhd3eb1b0_0
wincertstore=0.2=py27hf04cefb_0
zlib=1.2.11=h3cc03e0_3

可以直接复制这段文字到txt文件然后使用Conda导入,一键安装

主要的库有:

  • python 2.7.18
  • opencv 2.4.11
  • numpy 1.10.1
  • scipy 0.16.0
  • cython 0.10.1
  • pillow
  • rtree

4. 遇到的问题

4.1 Python版本

原代码里使用了是Python 2 的语法,直接使用Python 3 会报错,这里笔者建议先使用Python 2.7.x

4.2 OpenCV版本

原代码使用的应该是OpenCV 2 ,直接使用OpenCV 3 及以上会报错no module named cv,这里笔者建议先使用OpenCV 2.4.x

pip源里是没有opencv 2的,只有opencv-python 3.x ,所以这里需要使用Conda安装

conda install opencv=2

4.3 Cython版本

运行骨架细化(skeleton.py)会出现ImportError: No module named pyximport***

这里需要安装Cython,参照Map Inference in the Face of Noise and Disparity代码重现遇到的问题(持续更新....)_搬砖来的八块腹肌的博客-CSDN博客,安装完Cython和编译器后会出现ImportError: Building module subiterations failed: [“CompileError: command ‘C:\\Users\\xxx\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\cl.exe’ failed with exit status 2\n”,经过笔者的尝试,将cython版本降低到0.10.x可以解决,Conda源里没有cython 0.10.x,只有高版本的cython ,所以这里需要使用pip安装:

pip install cython==0.10.1

4.4 编译器

运行骨架细化(skeleton.py)会出现Unable to find vcvarsall.bat

参考:Unable to find vcvarsall.bat_深山里的小白羊的博客-CSDN博客,总的来说就是需要编译器Microsoft Visual C++ Compiler for Python 2.7

这里笔者首先遇到的麻烦是:Microsoft Visual C++ Compiler for Python 2.7 下载地址https://www.microsoft.com/en-us/download/details.aspx?id=44266不可用,微软官网没有提供下载了

经过笔者探索,最后在这里下载:https://master.dl.sourceforge.net/project/transfervisc/VCForPython27.msi?viasf=1

第二个问题是环境变量:Unable to find vcvarsall.bat_深山里的小白羊的博客-CSDN博客里提到的方法都可行,只是第一个方法的环境变量地址不对,第二种方法修改了源文件,带有一定的侵入性,笔者查看源代码发现源代码里是使用VS90COMNTOOLS这个环境变量,我们配置一下编译器的环境变量即可:

添加一个环境变量,变量名为VS90COMNTOOLS,变量值为C:\Users\xxx\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin(请将xxx换为你的用户名,并检测这个地址是否存在)

即使添加了环境变量也可能没解决,且看下一个问题

第三个问题是源代码的路径有问题,且看源代码(envs\<env-name>\Lib\distutils\msvc9compiler.py):

toolskey = "VS%0.f0COMNTOOLS" % version
toolsdir = os.environ.get(toolskey, None)

if toolsdir and os.path.isdir(toolsdir):
    productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

意思就是VS90COMNTOOLS的地址向上两级再添加VC,可是笔者发现vcvarsall.bat这个文件不在VC目录下啊,而是和VC目录同级,所以笔者将,"VC"删除了:

toolskey = "VS%0.f0COMNTOOLS" % version
toolsdir = os.environ.get(toolskey, None)

if toolsdir and os.path.isdir(toolsdir):
    productdir = os.path.join(toolsdir, os.pardir, os.pardir)

4.5 链接文件numpy/arrayobject.h

编译文件的时候说找不到这个numpy/arrayobject.h:

fatal error C1083: 无法打开包括文件: “numpy/arrayobject.h”: No such file or directory

经过笔者验证这个文件存在于envs\<env-name>\Lib\site-packages\numpy\core\include\numpy

笔者将这个envs\<env-name>\Lib\site-packages\numpy\core\include\下的numpy文件夹复制到envs\<env-name>\include解决了链接问题

4.5 无法导入imsave

skeleton.py中的

from scipy.misc import imsave, toimage

改为

from scipy.misc.pilutil import imsave, toimage

然后报错找不到Image库,安装PIL即可:

conda install pillow

至此问题基本全部解决

5. 写在最后

其实最烦的就是Cython的编译问题,Cython编译的那个文件其实就是两个运算函数,这个文件用Python重写也挺简单,就不必这么麻烦得搭建编译环境

笔者使用中也并未明显感受到这个Cython文件带来得加速作用

参考资料

posted @ 2022-04-27 16:48  当时明月在曾照彩云归  阅读(265)  评论(15编辑  收藏  举报