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文件带来得加速作用

参考资料

Map Inference in the Face of Noise and Disparity代码环境搭建的更多相关文章

  1. AV 地址错误 map 文件 根据地址报错,查 Delphi 代码

    1. 首先需要设置程序生成 map 文件.Project -> Options -> Linker -> Map file , Detailed 2. 计算公式Edit2.Text ...

  2. java8--List转为Map、分组、过滤、求和等操作----代码示例

    Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...

  3. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(六)针对spark2.2.1以yarn方式启动spark-shell抛出异常:ERROR cluster.YarnSchedulerBackend$YarnSchedulerEndpoint: Sending RequestExecutors(0,0,Map(),Set()) to AM was unsuccessful

    Spark以yarn方式运行时抛出异常: [spark@master bin]$ cd /opt/spark--bin-hadoop2./bin [spark@master bin]$ ./spark ...

  4. perf 对两个map是否重叠的判断,以及函数map_groups__fixup_overlappings代码逻辑

    该标题可以抽象出来的问题是:两个前开后闭的区间 rangeA 和 rangeB,如何判断这两个区间是否重叠.这个问题在内核中非常重要,虚拟地址空间的划分需要它,perf中map_group的构建也需要 ...

  5. 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写

    1. 首先我们按照List或数组等处理方式来处理Map,看看效果 1.1 在服务端的接口中添加以下方法 /** * 查询所有班级信息加上对应的学生列表 * * @return */ public Ma ...

  6. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  7. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  8. STL模板中的map的使用与例题

    最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...

  9. 如何使用Google Map API开发Android地图应用

    两年前开发过的GoogleMap已经大变样,最近有项目要用到GoogleMap,重新来配置Android GoogleMap开发环境,还真是踩了不少坑. 一.下载Android SDK Manager ...

  10. std::map用法

    STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用.    在STL模板类中,用于线性数据存储管理的类主要有vector, list, map 等等.本文主要 ...

随机推荐

  1. 如何取消磁盘的BitLocker加密

    步骤1:打开开始[win]菜单,点击齿轮图标,打开[设置] 步骤2:在Windows设置视窗中点击[更新和安全] 步骤3:点击左侧[设备加密],点击视窗右侧[关闭] 步骤4:将提示是否需要关闭设备加密 ...

  2. 【机器学习】李宏毅——Anomaly Detection(异常检测)

    异常检测概述 首先要明确一下什么是异常检测任务.对于异常检测任务来说,我们希望能够通过现有的样本来训练一个架构,它能够根据输入与现有样本之间是否足够相似,来告诉我们这个输入是否是异常的,例如下图: 那 ...

  3. vue中点按钮回到顶部,和elementUI中置顶按钮的实现

    一般做pc项目都会遇到侧边小按钮点击回到顶部的功能,现在记录一下项目中的实现方法 一.结合动画效果实现 <li class="defa_bt" @click="hd ...

  4. JUC源码学习笔记5——1.5w字和你一起刨析线程池ThreadPoolExecutor源码,全网最细doge

    源码基于JDK8 文章1.5w字,非常硬核 系列文章目录和关于我 一丶从多鱼外卖开始 话说,王多鱼给好友胖子钱让其投资,希望亏得血本无归.胖子开了一个外卖店卖国宴,主打高端,外卖小哥都是自己雇佣,并且 ...

  5. [数据结构]Hash Table(哈希表)

    Hash Table基本概念 散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr. 散列函数可能会把两个或者两个以上的关键字映射到同一个地址,称这种情况为 ...

  6. elasticsearch实现基于拼音搜索

    目录 1.背景 2.安装拼音分词器 3.拼音分词器提供的功能 4.简单测试一下拼音分词器 4.1 dsl 4.2 运行结果 5.es中分词器的组成 6.自定义一个分词器实现拼音和中文的搜索 1.创建m ...

  7. 当LOGO设计与世界文化擦出火花——JJQ的LOGO设计之路

      <当LOGO设计与世界文化碰撞出火花--论 JJQ 的LOGO是如何制成的> (友链:https://tg.hszxoj.com/user/475) 首先我们对jjq对应的汉字进行拉长 ...

  8. SSM使用PageHelper

    第一步---->导入Maven依赖 <!--pageHelper--> <dependency> <groupId>com.github.pagehelper ...

  9. 2023 年该学点什么技术?「GitHub 热点速览 v.23.03」

    春节期间,小鱼干读了一篇万字回顾数据库行业的文章,在文字缝隙里我看见了两个词:AI+ 和数据两个词(当然数据是废话,毕竟是一个数据库的回顾文).在 GitHub 上热点趋势上,可见到 AI+ 的身影, ...

  10. 默认方法:and-默认方法:or

    默认方法:and 既然是条件判断,就会存在与.或.非三种常见的逻辑关系.其中将两个Predicate条件使用"与"逻辑连接起来实现"并且"的效果时,可以使用de ...