• raspberry pi 4 上Opencv-3.4.1编译安装与错误记录


      最近买了一个raspberry Pi Camera v2,刚好有一个树莓派4b,心血来潮就想利用树莓派做一个人脸识别。

    然后开始倒腾Opencv了,记录一下肝出来的过程。

    一.首先我用的是最新的Raspbian Buster系统,可以到官网(https://www.raspberrypi.org/downloads/raspberry-pi-os/)下载。

    用的是python3.7。

    1.安装之前先更新一下环境

    sudo apt-get update
    sudo apt-get upgrade
    sudo rpi-update
    

    2.安装一下必要的依赖

    sudo apt-get install build-essential cmake pkg-config
    sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
    sudo apt-get install libgtk2.0-dev libgtk-3-dev
    sudo apt-get install libatlas-base-dev gfortran

    3.安装开发工具(python3和pip)

    sudo apt-get install python3 python3-setuptools python3-dev
    wget https://bootstrap.pypa.io/get-pip.py
    sudo python3 get-pip.py
    

    4.下载OpenCV3.4.1和OpenCV-contrib的包

    wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.1.zip
    wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
    unzip opencv.zip
    unzip opencv_contrib.zip 

    下载完直接解压,如果这样下载比较慢的话,可以到网站直接下载。

    5.安装opencv需要的库

    sudo pip3 install numpy
    

    6.开始进行编译Opencv,一般编译都是基于cmake

    cd ~				# ~:指家目录,一般是/home/pi
    mkdir opencv
    cd opencv	# 将下载好的opencv 
    cd ~/opencv-3.4.1/
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE 
          -D CMAKE_INSTALL_PREFIX=/usr/local 
          -D INSTALL_C_EXAMPLES=ON 
          -D INSTALL_PYTHON_EXAMPLES=ON 
          -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.4.1/modules 
          -D ENABLE_PRECOMPILED_HEADERS=OFF 
          -D BUILD_EXAMPLES=ON ..
    

     增加swap空间

    将swap大小从100MB增加到1024MB,可以方便OpenCV使用Pi的4个核进行编译

    vim /etc/dphys-swapfile
    

    找到 CONF_SWAPSIZE 这个变量,将100改成1024,然后保存退出。使用如下命令重启:

    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    

    7.编译安装opencv

    这个过程比较漫长,而且碰到了很多错误,我大概编译安装了两个多小时,编译的过程还是很快乐的看着一直在编译着。

    make -j4
    sudo make install
    sudo ldconfig  

     编译完成后记得 ,将swap大小从1024MB改回100MB

    vim /etc/dphys-swapfile
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    

    8.编译完成测试

    在命令行下输入:python3,然后import cv2导入,如果导入成功不会有提示信息。接下来可以用cv2.__version__测试当前opencv的版本

     进入目录opencv-3.4.1--samples--cpp--example_camke(编译一下先cmke .. 再make )

    最后./opencv_example

     这样你就成功了

       

    错误记录

    1.fatal error: boostdesc_bgm.i: 没有那个文件或目录 #include "boostdesc_bgm.i"

    查阅资料是因为少了一些文件,如下

    boostdesc_bgm.i
    boostdesc_bgm_bi.i
    boostdesc_bgm_hd.i
    boostdesc_lbgm.i
    boostdesc_binboost_064.i
    boostdesc_binboost_128.i
    boostdesc_binboost_256.i
    vgg_generated_120.i
    vgg_generated_64.i
    vgg_generated_80.i
    vgg_generated_48.i

    下载这些文件,将这些文件放在相应的目录下(/home/pi/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/src)

    资源下载

    链接: https://pan.baidu.com/s/1XrQeLb5O2Kt1gA-QwCtPGg 

    密码: jpwp

    2./home/pi/opencv/opencv-3.4.1/modules/stitching/include/opencv2/stitching/detail

      /matchers.hpp:52:12: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录

    错误的原因是缺少cuda.hpp文件,这些文件在opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2目录下,所以直接将这个目录下的文件拷贝到opencv-3.4.1/modules/stitching/include/opencv2/即可

    cp ~/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2/* ~/opencv-3.4.1/modules/stitching/include/opencv2/ 

     这个过程中注意你自己的路径,按照你自己的路径去拷贝。

    3.编译到99%又死了,最后一个错误。

    [modules/python2/CMakeFiles/opencv_python2.dir/__src2/cv2.cpp.o] Error 1

    /home/pi/opencv/opencv-3.4.1/modules/python/src2/cv2.cpp:889:34: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]

    出错是应为const char不能转换为char。解决这个问题很简单,就是将const char强制类型转换为char,可是因为没找到出错的地方,所以几次编译都死在了这里了。

    解决方法

    vim ~/opencv/opencv-3.4.1/modules/python/src2/cv2.cpp

     原文链接:https://blog.csdn.net/simonforfuture/article/details/101716181

     
  • 相关阅读:
    java fx example
    JavaFX 2.0+ WebView /WebEngine render web page to an image
    剑指Offer面试题41(Java版):和为s的两个数字VS和为s的连续正数序列
    时间类(时间戳的各种转换成)
    Android系统各种类型的service刨根解读
    二叉树的建立基本操作(链表方式)(一)
    从头认识java-13.2 利用元组的方式返回多类型对象
    EA初步使用
    inline-block元素设置overflow:hidden属性导致相邻行内元素向下偏移
    下拉框与列表框
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/13861494.html
Copyright © 2020-2023  润新知