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. 【离线数仓】Day03-系统业务数据仓库:数仓表概念、搭建、数据导入、数据可视化、Azkaban全调度、拉链表的使用

    一.电商业务与数据结构简介 1.业务流程 2.常识:SKU/SPU SKU=Stock Keeping Unit(库存量基本单位).现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号. ...

  2. 用了这么多年的 SpringBoot 你知道什么是 SpringBoot 的 Web 类型推断吗?

    用了这么多年的 SpringBoot 那么你知道什么是 SpringBoot 的 web 类型推断吗? 估计很多小伙伴都不知道,毕竟平时开发做项目的时候做的都是普通的 web 项目并不需要什么特别的了 ...

  3. Redis RDB 与AOF

    参考书籍<Redis设计与实现> 一丶为什么redis需要持久化 redis 作为一个内存数据库,如果不想办法将存储在内存中的数据,保存到磁盘中,那么一旦服务器进程退出,那么redis数据 ...

  4. [论文总结] 农业工程领域中App和Web相关应用论文笔记

    文章目录 1. Tomato leaf segmentation algorithms for mobile phone applications using deep learning 2. Int ...

  5. session取不到值

    今天鼓捣项目时出现了一个问题 项目重启后,设置session值后,第一次请求经过过滤器时 session取不到值,导致被拦截 经过半天的研究,终于...我请教了别人 把代码给了朋友,在朋友一段时间的琢 ...

  6. scratch图形化编程教程

    1. scratch软件 市面上类似于scratch这种图形化编程的软件非常多,各个品牌的都有,而且每个品牌之后的风格.界面布局也是不同的,所以我会简单的列举一些对应软件. scratch3.0 优点 ...

  7. 在GCP上创建GCE的三种方式(Console,gcloud,Terraform)

    1 简介 如果要选择GCP为云平台,则经常需要创建GCE(Google Compute Engine),有以下几种方式: (1) 在浏览器创建 (2) 命令 gcloud (3) Terraform ...

  8. angular打包部署设置publicPath文件目录及访问地址,解决打包完成后,运行打包文件,报错404,js,css未找到

    方案1.改变文件目录 不改变访问地址:XXXPRO 是部署的服务器上面的 文件夹名称 ng build --prod --base-href /XXXPRO 方案2.改变访问地址录同时改变文件目录-- ...

  9. 【学习笔记】珂朵莉树(ODT)

    珂朵莉树 \(\tt 0x00\) 起源 起源于 CodeForces 的一题 CF896C,当时出题人提供了这种做法,在随机数据下均摊复杂度比较优秀. 正统名字好像叫颜色段均摊,由于题目也得名于 \ ...

  10. 对线面试官:浅聊一下 Java 虚拟机栈?

    对于 JVM(Java 虚拟机)来说,它有两个非常重要的区域,一个是栈(Java 虚拟机栈),另一个是堆.堆是 JVM 的存储单位,所有的对象和数组都是存储在此区域的:而栈是 JVM 的运行单位,它主 ...