• 第7次系统综合实践 20组


    一、在树莓派上安装OpenCV库

    安装依赖

    # 更新软件源和软件
    sudo apt-get update && sudo apt-get upgrade
    #cmake开发者工具
    sudo apt-get install build-essential cmake pkg-config
    # 图片I/O包
    sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
    # 视频I/O包
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev$ sudo apt-get install libxvidcore-dev libx264-dev
    # 安装GTK
    sudo apt-get install libgtk2.0-dev libgtk-3-dev
    # 安装性能优化包
    sudo apt-get install libatlas-base-dev gfortran
    # 安装python
    sudo apt-get install python2.7-dev python3-dev
    

    下载OpenCV源码

    根据教程使用的是OpenCV3.3.0版本

    cd ~
    wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
    unzip opencv.zip
    wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
    unzip opencv_contrib.zip
    

    安装pip和python虚拟机

    • 安装pip
    # 安装pip
    wget https://bootstrap.pypa.io/get-pip.py
    sudo python get-pip.py
    sudo python3 get-pip.py
    
    • 安装python虚拟机
    # 安装python虚拟机
    sudo pip install virtualenv virtualenvwrapper
    sudo rm -rf ~/.cache/pip
    # 配置 ~/.profile,添加以下内容:
    
    # virtualenv and virtualenvwrapper
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    source /usr/local/bin/virtualenvwrapper.sh
      
    # 使之生效
    source ~./profile
      
    # 创建cv虚拟环境
    mkvirtualenv cv -p python3
      
    # 进入虚拟机
    workon cv     #重新进入前要先执行source ~./profile
    # 命令行前面是否有(cv),以此作为是否在虚拟机的判断
    
    • 安装numpy
    pip install numpy
    

    编译OpenCV

    • 准备工作
    cd ~/opencv-3.3.0/
    mkdir build
    cd build
    # 设置cmake构建选项
    cmake -D CMAKE_BUILD_TYPE=RELEASE 
        -D CMAKE_INSTALL_PREFIX=/usr/local 
        -D INSTALL_PYTHON_EXAMPLES=ON 
        -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules 
        -D BUILD_EXAMPLES=ON ..
    

    • 编译前,需要增大交换空间CONF_SWAPSIZE=1024,避免内存不足
    sudo nano /etc/dphys-swapfile  #虚拟机中sudo才可以修改
    # 重启swap服务
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    
    • 开始编译
    make j4
    

    编译成功

    • 安装OpenCV
    sudo make install
    sudo ldconfig
    
    • 检查OpenCV安装位置,并建立软链
    ls -l /usr/local/lib/python3.7/site-packages/ #查看cv2
    cd ~/.virtualenvs/cv/lib/python3.7/site-packages/
    ln -s /usr/local/lib/python3.7/site-packages/cv2.cpython-37m-arm-linux-gnueabihf.so cv2.so #建立软链
    

    在建立软链过程中有可能会失败,或者直接将/usr/local/lib/python3.7/site-packages/下的cv2利用mv命令移动到~/.virtualenvs/cv/lib/python3.7/site-packages/目录下,命令如下:

    sudo mv /usr/local/lib/python3.7/site-packages/cv2.cpython-37m-arm-linux-gnueabihf.so ~/.virtualenvs/cv/lib/python3.7/site-packages/cv2.so
    

    验证安装

    source ~/.profile 
    workon cv
    python
    import cv2
    cv2.__version__  #查看cv2版本
    


    二、使用opencv和python控制树莓派的摄像头

    picamera模块安装

    • 开启虚拟机(以下操作都在虚拟机中进行)
    • 安装picamera
    pip install "picamera[array]"
    

    在Python代码中导入OpenCV控制摄像头

    • 拍照测试
    # import the necessary packages
    from picamera.array import PiRGBArray
    from picamera import PiCamera
    import time
    import cv2
     
    # initialize the camera and grab a reference to the raw camera capture
    camera = PiCamera()
    rawCapture = PiRGBArray(camera)
     
    # allow the camera to warmup
    time.sleep(3) #此处把0.1改成了3
     
    # grab an image from the camera
    camera.capture(rawCapture, format="bgr")
    image = rawCapture.array
     
    # display the image on screen and wait for a keypress
    cv2.imshow("Image", image)
    cv2.waitKey(0)
    


    三、利用树莓派的摄像头实现人脸识别

    • 在前面创建的python虚拟环境cv中安装dlib和face_recognition
    pip install dlib
    pip install face_recognition
    


    验证是否安装成功:

    • 运行facerec_on_raspberry_pi.py(参考GitHub仓库
      将python文件和需要的图片放在同一个文件夹中,在虚拟机中运行,运行结果如下:
    • 运行facerec_from_webcam_faster.py
      该代码可以实时显示当前识别的人脸信息,运行结果如下:


    四、结合微服务的进阶任务(使用OpenCV的docker容器运行人脸识别代码)

    使用微服务,部署opencv的docker容器(要能够支持arm)

    • 准备工作
    #退出python虚拟机
    deactivate
    #脚本安装docker
    sudo curl -sSL https://get.docker.com | sh
    #填加用户到docker组
    sudo usermod -aG docker pi
    #重新登陆以用户组生效
    exit && ssh pi@raspiberry
    #验证docker版本
    docker --version
    
    • 拉取镜像(支持arm)
    sudo docker pull  sixsq/opencv-python
    
    • 进入容器并安装所需依赖
    docker run -it [imageid] /bin/bash
    pip install "picamera[array]" dlib face_recognition
    

    • commit更新容器建立新的镜像
    docker commit [containerid] [自定义镜像名]
    
    • 编写dockerfile文件构建镜像
      dockerfile文件:
    FROM my-opencv
    
    MAINTAINER GROUP20
    
    RUN mkdir /workspace
    
    WORKDIR /worksapce
    
    COPY /workspace .
    

    构建镜像:

    sudo docker build myopencv .
    

    • 构建成功后,运行容器
    docker run -it --device=/dev/vchiq --device=/dev/video0 myopencv myopencv
    
    • 运行facerec_on_raspberry_pi.py
    python3 facerec_on_raspberry_pi.py
    

    选做:在opencv的docker容器中跑通步骤(3)的示例代码facerec_from_webcam_faster.py

    • 在Windows系统中安装XMing

    • 启动putty

    • 查看DISPLAY环境变量值

    • 编辑并启动脚本run.sh

    xhost +	#允许来自任何主机的连接
    docker run -it 
            --rm 
            -v ${PWD}/workdir:/worksapce 
            --net=host 
            -v $HOME/.Xauthority:/root/.Xauthority 
            -e DISPLAY=:0.0  	#此处填写上面查看到的变量值
            -e QT_X11_NO_MITSHM=1 
            --device=/dev/vchiq 
            --device=/dev/video0 
            myopencv 
            recognition.py
    
    • 执行脚本sh run.sh

    五、遇到的问题已解决方案

    问题1:安装虚拟机时报错,错误如下图:

    解决方案:在~./profile中追加两句:

    export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
    export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin
    

    问题2:编译过程中没有hpp类文件,如下图:

    解决方案:其实这个文件是存放在opencv-contrib目录下的,打开报错文件路径,将其hpp文件路径改为绝对路径

    sudo nano /home/pi/opencv-3.3.0/modules/stitching/include/opencv2/stitching/detail/matchers.hpp
    #include "opencv2/xfeatures2d/cuda.cpp"
    //改为以下一句
    #include "/.../opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.cpp"
    

    之后的hpp文件也是以上的方法,后面不在赘述
    问题3:编译OpenCV过程中报错没有定义AVFMT_PAWPICTURE,如下图:

    解决方案:找到报错文件路径,编译文件,在文件顶部添加以下内容:

    #编辑文件
    sudo nano /home/pi/opencv-3.3.0/modules/videoio/src/cap_ffmpeg_impl.hpp
    ##添加以下内容
    #define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
    #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
    #define AVFMT_RAWPICTURE 0x0020
    

    问题4:找不到boostdesc_bgm.i文件
    解决方案:在本机直接下载该文件,将这些文件复制到树莓派的/home/pi/opencv/opencv_contrib-3.3.0/modules/xfeatures2d/src目录中即可。
    参考博客,里面附带资源
    问题5:char转换错误,此处忘记截图
    解决方案:打开错误文件,修改代码
    问题6:在安装OpenCV后创建软链失败,导致验证结果错误
    解决方案:直接将CV2文件移到相应的目录下即可。
    问题7:在pip install face_recognition时下载的非常慢,还一直报网络错误
    解决方案:在本机打开终端下载时显示的网站下载相应的文件,然后再复制保存到相应的文件夹安装即可。
    问题8:树莓派无法连接WiFi,这个真的是把我们给坑惨了[吐血]
    解决方案:搞了一下午,才发现是电源没有接好,原来电源没有接好是会影响树莓派联网??所以,下次得记得一定要接好电源。
    问题9:在commit镜像是显示空间不足,错误如下图:

    解决方案:删除了一些垃圾,空出来了200多M的空间,得以解决。

    六、团队协作分工

    分工

    学号 姓名 各自贡献
    031702301 王瑞卿 查阅资料,编写部分博客
    031702312 鲍冰如 实际操作树莓派
    031702313 周丽榕 查阅资料,编写部分博客

    团队协作方式

  • 相关阅读:
    驰骋工作流引擎-系统变量的引用
    驰骋工作流引擎-表单样本展示
    驰骋工作流引擎CCFLOW下载代码
    初识CSS
    初识HTML标签
    初识JDBC
    通过锁对象解决哲学家就餐问题
    MySQL基本用法
    LRU算法实现,HashMap与LinkedHashMap源码的部分总结
    Java简易实现记事本的打开与保存
  • 原文地址:https://www.cnblogs.com/lrongblog/p/13087131.html
Copyright © 2020-2023  润新知