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文件带来得加速作用
参考资料
- Unable to find vcvarsall.bat_深山里的小白羊的博客-CSDN博客
- Map Inference in the Face of Noise and Disparity代码重现遇到的问题(持续更新....)_搬砖来的八块腹肌的博客-CSDN博客
- Mapconstruction by pfoser
Map Inference in the Face of Noise and Disparity代码环境搭建的更多相关文章
- AV 地址错误 map 文件 根据地址报错,查 Delphi 代码
1. 首先需要设置程序生成 map 文件.Project -> Options -> Linker -> Map file , Detailed 2. 计算公式Edit2.Text ...
- java8--List转为Map、分组、过滤、求和等操作----代码示例
Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...
- 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 ...
- perf 对两个map是否重叠的判断,以及函数map_groups__fixup_overlappings代码逻辑
该标题可以抽象出来的问题是:两个前开后闭的区间 rangeA 和 rangeB,如何判断这两个区间是否重叠.这个问题在内核中非常重要,虚拟地址空间的划分需要它,perf中map_group的构建也需要 ...
- 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写
1. 首先我们按照List或数组等处理方式来处理Map,看看效果 1.1 在服务端的接口中添加以下方法 /** * 查询所有班级信息加上对应的学生列表 * * @return */ public Ma ...
- MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析
在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- STL模板中的map的使用与例题
最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...
- 如何使用Google Map API开发Android地图应用
两年前开发过的GoogleMap已经大变样,最近有项目要用到GoogleMap,重新来配置Android GoogleMap开发环境,还真是踩了不少坑. 一.下载Android SDK Manager ...
- std::map用法
STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用. 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map 等等.本文主要 ...
随机推荐
- 【离线数仓】Day03-系统业务数据仓库:数仓表概念、搭建、数据导入、数据可视化、Azkaban全调度、拉链表的使用
一.电商业务与数据结构简介 1.业务流程 2.常识:SKU/SPU SKU=Stock Keeping Unit(库存量基本单位).现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号. ...
- 用了这么多年的 SpringBoot 你知道什么是 SpringBoot 的 Web 类型推断吗?
用了这么多年的 SpringBoot 那么你知道什么是 SpringBoot 的 web 类型推断吗? 估计很多小伙伴都不知道,毕竟平时开发做项目的时候做的都是普通的 web 项目并不需要什么特别的了 ...
- Redis RDB 与AOF
参考书籍<Redis设计与实现> 一丶为什么redis需要持久化 redis 作为一个内存数据库,如果不想办法将存储在内存中的数据,保存到磁盘中,那么一旦服务器进程退出,那么redis数据 ...
- [论文总结] 农业工程领域中App和Web相关应用论文笔记
文章目录 1. Tomato leaf segmentation algorithms for mobile phone applications using deep learning 2. Int ...
- session取不到值
今天鼓捣项目时出现了一个问题 项目重启后,设置session值后,第一次请求经过过滤器时 session取不到值,导致被拦截 经过半天的研究,终于...我请教了别人 把代码给了朋友,在朋友一段时间的琢 ...
- scratch图形化编程教程
1. scratch软件 市面上类似于scratch这种图形化编程的软件非常多,各个品牌的都有,而且每个品牌之后的风格.界面布局也是不同的,所以我会简单的列举一些对应软件. scratch3.0 优点 ...
- 在GCP上创建GCE的三种方式(Console,gcloud,Terraform)
1 简介 如果要选择GCP为云平台,则经常需要创建GCE(Google Compute Engine),有以下几种方式: (1) 在浏览器创建 (2) 命令 gcloud (3) Terraform ...
- angular打包部署设置publicPath文件目录及访问地址,解决打包完成后,运行打包文件,报错404,js,css未找到
方案1.改变文件目录 不改变访问地址:XXXPRO 是部署的服务器上面的 文件夹名称 ng build --prod --base-href /XXXPRO 方案2.改变访问地址录同时改变文件目录-- ...
- 【学习笔记】珂朵莉树(ODT)
珂朵莉树 \(\tt 0x00\) 起源 起源于 CodeForces 的一题 CF896C,当时出题人提供了这种做法,在随机数据下均摊复杂度比较优秀. 正统名字好像叫颜色段均摊,由于题目也得名于 \ ...
- 对线面试官:浅聊一下 Java 虚拟机栈?
对于 JVM(Java 虚拟机)来说,它有两个非常重要的区域,一个是栈(Java 虚拟机栈),另一个是堆.堆是 JVM 的存储单位,所有的对象和数组都是存储在此区域的:而栈是 JVM 的运行单位,它主 ...