• 2020系统综合实践 第7次实践作业 09组


    拓展文件系统

    • 在树莓派终端(或者SSH)上输入
      sudo raspi-config
      
    • 选择“高级选项”菜单项
    • 选择“扩展文件系统”
    • 选择第一个选项“A1.Expand Filesystem”,按键盘上的Enter键,完成后点击“Finish”按钮,重新启动树莓派。重新启动后,文件系统已经扩展为包括micro-SD卡上的所有空间。可以通过执行 df -h 检查输出来验证磁盘是否已扩展。
    • 可以删除LibreOffice和Wolfram引擎以释放Pi上的一些空间
      sudo apt-get purge wolfram-engine
      sudo apt-get purge libreoffice*
      sudo apt-get clean
      sudo apt-get autoremove
    

    1. 在树莓派中安装opencv库

    • 安装依赖
    # 更新和升级任何现有的软件包
    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
    # OpenCV库附带一个名为highgui的子模块 ,用于在我们的屏幕上显示图像并构建基本的GUI。为了编译 highgui模块,我们需要安装GTK开发库
    sudo apt-get install libgtk2.0-dev libgtk-3-dev
    # OpenCV中的许多操作(即矩阵操作)可以通过安装一些额外的依赖关系进一步优化
    sudo apt-get install libatlas-base-dev gfortran
    # 安装Python 2.7和Python 3头文件,以便我们可以用Python绑定来编译OpenCV
    sudo apt-get install python2.7-dev python3-dev
    
    • 下载并解压opencv源码
    cd ~
    wget -O opencv.zip https://github.com/Itseez/opencv/archive/4.3.0.zip
    unzip opencv.zip
    

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

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

    • 安装Python虚拟机

      • 配置虚拟环境
      sudo pip install virtualenv virtualenvwrapper
      sudo rm -rf ~/.cache/pip
      

      • 配置~/.profile ,添加如下,并使用source ~/.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
      
      • 使用Python3安装虚拟机
      mkvirtualenv cv -p python3
      

      • 进入虚拟机
      source ~/.profile && workon cv
      
      • 安装numpy
      pip install numpy
      

    • 编译OpenCV

      • 配置
      cd ~/opencv-4.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-4.3.0/modules 
          -D BUILD_EXAMPLES=ON ..
      

      • 增大交换空间 CONF_SWAPSIZE=1024,重启swap服务
      sudo nano /etc/dphys-swapfile
      sudo /etc/init.d/dphys-swapfile stop
      sudo /etc/init.d/dphys-swapfile start
      

      • 开始编译
      make -j4
      


    • 安装opencv

      sudo make install
      sudo ldconfig
      

    • 验证安装

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

    • picamera模块安装
    pip install "picamera[array]"
    

    • 使用示例程序进行拍照
      # 导入必要的依赖包
      from picamera.array import PiRGBArray
      from picamera import PiCamera
      import time
      import cv2
      # 初始化摄像头
      camera = PiCamera()
      rawCapture = PiRGBArray(camera)
      # 调整感光时间
      time.sleep(5)
      # 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)
    

    • 使用示例程序进行视频流传输
    # 导入依赖
    from picamera.array import PiRGBArray
    from picamera import PiCamera
    import time
    import cv2
    # 初始化摄像头
    camera = PiCamera()
    camera.resolution = (1024, 720)
    camera.framerate = 32
    rawCapture = PiRGBArray(camera, size=(1024, 720))
    # 感光时间
    time.sleep(5)
    
    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)
    	# 输入q退出
    	if key == ord("q"):
    		break
    

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

    • 安装依赖
    pip install dlib
    pip install face_recognition
    
    • 运行下载的facerec_on_raspberry_pi.py文件
    python3 facerec_on_raspberry_pi.py
    

    • 安装webcam
    sudo apt-get install fswebcam
    
    • 运行下载的facerec_from_webcam_faster.py文件
    python3 facerec_from_webcam_faster.py
    

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

    • docker安装
    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh --mirror Aliyun
    
    • 验证docker版本
    • 创建对应目录
    • 拉取镜像
    sudo docker pull sixsq/opencv-python
    

    • 进入容器并安装所需库
    docker run -it [imageid] /bin/bash
    pip install "picamera[array]" dlib face_recognition
    

    • comiit镜像
    docker commit [containerid] ttopencv
    

    • docker文件
    FROM ttopencv
    RUN mkdir /big
    WORKDIR /big
    COPY workdir .
    
    • build镜像
    docker build -t ttopencv .
    

    • 运行脚本
    sudo docker run -it --device=/dev/vchiq --device=/dev/video0 --name ttopencv ttopencv 
    python3 facerec_on_raspberry_pi.py
    
    

    5.遇到的问题和解决方法,小组成员名单、分工、各自贡献以及在线协作的图片

    • 遇到的问题和解决方法
      • 问题:安装依赖时,出现需要安装依赖和依赖冲突
      • 解决方法:使用sudo aptitude install降级
      • 问题:编译时,找不到文件
      • 解决方法:将需要的的文件放入相应目录
      • 问题:docker下载过慢
      • 解决方法:复制进去离线下载
      • 问题:递归文件夹
      • 推倒重来
    • 小组成员及分工
    学号 姓名 分工
    031702115 连振升 调查资料,查找问题解决办法
    031702117 童圣滔 操作树莓派,解决实际问题
    031702118 范文辉 调查资料,查找问题解决办法,编写博客
    • 在线协作记录
      采用的是群内分享屏幕,三位同学一起查找资料和解决困难,由童圣滔进行主要操作


  • 相关阅读:
    2018.9.22 Bubble Cup 11-Finals(Online Mirror,Div.2)
    2018.9.21 Codeforces Round #511(Div.2)
    2018.9.20 Educational Codeforces Round 51
    解题:USACO12OPEN Bookshelf
    解题:CF983B pyramid
    1214. 许可证密钥格式
    1212. 最大连续1的个数
    1270. 勒索信
    1250. 第三大的数
    1218. 补数
  • 原文地址:https://www.cnblogs.com/fwhdbk/p/13085309.html
Copyright © 2020-2023  润新知