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

    1️⃣ 在树莓派中安装opencv库

    (1)安装依赖

    如果执行某条指令时出现依赖包问题,建议使用sudo aptitude install(需要先sudo apt-get install aptitude安装aptitude)

    #更新和升级任何现有软件包
    $ sudo apt-get update && sudo apt-get upgrade
    #安装一些开发人员工具,包括CMake,它可以帮助配置OpenCV构建过程:
    $ sudo apt-get install build-essential cmake pkg-config
    #安装一些映像I/O包,以允许从磁盘加载各种映像文件格式。此类文件格式的示例包括JPEG,PNG,TIFF等
    $ 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用于在屏幕上显示图像并构建基本的GUI
    $ sudo apt-get install libgtk2.0-dev libgtk-3-dev
    #性能优化包
    $ sudo apt-get install libatlas-base-dev gfortran
    #安装Python 2.7和Python 3
    $ sudo apt-get install python2.7-dev python3-dev
    

    (2)下载OpenCV源码

    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
    

    (3)安装pip

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



    (4)安装Python虚拟机

    pip安装时,使用国内源加速-i https://mirrors.aliyun.com/pypi/simple

    #安装虚拟环境,防止依赖冲突
    sudo pip install virtualenv virtualenvwrapper -i https://mirrors.aliyun.com/pypi/simple
    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 # 这条可忽略
    

    加载配置文件,使之生效

    # 每次新开终端,要进入python虚拟机都需要事先加载配置文件
    source ~/.profile
    

    使用Python3 安装虚拟机

    mkvirtualenv cv -p python3
    

    进入虚拟机

    source ~/.profile
    $ workon cv
    

    安装numpy

    由于pip默认从官网上下载第三方库,限于网速问题,多次pip install numpy失败(换源无效),无奈之下只好先在本机上手动下载numpy的.whl文件,通过ssh传输到树莓派中,再进行离线安装

    #https://www.piwheels.org/simple/numpy/numpy-1.18.4-cp37-cp37m-linux_armv7l.whl (10.4 MB)
    #在Window系统下命令行中输入如下
    scp <localfile> pi@192.168.1.9:/home/pi/
    $ 输入密码 <password>
    

    将接收到的.whl文件存放到python的site-packages下,然后使用如下指令进行安装

    python -m pip install <文件名>
    

    成功安装Numpy

    (5)编译OpenCV

    # 设置CMake构建选项
    cd ~/opencv-3.3.0/
    $ mkdir build
    $ cd build
    $ 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 ..
    

    检查numpy的安装

    增大了交换空间CONF_SWAPSIZE=1024

    # 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 
    

    安装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.cpython-37m-arm-linux-gnueabihf.so cv2
    

    (6)验证安装

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

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

    (1)picamera模块安装

    开启虚拟机

    $ source ~/.profile #每次开启虚拟机之前都需要source配置文件,否则无法开启
    $ workon cv
    

    安装picamera

    $ pip install "picamera[array]"
    

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

    拍照功能代码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(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)
    

    拍照:

    摄像功能代码video_test.py:

    from picamera.array import PiRGBArray
    from picamera import PiCamera
    import time
    import cv2
    camera = PiCamera()
    camera.resolution = (640, 480)
    camera.framerate = 32
    rawCapture = PiRGBArray(camera, size=(640, 480))
    time.sleep(0.1)
    for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
        image = frame.array
        cv2.imshow("Frame", image)
        key = cv2.waitKey(1) & 0xFF
        rawCapture.truncate(0)
        if key == ord("q"):
            break
    

    摄像:

    3️⃣Raspberry Pi 的人脸识别

    注:所有操作均在python虚拟机中进行

    安装dlib以及实现人脸识别功能的开源模块face_recogniztion

    $ pip install dlib
    $ pip install face_recognition
    

    运行GitHub上face_recognition仓库下的代码

    运行时需要将摄像头对准图像或照片,尽量离得近一点,识别成功率更高

    同一个代码仓库下的另一个示例

    该示例引入opencv来处理图像信息,可以实时显示当前摄像头识别到的人脸信息

    4️⃣ 结合微服务的进阶任务

    docker安装(参考树莓派上 Docker 的安装和使用

    sudo apt install docker-ce
    

    拉取已配置python环境和opencv的镜像(支持arm)sixsq/opencv-python

    #配置docker的镜像加速
    sudo nano /etc/docker/daemon.json
    #重新加载docker服务的配置文件
    systemctl dameon-reload
    #重启docker 服务
    systemctl restart docker
    #拉取镜像
    sudo docker pull sixsq/opencv-python
    


    进入容器并安装库

    sudo docker run -it sixsq/opencv-python /bin/bash
    pip install "picamera[array]" dlib face_recognition
    

    安装成功后进行commit

    sudo docker commit 79e08fabc3fd face_opencv
    sudo docker images
    

    建立raspberrypi文件夹及相关文件

    • Dockerfile
    FROM face_opencv
    RUN mkdir /myapp
    WORKDIR /myapp
    COPY myapp .
    

    build镜像

    sudo docker build -t myface_opencv .
    

    在容器中跑通示例代码facerec_on_raspberry_pi.py

    一定要确保摄像头开启,检查是否存在video0文件

    sudo docker run -it --device=/dev/vchiq --device=/dev/video0 --name myface_opencv myface_opencv
    python3 facerec_on_raspberry_pi.py
    

    (选做)在容器中跑通示例代码facerec_from_webcam_faster.py

    #sudo apt-get install x11-xserver-utils
    xhost +
    sudo docker run -it --rm 
    	-v /tmp/.X11-unix:/tmp/.X11-unix 
    	-e DISPLAY=:0.0 
    	-e QT_X11_NO_MITSHM=1 
      	--device=/dev/vchiq 
    	--device=/dev/video0 
    	--name myface4 
    	myface_opencv 
    	python3 facerec_from_webcam_faster.py
    



    5️⃣问题与总结

    • 问题1-安装依赖

      • 问题描述:出现需要安装依赖和依赖冲突

      • 解决方法:使用sudo aptitude install

    • 问题2-安装pip

      • 问题描述:安装python3 get-pip.py时报错误AttributeError: module 're' has no attribute 'compile'

      • 问题解析:上次实验残留re.py文件,和系统库同名

      • 解决方法:删除re.py文件

    • 问题3-安装Pyhton虚拟机

      • 问题描述:使用Python3 安装虚拟机报错

      • 解决方法:修改配置文件如博客上文所示

    • 问题4-编译OpenCV

      • 问题描述:编译时出现四次缺少hpp类的错误

      • 问题解析:出错是由于hpp文件不存在,但其文件存在于opencv-contrib目录下,可以在代码中将其路径修改为文件所在目录对应的绝对路径。

      • 解决方法:根据错误信息提示的文件目录,找到配置文件,将配置信息修改

      • 前两个报错

      • #include "opencv2/xfeatures2d/cuda.hpp"

      • 改为

      • #include "/home/pi/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"

      • 第三个报错

      • opencv2/xfeatures2d.hpp

      • 改为

      • /home/pi/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp

      • 第四个报错

      • /opencv2/xfeatures2d/nonfree.hpp

      • 改为

      • include "/home/pi/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp"

    • 问题5

      • 问题描述:无效类型转换

      • 解决方法:打开代码文件/home/pi/opencv-3.3.0/modules/python/src2/cv2.cpp在对应行进行强制类型转换

    • 问题6

      • 问题描述:运行拍照功能代码时出错,缺少gtk库

      • 解决方法:

        • 首先下载缺少的库libgtk2.0-dev和pkg-config,使用aptitude install下载该库及相关依赖,然后使用cmake重新编译OpenCv

        • 在cmake时要添加如下内容:-D WITH_QT=ON -D WITH_GTK=ON -D WITH_GTK_2_X=ON(参考链接OpenCV Error: The function is not implemented.解决方法

        • 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 
              -D WITH_QT=ON 
              -D WITH_GTK=ON 
              -D WITH_GTK_2_X=ON ..
          
        • 如果cmake过程中出现如下错误,说明系统缺少Qt 4.x模块,需要使用pip安装Qt 4:sudo apt-get install qt4-default

        • 使用命令sudo apt search qt4-default,出现以下内容说明安装成功

        • 使用make -j4重新编译安装opencv(又是一段漫长的等待,建议睡个觉再继续嗷)

    6️⃣小组协作记录

    小组成员及分工

    学号 姓名 分工
    031702311 陈珊珊 负责实际操作,问题解决,博客撰写
    031702321 林鑫灿 负责查阅资料,问题解决,博客撰写
    031702336 林家伟 负责查阅资料,问题解决,博客撰写

    在线协作记录

    我们小组通过屏幕分享的方式直播操作,遇到问题大家一起解决,大概经过16个小时的奋斗我们终于完成了!!!

  • 相关阅读:
    游戏中的View开发
    下载更新包,并且在任务栏提示进度.
    调用android非unbind的服务中的方法(不使用bindService启动的服务)
    判断android系统中Service是否在运行的方法
    如何从Activity中调用Service中的方法
    android官方文档---应用程序基础---服务的理解(app Component---services)
    怎么通过文件名的String,找到对应的资源ID
    疯狂Java之JDBC 笔记
    android应用将json数据打包在本地,进行读取的代码
    STL 堆的使用
  • 原文地址:https://www.cnblogs.com/ss333/p/13056468.html
Copyright © 2011-2022 走看看