sayoko

导航

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

posted on 2020-06-07 14:34  sayoko  阅读(213)  评论(0编辑  收藏  举报