树莓派3运行OpenCV报错AttributeError: 'module' object has no attribute 'face'求助
解决树莓派3上OpenCV
cv2.face 模块缺失及opencv_contrib安装失败问题 我之前在树莓派3上踩过完全一样的坑——用pip装的标准OpenCV不带face模块,想单独装opencv_contrib又碰到找不到适配ARM架构版本的报错。这根本原因是PyPI上大部分预编译的OpenCV包都是给x86架构做的,树莓派的ARM芯片没法直接用,得换几个思路来解决:
方案一:用树莓派专用一键编译脚本(最省心)
树莓派社区里有大佬写好了一键编译脚本,会自动把OpenCV和opencv_contrib一起编译,还会适配树莓派的硬件配置,省得自己手动调参数。步骤很简单:
- 先更新系统包,避免依赖问题:
sudo apt update && sudo apt upgrade -y - 安装编译必需的依赖包:
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev - 找一个树莓派社区广泛使用的OpenCV一键编译脚本,下载到本地后,进入脚本所在目录,赋予执行权限并运行:
注:这个脚本会自动下载对应版本的OpenCV和opencv_contrib源码,全程自动编译安装,树莓派3大概要跑1.5小时左右,期间别断电就行。chmod +x install.sh ./install.sh
方案二:手动编译OpenCV+opencv_contrib(更灵活)
如果不想用脚本,手动编译也能精准控制版本,就是耗时久一点:
- 先装完方案一里的所有依赖包
- 去OpenCV官方仓库下载版本完全一致的OpenCV和opencv_contrib源码包(比如都选4.5.5版本,版本不匹配会导致编译失败),解压到同一父目录下
- 进入OpenCV源码目录,创建编译目录并进入:
cd opencv && mkdir build && cd build - 配置CMake参数,重点指定opencv_contrib的模块路径,同时开启Python绑定:
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D PYTHON_EXECUTABLE=/usr/bin/python3 \ -D BUILD_EXAMPLES=ON .. - 用4核加速编译(树莓派3有4个核心,别用超过
-j4的参数,不然容易因资源耗尽死机):make -j4 - 安装并更新系统库缓存:
sudo make install && sudo ldconfig
方案三:尝试第三方预编译ARM包(最快)
有些第三方源提供了带contrib模块的树莓派专用OpenCV包,不用编译直接安装:
- 先添加对应的软件源:
echo "deb http://packages.ros.org/ros/ubuntu buster main" | sudo tee /etc/apt/sources.list.d/ros-latest.list - 更新源后安装OpenCV:
这个包的版本可能不是最新的,但已经包含了sudo apt update && sudo apt install python3-opencvcv2.face模块,足够满足基础的人脸识别需求,安装速度非常快。
几个关键注意点:
- 编译前一定要确保树莓派有至少10GB的空闲空间,编译过程会生成大量临时文件,空间不够会直接失败
- 如果编译中途报错,90%的概率是依赖包没装全,回头检查方案一里的依赖列表有没有遗漏
- 安装完成后记得重启终端,或者重新加载Python环境,不然可能还是会出现模块找不到的情况
内容的提问来源于stack exchange,提问作者danny3s
相关产品推荐
相关产品推荐

