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文件带来得加速作用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律