树莓派 Raspbian Stretch 安装 OpenCV 指南

欢迎加入 HA 技术讨论群:515348788

OpenCV 对于研究 AI 的朋友肯定不陌生了,相信不少人在其他系统的主机上跑起来了。树莓派由于性能受限,一直不被看作适合 OpenCV 的平台。诚然,小派跑起 OpenCV 确实吃力了一些,但是并非完全不可能跑。本篇教程所展现的内容就是一个尝试,需要注意的是树莓派的性能问题并不能通过软件解决,因此请大家做好运行迟缓的内心准备。

以下教程内容参考了 Pyimagesearch。建议有英文基础的同学前往该网站学习。当然文章不是纯翻译,还是会掺和一些自己的私货,比如如何在 Home Assistant 当中接入 OpenCV 呢?~

安装背景:一块装有 Raspbian Stretch 的树莓派(最好是全新纯净安装),熟悉基本的 SSH、VNC 等操作。(都玩到 OpenCV 了,相信不用我再多说这些知识了)

文件系统扩容

开头也提到了小派的空间有限,因此第一件事就是将系统扩大到整块 TF 卡的空间。

终端输入 sudo raspi-config —— Advanced Options —— Expand filesystem ——A1. Expand File System,之后 sudo reboot 重启。

重启后,可输入 df -h,检查是否扩容完毕。

俗话说“巧妇难为无米之炊”,都要人工智能了,还是别拿 4G、8G 的小卡折腾了,个人推荐 16G 及以上 TF 卡。要是你非用小卡不可,想要压缩空间,可以把部分系统自带的软件卸载掉,比如 Libreoffice 和 Wolfram 之类的,前提是你确定不使用这些软件。

1
2
3
4
sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove

安装依赖包

磨刀不误砍柴工,最麻烦的一个步骤来了。老样子,开始操作前务必记得更新源和包:

1
sudo apt-get update && sudo apt-get upgrade

这里再次提醒一下,国内的朋友最近换源就不要使用大学的源了,阿里云和豆瓣都可以。另外如果是从 Jessie 升级上来的务必记得把源改成 Stretch。

下面正式开始安装流程:

  1. cmake:sudo apt-get install build-essential cmake pkg-config

  2. 图片处理依赖:sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

  3. 视频处理依赖:

    1
    2
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
  4. GUI:sudo apt-get install libgtk2.0-dev libgtk-3-dev

  5. 其他:sudo apt-get install libatlas-base-dev gfortran
  6. Python,系统默认已经安装了,这里是一些头部文件:sudo apt-get install python2.7-dev python3-dev
  7. pip,你们真的没装吗?

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

下载源码

这里抓取下载的是最新版本 3.3.0,日后有新版本更新也可以更换版本号。

1
2
3
4
5
6
7
8
9
10
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
unzip opencv.zip
```
因为安装的是完整功能版本的 OpenCV,因此还要下一个带有附加模块的普通发行版:
``` terminal
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
unzip opencv_contrib.zip

注意:源码和发行版的版本号要一致。

虚拟环境

原作者本人非常提倡在 Python 虚拟环境中安装运行 OpenCV,毕竟库大又杂,不太好影响生产环境。这个问题我个人觉得是见仁见智了,正是因为虚拟环境完全独立于原生 Python 环境,如果要编译一些全局项目的话,反而不方便。我这里就选择跳过这段了。

安装有 Home Assistant 的朋友可以考虑进入 HA 的虚拟环境中安装 OpenCV,也方便日后接入 HA 的时候调用库。不过操作前千万 记得备份 !!!

1
2
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/homeassistant_venv/bin/activate

安装 Numpy

Numpy 是强大的 Python 库,即使不装 OpenCV,如果你要研究研究大数据、可视化等等我个人也是非常推荐安装的。注意如果使用了虚拟环境,一定要进入虚拟环境才安装,否则无法生效。

1
pip install numpy

因为库挺大,所以安装要挺久的,可能会出现假死现象,不要怕,它真的在装。

安装 OpenCV

铺垫了那么久,终于到重点了。安装前我们必须编译一下 OpenCV:

1
2
3
4
5
6
7
8
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 ..

认真 check 一下安装的路径,然后大胆地敲键盘吧:

1
make

大约耗时 4+ 小时,不骗你,就是要那么变态的久。

要是中间出错了,没事,咱们喘口气再来 > <:

1
2
make clean
make

成功后,就是正式安装了:

1
2
sudo make install
sudo ldconfig

如果你使用 Python 3 环境安装的话,最后的文件名会抽疯,我们需要改一下:

1
2
cd /usr/local/lib/python3.5/site-packages/
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so

然后我们对接一下:

1
2
cd ~/cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

最后,我们来检验一下:

1
2
3
python
>>> import cv2
>>> cv2.__version__

不出意外的话,屏幕上应该会显示出 3.3.0 了。

大喜过后,清理安装包,腾出空间:rm -rf opencv-3.3.0 opencv_contrib-3.3.0

接入 Home Assistant

打开 configuration.yaml,填入如下配置:

1
2
3
4
5
6
7
image_processing:
- platform: opencv
name: Front Door Faces
source:
- entity_id: camera.front_door //连接的摄像头组件
classifier:
mom: /path/to/classifier.xml //分类器

默认会从 Github 上下载预设的分类器,你也可以从 这里 下载现成的。当然你也可以自己训练接入。如果你是自己训练的话,最下面一行的配置可以展开:

1
2
3
4
5
mom:
file: /path/to/classifier/xml
neighbors: 4 //容错
min_size: (40, 40)
scale: 1.1f //比例

如果你想在摄像头的实时画面中看到 OpenCV 的识别区域,就是我们常在电视或者美颜相机上看到的那个定位框,你可以到 这里 下载自定义组件,把 opencv.py 放进 custom_components 文件夹下,然后在 configuration.yaml 添加配置:

1
2
3
4
5
6
7
camera:
- platform: opencv
camera: camera.front_door //连接的摄像头组件
processor: image_processing.front_door_opencv_faces //上面的 OpenCV entity ID
# Optional Parameters
name: OpenCV Camera
`
cxlwill wechat
欢迎扫码订阅“墨澜工作室”公众号,获取最新文章推送。