前几天想用树莓派做一个人脸识别打卡的系统,在网上也找了很多源码,最终选了一个较为简单的实现方式,代码参考这里。其中只用到opencv和opencv-contrib两个库,在自己笔记本上先调试了一波,报错了,说是cv2.cv2缺少’face’属性。

问题:缺少opencv-contrib

去网上查了一下,这是没装opencv-contrib的原因,用pip install opencv-contrib装好后,就能全部跑通了。本以为只要在树莓派上装上这两个库,接个USB摄像头应该很快搞定,没想到中间遇到了不少坑,现总结一下自己最终实现的方法。

网上很多教程教在树莓派安装opencv和opencv-contrib两个库都是先去GitHub下载安装包,编译再安装,过程复杂的很,过程极慢,没跑几下就跳出一个报错。opencv和opencv-contrib不是用pip install一条命令就能安装的吗,为什么要搞这么复杂。我建议一开始千万别用这种方法,除非其他方法都试过了没用再去试。还有就是系统最好是原生树莓派系统,其他系统我没试过。

由于树莓派里面给我们安装了python2和python3,我们要用的是python3,所以安装得用pip3,运行程序用python3。

1.安装opencv

pip3 install opencv-python -i https://mirrors.aliyun.com/pypi/simple

2.安装opencv-contrib

pip3 install opencv-contrib-python -i https://mirrors.aliyun.com/pypi/simple

注意到这里,树莓派可能会报错,说是找不到合适版本。不要慌,只需要为opencv-contrib指定版本即可。亲测4.1.0.25可用,不需要跟opencv同个版本。

pip3 install opencv-contrib-python==4.1.0.25 -i https://mirrors.aliyun.com/pypi/simple

这时候pip3 list就可以看到两个库都已经装好了,测试一下可不可以调用:

python3

>>>import cv2

如果报错找不到cv2,缺少各种.so文件的,看这篇文章。如果安装报错,可能要换源。

3.树莓派换国内镜像源

在命令行窗口内输入 sudo nano /etc/apt/sources.list 并回车,进入编辑器。

sudo 是指用系统管理员权限启动,nano 是树莓派内置的轻量文本编辑器,而 /etc/apt/sources.list 就是软件源的配置文件地址了。

接着编辑这个文件,如下图所示,把原来的内容注释掉(最前面加 # 号),在文件最顶部添加下面的内容:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib

按 ctrl-o 保存,回车确定保存文件名,按 ctrl-x 关闭。
sudo apt-get update更新一下。
好像就这些问题了,如果还有其他的直接复杂保存信息百度一下都有答案。
有些实在安装不了的可以先跳过,再导入opencv看是不是报没有’face’属性的错,实在不行就关机重启看有没有这个报错。

4.重装opencv和opencv-contrib

最后你会看到和在windows上调试时一样的报错,说是cv2.cv2缺少’face’属性。
到这里你应该就快成功了,但是很奇怪,这不是opencv-contrib没装报的错误吗,我们这里已经装了还是报错。这时安装网上的方法,想卸载掉这两个库,再重新安装(一定得试试)。我之前就是没试这个方法,用其他方法搞了半天,最终重装确实就可以了。

pip uninstall opencv-contrib-python
 
pip uninstall opencv-python
 
pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple
 
pip install opencv-contrib-python==4.1.0.25 -i https://mirrors.aliyun.com/pypi/simple

最后如果没有改代码,haarcascade_frontalface_default.xml文件的路径可能找不到,这时可以用sudo find / -iname cv2查看cv2存放的路径,在data文件下有这个xml文件,把路径改过来就可以跑通了。

另外如果还报cpp之类的错误的,记得检查一下树莓派有没有接USB摄像头,没接摄像头的话程序也会报错。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐