DynaSLAM超详细安装配置运行ubantu20.0.4+opencv2.4.11+tensorflow1.4.0

注:我现在ubantu的环境是基于可以运行ORB SLAM 2和ORB SLAM3之后的

前言:

最后的部分版本信息:

虚拟机                   ubantu20.0.4
opencv                    2.4.11 h5py                      2.10.0
keras                     2.0.9
numpy                     1.16.6
pillow                    6.2.2
python                    2.7.18
pycocotools               2.0.3
scikit-image              0.14.5
tensorflow                1.4.0

一.先安装Anaconda

超详细Ubuntu安装Anaconda步骤+Anconda常用命令

如果您希望 conda 的基础环境在启动时不被激活,请将 auto_activate_base 参数设置为 false,命令如下:

conda config --set auto_activate_base false

当然这一条命令执行完毕后,想要再次进入conda的base环境,只需要使用对应的conda指令即可,如下:

conda activate base

二. 编译DynaSLAM前需要安装的其他库

实跑DynaSLAM

参考:关于运行DynaSLAM源码这档子事(OpenCV3.x版)

2.1 安装boost库

sudo apt-get install libboost-all-dev

2.2下载DynaSLAM

git clone  https://github.com/BertaBescos/DynaSLAM.git

2.3下载coco数据集

作用:这个是当pycocotools安装不成功的时候,就用这个来安装

git clone https://github.com/waleedka/coco.git

三. 下载DynaSLAM源码并放入h5文件

  • 下载DynaSLAM源码
git clone https://github.com/BertaBescos/DynaSLAM.git
  • 从这个页面https://github.com/matterport/Mask_RCNN/releases下载mask_rcnn_coco.h5文件
  • 把文件mask_rcnn_coco.h5复制到DynaSLAM/src/python/

注:找不到的拉到页面的最下面。

四.用Anaconda配置Python相关的环境

这里先在Anaconda创建一个新的虚拟环境并激活,然后在虚拟环境中依次安装tensorflow和keras。

防止走弯路,可以先把第四部分看完再安装,因为我中间也有报错的部分

conda create -n MaskRCNN python=2.7
conda activate MaskRCNN
pip install tensorflow==1.4.0  #或者 pip install tensorflow-gpu==1.4.0
pip install keras==2.0.9

注:我最开始安装的是tensorflow==1.14.0,但是各种报错,最后的结果是1.4.0版本。

4.1 安装scikit-image

sudo pip install scikit-image

我在安装sudo pip install scikit-image时,说我numpy版本过低,pillow版本过低。

//升级numpy和pillow
sudo pip install numpy==1.19.2
sudo pip install pillow==8.3.2

4.2 安装pycocotools

4.2.1直接安装pycocotools

pip install pycocotools

我的没报错,可能是用了VPN的原因。

报错的话参考 :3.2 关于pycocotools的报错

4.2.2 通过git下载coco进行安装

git clone https://github.com/waleedka/coco
  • 记得安装依赖
 pip install Cythonpip install fasttext
  • 安装COCO工具箱

    cd coco
    cd PythonAPI
    which python
    sudo /home/cgm/anaconda3/envs/MaskRCNN/bin/python setup.py install
    

4.2.3 安装pycocotools报错及解决

  • 安装了Cython还是报错:ImportError: No module named Cython.Build

解决:ImportError: No module named Cython.Build

4.2.4 pycocotools文件替换

  • 将新生成的 build/lib.linux-x86_64-2.7/pycocotools 文件夹里的内容替换到 pycocotools 文件夹中

4.3 测试Mask R-CNN环境及报错解决

  • 运行:
python src/python/Check.py
  • 报错:ImportError: No module named skimage.io

解决参考 解决已安装scikit-image不能导入skimage的问题

我最后安装的是scikit-image==0.14.5,而不是这里的0.14.0,因为0.14.0还是有其他的报错。

PS(马后炮): 我感觉这里sudo pip install scikit-image==0.14.5就好了

  • 再次运行
python src/python/Check.py
  • 报错:ImportError: cannot import name _validate_lengths

网上绝大多数回答是:

numpy版本太高,对numpy进行重新安装:

  pip install numpy==1.15.0

**但是降低版本会引来其他很多问题,因此我认为这不是很好的解决方式。**我现在的numpy=16.6.0

解决办法:

  • 出现上述错误的原因是由于在安装其他库的过程中,numpy库的版本变了,所以导致错误。因此,只需升级一下scikit-image库。
pip install -U scikit-image


我这里scikit-image就是从0.14.0升级到0.14.5

我最后还是把tensorflow 从 1.14.0 降到 1.4.0 了

  • 发现在运行Check.py时会报utils.py中的scipy.misc.imresize不可用的错误

    解决方法:D8异常处理

    (我没遇到这个问题)scipy1.3.0后imresize被弃用,我的scipy1.2.3。

4.4 Mask R-CNN环境配置正确

再次运行

python src/python/Check.py

如果输出为Mask R-CNN is correctly working,就可以下一步了。

4.5相应的依赖的版本

(MaskRCNN) cgm@ubuntu:~/DynaSLAM$ conda list
# packages in environment at /home/cgm/anaconda3/envs/MaskRCNN:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main
_openmp_mutex             5.1                       1_gnu
absl-py                   0.15.0                   pypi_0    pypi
astor                     0.8.1                    pypi_0    pypi
backports-functools-lru-cache 1.6.4                    pypi_0    pypi
backports-weakref         1.0.post1                pypi_0    pypi
bleach                    1.5.0                    pypi_0    pypi
ca-certificates           2022.07.19           h06a4308_0
certifi                   2020.6.20          pyhd3eb1b0_3
cloudpickle               1.3.0                    pypi_0    pypi
cycler                    0.10.0                   pypi_0    pypi
cython                    0.29.32                  pypi_0    pypi
dask                      1.2.2                    pypi_0    pypi
decorator                 4.4.2                    pypi_0    pypi
enum34                    1.1.10                   pypi_0    pypi
funcsigs                  1.0.2                    pypi_0    pypi
futures                   3.3.0                    pypi_0    pypi
gast                      0.5.3                    pypi_0    pypi
google-pasta              0.2.0                    pypi_0    pypi
grpcio                    1.41.1                   pypi_0    pypi
h5py                      2.10.0                   pypi_0    pypi
html5lib                  0.9999999                pypi_0    pypi
keras                     2.0.9                    pypi_0    pypi
keras-applications        1.0.8                    pypi_0    pypi
keras-preprocessing       1.1.2                    pypi_0    pypi
kiwisolver                1.1.0                    pypi_0    pypi
libffi                    3.3                  he6710b0_2
libgcc-ng                 11.2.0               h1234567_1
libgomp                   11.2.0               h1234567_1
libstdcxx-ng              11.2.0               h1234567_1
markdown                  3.1.1                    pypi_0    pypi
matplotlib                2.2.5                    pypi_0    pypi
mock                      3.0.5                    pypi_0    pypi
ncurses                   6.3                  h5eee18b_3
networkx                  2.2                      pypi_0    pypi
numpy                     1.16.6                   pypi_0    pypi
pillow                    6.2.2                    pypi_0    pypi
pip                       19.3.1                   py27_0
protobuf                  3.17.3                   pypi_0    pypi
pycocotools               2.0.3                    pypi_0    pypi
pyparsing                 2.4.7                    pypi_0    pypi
python                    2.7.18               ha1903f6_2
python-dateutil           2.8.2                    pypi_0    pypi
pytz                      2022.2.1                 pypi_0    pypi
pywavelets                1.0.3                    pypi_0    pypi
pyyaml                    5.4.1                    pypi_0    pypi
readline                  8.1.2                h7f8727e_1
scikit-image              0.14.5                   pypi_0    pypi
scipy                     1.2.3                    pypi_0    pypi
setuptools                44.0.0                   py27_0
six                       1.16.0                   pypi_0    pypi
sqlite                    3.39.2               h5082296_0
subprocess32              3.5.4                    pypi_0    pypi
tensorboard               1.14.0                   pypi_0    pypi
tensorflow                1.4.0                    pypi_0    pypi
tensorflow-estimator      1.14.0                   pypi_0    pypi
tensorflow-tensorboard    0.4.0                    pypi_0    pypi
termcolor                 1.1.0                    pypi_0    pypi
tk                        8.6.12               h1ccaba5_0
toolz                     0.10.0                   pypi_0    pypi
werkzeug                  1.0.1                    pypi_0    pypi
wheel                     0.37.1             pyhd3eb1b0_0
wrapt                     1.14.1                   pypi_0    pypi
zlib                      1.2.12               h5eee18b_3  

注意版本:tensorflow 1.4.0

h5py                      2.10.0
keras                     2.0.9
numpy                     1.16.6
pillow                    6.2.2
python                    2.7.18
pycocotools               2.0.3
scikit-image              0.14.5
tensorflow                1.4.0

五.安装OpenCV2.4.11和OpenCV4.2.0双版本共存

5.1 OpenCV版本要求

查看DynaSLAM的CMakeLists.txt 可知需要2.4.11或者3.0,我电脑是OpenCV4.2.0,现在安装OpenCV2.4.11双版本共存。

  • 查看自己opencv版本
pkg-config opencv --modversion

我的要opencv4才能才看?不知道是不是cmake的时候相关的命令没输上去。

pkg-config opencv4 --modversion

5.2下载安装包

官网opencv 2.4.11安装包

下载好后

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2.4.11 -DENABLE_PRECOMPILED_HEADERS=OFF -D WITH_FFMPEG=OFF ..
make -j4
sudo make install

注:第三行和 cmake .. 一样,有两个点点

5.3 报错及解决

我最开始运行的命令是cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2.4.11 ..会出错

cmake ..也是报错如下

  • 报错如下:CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:85 (list)

解决:将OpenCVDetectCXXCompiler.cmake的内容替换为如下:

# ----------------------------------------------------------------------------
# Detect Microsoft compiler:
# ----------------------------------------------------------------------------
if(CMAKE_CL_64)set(MSVC64 1)
endif()if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")set(CMAKE_COMPILER_IS_GNUCXX 1)set(CMAKE_COMPILER_IS_CLANGCXX 1)
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")set(CMAKE_COMPILER_IS_GNUCC 1)set(CMAKE_COMPILER_IS_CLANGCC 1)
endif()
if("${CMAKE_CXX_COMPILER};${CMAKE_C_COMPILER}" MATCHES "ccache")set(CMAKE_COMPILER_IS_CCACHE 1)
endif()# ----------------------------------------------------------------------------
# Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ):
#  see  include/opencv/cxtypes.h file for related   ICC & CV_ICC defines.
# NOTE: The system needs to determine if the '-fPIC' option needs to be added
#  for the 3rdparty static libs being compiled.  The CMakeLists.txt files
#  in 3rdparty use the CV_ICC definition being set here to determine if
#  the -fPIC flag should be used.
# ----------------------------------------------------------------------------
if(UNIX)if  (__ICL)set(CV_ICC   __ICL)elseif(__ICC)set(CV_ICC   __ICC)elseif(__ECL)set(CV_ICC   __ECL)elseif(__ECC)set(CV_ICC   __ECC)elseif(__INTEL_COMPILER)set(CV_ICC   __INTEL_COMPILER)elseif(CMAKE_C_COMPILER MATCHES "icc")set(CV_ICC   icc_matches_c_compiler)endif()
endif()if(MSVC AND CMAKE_C_COMPILER MATCHES "icc|icl")set(CV_ICC   __INTEL_COMPILER_FOR_WINDOWS)
endif()# ----------------------------------------------------------------------------
# Detect GNU version:
# ----------------------------------------------------------------------------
if(CMAKE_COMPILER_IS_CLANGCXX)set(CMAKE_GCC_REGEX_VERSION "4.2.1")set(CMAKE_OPENCV_GCC_VERSION_MAJOR 4)set(CMAKE_OPENCV_GCC_VERSION_MINOR 2)set(CMAKE_OPENCV_GCC_VERSION 42)set(CMAKE_OPENCV_GCC_VERSION_NUM 402)execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -vERROR_VARIABLE CMAKE_OPENCV_CLANG_VERSION_FULLERROR_STRIP_TRAILING_WHITESPACE)string(REGEX MATCH "version.*$" CMAKE_OPENCV_CLANG_VERSION_FULL "${CMAKE_OPENCV_CLANG_VERSION_FULL}")string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_CLANG_REGEX_VERSION "${CMAKE_OPENCV_CLANG_VERSION_FULL}")elseif(CMAKE_COMPILER_IS_GNUCXX)execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversionOUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULLOUTPUT_STRIP_TRAILING_WHITESPACE)execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -vERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULLOUTPUT_STRIP_TRAILING_WHITESPACE)# Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"# Look for the version number, major.minor.buildstring(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")if(NOT CMAKE_GCC_REGEX_VERSION)#major.minorstring(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")endif()if(CMAKE_GCC_REGEX_VERSION)# Split the parts:string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)else()#compiler returned just the major version numberstring(REGEX MATCH "[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")if(NOT CMAKE_GCC_REGEX_VERSION)#compiler did not return anything reasonableset(CMAKE_GCC_REGEX_VERSION "0")message(WARNING "GCC version not detected!")endif()set(CMAKE_OPENCV_GCC_VERSION_MAJOR ${CMAKE_GCC_REGEX_VERSION})set(CMAKE_OPENCV_GCC_VERSION_MINOR 0)endif()set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}")message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})")if(WIN32)execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachineOUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINEOUTPUT_STRIP_TRAILING_WHITESPACE)if(OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")set(MINGW64 1)endif()endif()
endif()if(MSVC64 OR MINGW64)set(X86_64 1)
elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))set(X86 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")set(X86_64 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")set(X86 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")set(ARM 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")set(AARCH64 1)
endif()# Workaround for 32-bit operating systems on 64-bit x86_64 processor
if(X86_64 AND CMAKE_SIZEOF_VOID_P EQUAL 4 AND NOT FORCE_X86_64)message(STATUS "sizeof(void) = 4 on x86 / x86_64 processor. Assume 32-bit compilation mode (X86=1)")unset(X86_64)set(X86 1)
endif()# Similar code exists in OpenCVConfig.cmake
if(NOT DEFINED OpenCV_STATIC)# look for global settingif(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)set(OpenCV_STATIC OFF)else()set(OpenCV_STATIC ON)endif()
endif()if(MSVC)if(CMAKE_CL_64)set(OpenCV_ARCH x64)elseif((CMAKE_GENERATOR MATCHES "ARM") OR ("${arch_hint}" STREQUAL "ARM") OR (CMAKE_VS_EFFECTIVE_PLATFORMS MATCHES "ARM|arm"))# see Modules/CmakeGenericSystem.cmakeset(OpenCV_ARCH ARM)else()set(OpenCV_ARCH x86)endif()if(MSVC_VERSION EQUAL 1400)set(OpenCV_RUNTIME vc8)elseif(MSVC_VERSION EQUAL 1500)set(OpenCV_RUNTIME vc9)elseif(MSVC_VERSION EQUAL 1600)set(OpenCV_RUNTIME vc10)elseif(MSVC_VERSION EQUAL 1700)set(OpenCV_RUNTIME vc11)elseif(MSVC_VERSION EQUAL 1800)set(OpenCV_RUNTIME vc12)elseif(MSVC_VERSION EQUAL 1900)set(OpenCV_RUNTIME vc14)elseif(MSVC_VERSION EQUAL 1910)set(OpenCV_RUNTIME vc15)endif()
elseif(MINGW)set(OpenCV_RUNTIME mingw)if(MINGW64)set(OpenCV_ARCH x64)else()set(OpenCV_ARCH x86)endif()
endif()

安装opencv编译过程中几个不常见的小错误

  • 编译到12%时报错 fatal error: stdlib.h: 没有那个文件或目录,可能要往上翻一翻找到红字error的部分。

    解决方案:cmake的时候在命令后面加上

    -DENABLE_PRECOMPILED_HEADERS=OFF
    
  • 编译到14%时一长串的错误,全都是一个类型:error: ‘CODEC_ID_H264’ was not declared in this scope
    { CODEC_ID_H264, MKTAG(‘H’, ‘2’, ‘6’, ‘4’) }

    还有这种错误 ``error: ‘PIX_FMT_YUV444P’ was not declared in this scope;

    解决方案:cmake直接关闭ffmpeg,在cmake命令后面加上

-D WITH_FFMPEG=OFF
  • 编译到94%时报错,错误在91%下, error: the compiler can assume that the address of ‘annotate_img’ will never be NULL [-Werror=address]

​ 解决方案:假设opencv中生成的临时编译文件为build,则在文件中找到./build/modules/contrib/CMakeFiles/opencv_contrib.dir/flags.make,删除第四行中的-Werror=address。

  • rgbdodometry.cpp:65:12: fatal error: unsupported/Eigen/MatrixFunctions: 没有那个文件或目录

    解决方案:在rgbdodometry.cpp的65行加上eigen3

    #include <eigen3/unsupported/Eigen/MatrixFunctions>
    //或者
    #include </usr/include/eigen3/unsupported/Eigen/MatrixFunctions>
    

5.4(可有可无)创建opencv安装路径的文件夹

sudo mkdir -p /usr/local/opencv2.4.11

5.5成功cmake OpenCV 2.4.11

5.6成功make OpenCV 2.4.11

5.7成功install OpenCV 2.4.11

sudo gedit ~/.bashrc
//在文件末尾加上下面两行:
#export PKG_CONFIG_PATH="/usr/local/opencv2.4.11/lib/pkgconfig:$PKG_CONFIG_PATH"
#export LD_LIBRARY_PATH="/usr/local/opencv2.4.11/lib:$LD_LIBRARY_PATH"
//保存之后
//更新环境
source ~/.bashrc
//查看opencv的版本
pkg-config --modversion opencv

使用另一个版本(我的是4.2.0)的时候,同样终端输入 gedit ~/.bashrc 就将前两行的#号去掉两行即可(取消注释)。

记得要 source ~/.bashrc

六 安装编译DynaSLAM

6.1下载bbescos/feature/carla分支的DynaSLAM源码

//通过以下命令可以克隆带有carla文件的源码
git clone -b bbescos/feature/carla https://github.com/BertaBescos/DynaSLAM

PS:如果克隆的master分支,master分支里没有mono_carla.cc这个文件,需要注释掉

git clone https://github.com/BertaBescos/DynaSLAM
//注释master分支的CMakeLists.txt的末尾部分# add_executable(mono_carla
# Examples/Monocular/mono_carla.cc)
# target_link_libraries(mono_carla ${PROJECT_NAME})

注:master里没有mono_carla.cc这个文件

6.2 运行DynaSLAM报错解决

注意:在我们之前创建的MaskRCNN环境下运行./build.sh

cgm@ubuntu:~$ conda activate MaskRCNN
(MaskRCNN) cgm@ubuntu:~$ cd DynaSLAM/
(MaskRCNN) cgm@ubuntu:~/DynaSLAM$ chmod +x build.sh
(MaskRCNN) cgm@ubuntu:~/DynaSLAM$ ./build.sh

(1)将Dynaslam根目录中的CMakeLists.txt 以及 Thirdparty中DBoW2和g2o中的CMakeLists.txt文件中的 -march=native去掉 (否则会报核心转储的错误)

//快速去掉的操作是:vscode里 ctrl+shift+F 打开搜索框,输入`-march=native`  进行全部替换

注:我最后的测试发现不删掉也可以运行。

(2)修改有错误的文件:

  • 进入Dynaslam的src中viewer.cc中,按Ctrl+F查找imshow,我们可以看到2个imshow,而且调用之前没有判断,会在某些情况导致程序终止。我们将两句话依次对应替换即可(其实就是先if(!image.empty())判断一下)
        pangolin::FinishFrame();     cv::Mat im = mpFrameDrawer->DrawFrame();//cv::imshow("DynaSLAM: Current Frame",im); //替换为如下if语句if(!im.empty()){cv::imshow("DynaSLAM: Current Frame",im);}cv::Mat im_dyn = mpFrameDrawer->GetDynamicFrame();//cv::imshow("DynaSLAM: Dynamic Frame", im_dyn); //替换为如下if语句if(!im_dyn.empty()){cv::imshow("DynaSLAM: Dynamic Frame", im_dyn);}

我测试的是不修改这个会闪退

注意:master分支``viewer.cc是这样的

(3)报错:/usr/include/c++/9/bits/stl_map.h:122:71: error: static assertion failed: std::map must have the same value_type as its allocator

  • 解决办法:(这个不修改100%报错)
//打开LoopClosing.h,将
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
//改为
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;

(4)报错:

In file included from /home/cgm/DynaSLAM/src/Conversion.cc:9:/home/cgm/DynaSLAN/include/Conversion.h:17:10: fatal error: ndarrayobject.h:没有那个文件或目录
17|#include "ndarrayobject.h"
compilation terminated .

解决办法:在anaconda3/envs下搜索ndarrayobject.h,复制其路径,添加到ndarrayobject.h

//Conversion.h
//将
#include "ndarrayobject.h"
//改为正确的python2.7下的路径
#include "/home/cgm/anaconda3/envs/MaskRCNN/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h"

6.3 编译成功DynaSLAM

七 运行DynaSLAM

7.1 TUM 数据集上的 RGB-D 示例

  • 从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载序列并解压缩。
  • 执行 python 脚本associate.py 关联RGB 图像和深度图像:

对于TUM 动态序列,这些关联文件在./Examples/RGB-D/associations/的文件夹中给出。

7.2 上面这些关联文件的由来

例如我们使用 数据集TUM的DYNAMIC OBJECTS下的(rgbd_dataset_freiburg2_desk_with_person

使用associate.py将数据集中的RGB图片和深度图建立关联

原因:

Kinect 以非同步方式提供颜色和深度图像。这意味着来自彩色图像的时间戳集不会与深度图像的时间戳集相交。因此,我们需要某种方式将彩色图像与深度图像相关联。

为此,您可以使用“associate.py”脚本。rgb.txt文件和从文件中读取时间戳depth.txt,并通过查找最佳匹配来连接它们。

点这里下载associate.py。

conda activate MaskRCNN
python associate.py rgb.txt depth.txt > rgbd_dataset_freiburg2_desk_with_person.txt

7.3 TUM 数据集上的 RGB-D 示例程序运行

说明:

  • ​ 运行./Examples/RGB-D/rgbd_tum,传入参数分别为:ORB字典、配置信息、数据集路径、Mask目录、OUTPUT目录。其中mask目录和output目录是我们新建的。
  • ​ 如果提供了 PATH_TO_MASKSMask R-CNN 用于分割每一帧的潜在动态内容。这些mask保存在提供的文件夹 PATH_TO_MASKS 中。如果此参数为 no_save,则使用mask但不保存。如果它在 PATH_TO_MASKS 中找到 Mask R-CNN 计算的动态掩码,它会使用它们但不会再次计算它们。
  • ​ 如果提供了 PATH_TO_OUTPUT,则计算修复的帧并将其保存在 PATH_TO_OUTPUT 中。(背景修复)

(1)如果未提供 PATH_TO_MASKS 和 PATH_TO_OUTPUT,则仅使用几何方法检测动态对象。

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_xyz/ Examples/RGB-D/associations/fr3_walking_xyz.txt

sudo apt install libcanberra-gtk-module

DynaSLAM:Dynamic Frame窗口里面没有东西??

evo_ape tum groundtruth.txt KeyFrameTrajectory.txt --plot -va --plot_mode xy

(2)有PATH_TO_MASKS

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_xyz/ Examples/RGB-D/associations/fr3_walking_xyz.txt /data/mask
  • 报错:Initializing Mask RCNN network. …

    ​ ./ src/ python

    ​ Creating net instance. …

    ​ Loading net parameters. …

​ 段错误(核心已转储)

  • 我以为是如下的这个问题,但还是报错。最后测试的是,不修改这个也可以运行。

    编译的时候是找的 libpython3.8.so

    我想的解决办法是:我们自己设置 libpython2.7.so的路径

    set( PYTHON_LIBRARY /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so)
    

找到问题所在:

​ 我有看了一下是 ./ src/ python这个时候报的Creating net instance. ..Loading net parameters. ..

也就是加载Mask RCNN网络参数出的错。

​ 然后我发现,因为我切换源码分支的原因,没有把文件mask_rcnn_coco.h5复制到DynaSLAM/src/python/下!!!

  • 报错:
Geometry not working.
Light Tracking not working because Tracking is not initialized...
  • 解决:如果运行起来发现Light Track一直不成功,无法初始化,那么就把ORB参数设置中特征点的数目增多,github上大家一般改成3000就好了。
//TUM3.yaml文件
//ORB Extractor: Number of features per image
ORBextractor.nFeatures: 3000

运行着运行着(卡着卡着)就这样了…

Light Tracking not working because Tracking is not initialized...
Geometry not working.
New map created with 764 points
OpenCV Error: Assertion failed (a_size.width == len) in gemm, file /home/cgm/opencv-2.4.11/modules/core/src/matmul.cpp, line 728
terminate called after throwing an instance of 'cv::Exception'what():  /home/cgm/opencv-2.4.11/modules/core/src/matmul.cpp:728: error: (-215) a_size.width == len in function gemm已放弃 (核心已转储)

**whatever ......太卡了**

DynaSLAM超详细安装配置运行ubantu20.0.4+opencv2.4.11+tensorflow1.4.0相关推荐

  1. 【Node.js超详细安装配置教程(2022)】

    前言 一.Node.js是什么 二.Node安装 1.官网:Node.js (nodejs.org) 总结 前言 作为一名后端程序员,虽然会使用JAVA编写服务器后台,但在技术不断发展的今天,能多学一 ...

  2. mysql++pc客户端_Mysql超详细安装配置+客户端连接

    下载 选择直接下载 解压 我将Mysql解压到:E:\devSofts\mysql-8.0.21-winx64\mysql-8.0.21-winx64地址,后面的内容和这相关,可以根据你的实际情况稍作 ...

  3. PyCharm与Anaconda超详细安装配置教程

    摘要:本文详细介绍如何在Windows 10中安装PyCharm和Anaconda这两款Python中必备的软件,博文中每一步均有详细截图和步骤讲解,最后介绍如何使用Anaconda创建虚拟环境并在P ...

  4. CentOS8下超详细安装配置kubernetes(K8S)

    文章目录 一.环境准备 1. 卸载podman 2. 关闭交换区 3. 禁用selinux 4. 关闭防火墙 二.安装K8S 1. 配置系统基本安装源 2. 添加K8S安装源 3. 安装docker ...

  5. Jenkins详细安装配置部署--超详细

    Jenkins详细安装配置部署--超详细 一.什么是CI/CD 二.Gitlab内置持续集成 持续集成(CI) 持续交付(CD) 2.1 Gitlab的CI/CD优势 2.2 Gitlab的CI/CD ...

  6. appserv怎么安装mysql_AppServ怎么安装?AppServ 8.6.0 64位图文超详细安装教程(附下载)...

    AppServ是一款著名的PHP架站工具组合包,来自泰国的作者将网络上的免费架站资源重新整合包装成为一个安装程序,AppServ 所包含的软件有:Apache.Apache Monitor.PHP.M ...

  7. Ubuntu20.04安装配置运行DynaSLAM

    Ubuntu20.04安装配置运行DynaSLAM 文章目录 Ubuntu20.04安装配置运行DynaSLAM 一.安装Anaconda 二.安装依赖 三.配置Mask_RCNN环境 四.安装Dyn ...

  8. mysql2008数据库配置_SQL Server 2008 R2 超详细安装图文教程

    这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下 一.下载SQL Server 2008 R2安装文件 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者 ...

  9. ubuntu14.04+CUDA7.5+cuDNN+caffe的超详细完整配置

    版权声明:文章原创,转载请注明出处,多谢! 声明 本文是关于ubuntu14.04+CUDA7.5+cuDNN+caffe的超详细完整配置过程的说明. 小菜是刚接触深度学习领域的小白,在配置caffe ...

最新文章

  1. (转)对微软那棵TreeView进行试用,主要是对CheckBox进行操作
  2. 【Android 应用开发】AndroidUI设计 之 图片浏览器
  3. doc命令下查看java安装路径
  4. AtCoder AGC030B Tree Burning
  5. Rust:集所有语言之大成者
  6. session共享怎么做的(分布式如何实现session共享)?
  7. 考研结束后去政审时穿的鞋子
  8. 没有提取码怎么获取百度网盘资源?
  9. 有限差分法的基本思想
  10. 移动充电宝市场需求的调研报告
  11. Android APP打开另一个APP完整逻辑实现
  12. [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
  13. 【人工翻译线代教材】Introduction to Linear Algebra BY Gilbert Strang【MIT】【线代】【翻译】
  14. Onenote无法登录报错显示0xE000078D解决方法
  15. linux乌班图做服务器,使用 Ubuntu 16.04 搭建全能服务器
  16. 七年级 电子计算机 教材分析,七年级信息技术教学计划表
  17. C++面试题目及面试经验
  18. matlab矩阵行位列维,如何在Matlab中对行矩阵的元素进行不等长度分组
  19. ATL之深入浅出书评(潘爱民)
  20. 龙岭迷窟真的这么好看?今天我们就用 Java 爬取豆瓣数据好好分析一下!

热门文章

  1. 【考研经验】2018东南大学蒙纳士 调剂+逆袭 复试全程+真题回忆 干货+经验分享...
  2. IDEA学习系列之Module概念
  3. 【Python】08 通用水文年鉴数据提取方法
  4. springBoot报 :Address already in use: bind错误
  5. 员工持股达27亿美金?比特大陆400页招股文件中的十二个秘密
  6. 企业国际物流信息化解决方案_箱讯科技
  7. 北航2022应届硕,被小米集团毁约了!
  8. IT30: IT部门管理(15000字精品)
  9. 湖南大学_数电实验_模型机设计_CPU设计_verilog_课程实验报告
  10. md开源云笔记php,开源在线云笔记 ManGe-Notes