zoukankan      html  css  js  c++  java
  • 2020系统综合实践 第7次实践作业 2组

    1. 在树莓派中安装opencv库

    1.1 安装依赖

    # 更新软件源,更新软件
    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 aptitude install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo aptitude install libxvidcore-dev libx264-dev
    
    # OpenCV用于显示图片的子模块需要GTK
    sudo aptitude install libgtk2.0-dev libgtk-3-dev
    
    # 性能优化包
    sudo aptitude install libatlas-base-dev gfortran
    
    # 安装 Python2.7 & Python3
    sudo aptitude install python2.7-dev python3-dev
    

    1.2 下载OpenCV源码

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

    PS:官方 opencv 与 opencv/opencv_contrib (版本号需要一致,下载速度慢)

    1.3 安装pip

    wget https://bootstrap.pypa.io/get-pip.py
    sudo python get-pip.py
    sudo python3 get-pip.py
    

    1.4 安装Python虚拟机,防止依赖冲突

    sudo pip install virtualenv virtualenvwrapper
    sudo rm -rf ~/.cache/pip
    

    配置~/.profile,添加内容:

    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
    source /usr/local/bin/virtualenvwrapper.sh
    export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin
    
    # 每次新开终端,需要虚拟环境时都要运行
    source ~/.profile
    
    # 使用python3创建虚拟环境cv
    mkvirtualenv cv -p python3
    
    # 进入虚拟机
    source ~/.profile && workon cv
    
    # 安装numpy
    pip install numpy
    

    (进入虚拟机后可以看到前面有cv虚拟机的标识)

    1.5 编译OpenCV

    PS:要确保已经进入了cv虚拟环境,命令提示符开头有(cv)。

    cd ~/opencv-4.1.2/
    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-4.1.2/modules 
      -D BUILD_EXAMPLES=ON 
    

    #为了避免编译时内存不足导致的CPU挂起,调整swap交换文件大小:
    # CONF_SWAPSIZE由100改为1024,编译完成后改回来
    sudo nano /etc/dphys-swapfile
    
    # 重启swap服务
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    
    # 开始编译,很耗时(一堆错误,见问题四)
    make -j4
    

    1.6 安装OpenCV

    sudo make install
    sudo ldconfig
    
    #检查安装位置
    $ ls -l /usr/local/lib/python3.7/site-packages/
    
    $ cd ~/.virtualenvs/cv/lib/python3.7/site-packages/
    #建立软链
    $ ln -s /usr/local/lib/python3.7/site-packages/cv2 cv2 
    

    PS:Linux ln命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

    当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

    语法: ln [参数][源文件或目录][目标文件或目录]

    1.7 验证OpenCV的安装

    $ source ~/.profile 
    $ workon cv
    $ python
    >>> import cv2
    >>> cv2.__version__
    '4.1.2'
    >>>
    

    退出python虚拟机命令deactivate

    2. 使用opencv和python控制树莓派的摄像头

    2.1 拍照测试

    #测试树莓派相机模块
    raspistill -o output.jpg
    

    2.2 安装picamera(虚拟机环境下)

    source ~/.profile
    workon cv
    pip install "picamera[array]"
    

    2.3 创建python文件

    nano test_image.py
    python test_image.py
    
    # 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(1)
    # 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)
    

    3. 利用树莓派的摄像头实现人脸识别

    3.1 安装所需库

    pip install dlib face_recognition numpy
    

    3.2 运行facerec_on_raspberry_pi.py代码

    所选代码仓库地址

    3.3 运行facerec_from_webcam_faster.py代码

    所选代码仓库地址

    4. 结合微服务的进阶任务

    4.1 准备环境

    #退出python虚拟机
    deactivate
    
    #下载安装脚本
    curl -fsSL https://get.docker.com -o get-docker.sh
    
    #运行安装脚本(阿里云镜像)
    sh get-docker.sh --mirror Aliyun
    
    #验证docker版本
    sudo docker --version
    

    #填加用户到docker组
    sudo usermod -aG docker pi
    

    #重新登陆以用户组生效
    exit && ssh pi@raspiberry
    

    (重启之后,docker指令之前就不需要加sudo了

    #拉取arm可用的docker镜像
    docker pull sixsq/opencv-python
    

    #进入容器并安装所需库
    docker run -it [imageid] /bin/bash
    这里docker run -it sixsq/opencv-python /bin/bash
    
    pip install "picamera[array]" dlib face_recognition
    
    #commit镜像
    docker commit [containerid] myopencv
    这里docker commit d24 myopencv
    

    自定义镜像Dockerfile:

    FROM my-opencv
    MAINTAINER GROUP02
    RUN mkdir /myapp
    WORKDIR /myapp
    ENTRYPOINT ["python3"]
    
    #生成镜像
    docker build -t myopencv-test .
    
    #运行脚本
    docker run -it --rm --name my-running-py -v ${PWD}/workdir:/myapp --device=/dev/vchiq --device=/dev/video0 myopencv-test facerec_on_raspberry_pi.py
    

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

    4.2.1 环境准备

    在Windows系统中安装XmingPutty

    安装好后,先打开Xming,然后打开Putty,开启树莓派的ssh配置中的X11

    打开Putty后,把树莓派的IP地址填在下面这一栏里,端口用默认的就行了

    查看DISPLAY环境变量值

    printenv

    PS:这个查看是在用Putty打开的窗口上查看到的,若直接在树莓派里的终端看,看到就是"DISPLAY=localhost:0.0"

    检测ssh配置文件中X11是否开启 cat /etc/ssh/sshd_config

    在用Putty打开的窗口上编写run.sh(路径在树莓派中的docker1文件夹

    xhost +	#允许来自任何主机的连接
    docker run -it 
        --rm 
        -v ${PWD}/workdir:/myapp 
        --net=host 
        -v $HOME/.Xauthority:/root/.Xauthority 
        -e DISPLAY=:10.0  	#此处填写上面查看到的变量值
        -e QT_X11_NO_MITSHM=1 
        --device=/dev/vchiq 
        --device=/dev/video0 
        --name facerecgui2 
        myopencv-test 
        facerec_from_webcam_faster.py
    

    5. 以小组为单位,发表一篇博客,记录遇到的问题和解决方法,提供小组成员名单以及在线协作的图片

    5.1 问题与解决方法

    问题一:

    解决方法:
    法一:后面会出现各种问题,这个方法可能不行!
    sudo apt-get install aptitude
    sudo aptitude install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev 
    
    法二:软件源的问题,源中的版本比较低;依赖的版本号比正要安装的版本号要低导致没法安装。
    只需要将原来软件源删除,用新的软件源替换一下就可以了。
    sudo gedit /etc/apt/sources.list  //查看源中的软件包列表
    写上软件源后,再刷新一下,注意一定要刷新,运行:
    sudo apt-get update
    sudo apt-get uograde
    

    问题二:使用python3创建虚拟环境cv时

    解决方法:配置文件改成这样的
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
    source /usr/local/bin/virtualenvwrapper.sh
    export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin
    

    问题三:make -j4编译时出现错误。安装OpenCV时提示缺少boostdesc_bgm.i文件。

    解决办法:把下载后拷贝到目录opencv_contrib/modules/xfeatures2d/src/下即可
    
    https://files.cnblogs.com/files/arxive/boostdesc_bgm.i%2Cvgg_generated_48.i%E7%AD%89.rar
    

    PS:为了传输代码和截图等文件,开启FTP

    sudo apt-get install vsftpd # 安装vsftpd
    sudo service vsftpd start # 启动服务
    sudo nano /etc/vsftpd.conf # 改write_enable=YES
    sudo service vsftpd restart # 重启服务
    

    问题四:fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录,

    解决办法:
    fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录,头文件include地址不对。
    
    将opencv-4.1.0/modules/features2d/test/文件下的
    test_descriptors_regression.impl.hpp
    test_detectors_regression.impl.hpp
    test/test_detectors_invariance.impl.hpp
    test_descriptors_invariance.impl.hpp
    test_invariance_utils.hpp
    拷贝到opencv_contrib-4.1.0/modules/xfeatures2d/test/文件下。
    
    同时将
    opencv_contrib-4.1.0/modules/xfeatures2d/test/test_features2d.cpp文件下的
    #include "features2d/test/test_detectors_regression.impl.hpp"
    #include "features2d/test/test_descriptors_regression.impl.hpp"
    改成:
    #include "test_detectors_regression.impl.hpp"
    #include "test_descriptors_regression.impl.hpp"
    

    opencv_contrib-4.1.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp文件下的
    
    将
    #include "features2d/test/test_detectors_invariance.impl.hpp" 
    #include "features2d/test/test_descriptors_invariance.impl.hpp"
    改成:
    #include "test_detectors_invariance.impl.hpp"
    #include "test_descriptors_invariance.impl.hpp"
    

    还有很多这样的错误……………………一样的改

    问题五:OpenCV Error: Unspecified error (The function is not implemented...

    未解决:
    下依赖重新编译
    sudo apt-get install aptitude
    sudo aptitude install libgtk2.0-dev #安装libgtk2.0-dev
    //查看是否已安装gtk2.0
    sudo aptitude search libgtk2.0-dev
    重新回到1.5执行命令,执行make -j4时出现问题七
    

    问题六:再次make -j4编译的时候又出现错误

    未解决:

    sudo aptitude install qt5-default后一直到make -j4继续执行。

    最后解决办法:重新烧录系统

    5.2 小组成员名单、组员的分工和各自贡献

    学号 姓名 分工 贡献
    031702504 林睿 实际操作,查资料 40%
    031702507 黄皓 查资料 30%
    031702508 石晓楠 查资料 30%

    5.3 在线协作图片

    5.4 参考链接

    https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/

    https://blog.csdn.net/fsz520w/article/details/82153156

    https://www.cnblogs.com/zaynq/p/12996274.html

    http://www.luyixian.cn/news_show_316237.aspx

    https://blog.csdn.net/u014797226/article/details/89355220

    https://blog.csdn.net/zhenguo26/article/details/84402530

  • 相关阅读:
    名种样式的加入收藏和设为主页代码
    Android蓝牙UUID
    Discuz (1040) notconnect错误的解决办法
    IIS上配置404页面的图文教程
    C#操作excel(多种方法比较)
    Server Application Unavailable出现的原因及解决方案集锦
    怎么在google player下载apk
    apk反编译|android程序反编译
    discuz x2.5帖子无法访问|discuz x2.5 帖子报错500
    C#实现路由器断开连接,更改公网ip
  • 原文地址:https://www.cnblogs.com/huang0926huang/p/13029175.html
Copyright © 2011-2022 走看看