Raspbian系统下如何让opencv-python调用自行编译的OpenBLAS库
问题根因说明
你遇到的OpenBLAS警告并非仅可能来自OpenCV,pip源安装的arm版本numpy、torch也普遍内置了关闭OpenMP编译的预编译OpenBLAS库,是该警告的高发来源。你自行编译的OpenBLAS未生效的核心原因是系统动态库默认加载优先级低于依赖内置的库路径,未被程序调用。
方案1:无需重新编译套件,直接指定调用你编译的OpenBLAS
你编译好的OpenBLAS库存放在/opt/OpenBLAS路径下,仅需调整动态库加载优先级即可调用:
- 临时测试生效:运行Python脚本前执行命令
export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH,再启动脚本即可验证警告是否消失、性能是否提升 - 永久生效:
- 执行
sudo echo "/opt/OpenBLAS/lib" > /etc/ld.so.conf.d/openblas-custom.conf - 执行
sudo ldconfig更新动态库缓存 - 重启后可通过
ldd命令验证各依赖调用的OpenBLAS路径,确认指向/opt/OpenBLAS/lib下的文件即可
- 执行
方案2:若方案1无效,自行编译绑定自定义OpenBLAS的opencv-python步骤
注意:树莓派4 64位系统编译OpenCV全程需要至少2G交换空间,请提前扩容交换分区避免编译崩溃
- 先卸载现有pip安装的opencv-python:
pip uninstall opencv-python -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_contrib源码:拉取4.5.3版本tag的两组源码,存放到同级目录即可
- 创建编译目录并配置cmake参数,指定自定义OpenBLAS路径:
cd opencv && mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D OPENBLAS_INCLUDE_DIR=/opt/OpenBLAS/include \ -D OPENBLAS_LIB=/opt/OpenBLAS/lib/libopenblas.so \ -D WITH_OPENBLAS=ON \ -D WITH_OPENMP=ON \ -D BUILD_EXAMPLES=OFF .. - 编译安装:
make -j4 && sudo make install && sudo ldconfig - 验证:进入Python交互环境执行
import cv2; print(cv2.getBuildInformation()),搜索OpenBLAS相关字段,确认路径指向/opt/OpenBLAS即可
额外性能优化建议
当前45-50秒的单图耗时可通过以下方式进一步压缩:
- 替换现有torch为带NEON优化的arm64编译版本,或使用Torch Lite量化目标检测模型,推理速度可提升3-5倍
- 编译tesseract源码时添加
--enable-neon参数开启硬件优化,OCR识别速度可提升2倍以上 - 替换目标检测模型为轻量化结构,如YOLOv5n、MobileNetSSD,推理速度可提升至少4倍
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

