当前位置: 首页 > news >正文

改进后的 OpenCV 5.x + GStreamer + Python 3.12 编译流程(适用于 Orange Pi / ARM64)

主要用opencv读取hdmiin接口数据,原配的opencv-python不支持GStreamer所以要重新编译,安装miniconda后


📦 1. 安装系统依赖(一次即可)
sudo apt update
sudo apt install -y build-essential cmake git pkg-config \libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \libgtk-3-dev libjpeg-dev libpng-dev libtiff-dev \libavcodec-dev libavformat-dev libswscale-dev \libv4l-dev libxvidcore-dev libx264-dev \python3-dev python3-numpy

🐍 2. 创建 Conda 环境(建议已完成)
conda create -n py312_gst python=3.12 -y
conda activate py312_gst
pip install numpy

🔽 3. 下载 OpenCV 源码(保留 5.x 分支)
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 5.x
cd ..git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 5.x
cd ..

⚙️ 4. 配置 CMake 构建(更新后的完整命令)
mkdir build_opencv && cd build_opencvcmake ../opencv \-D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=~/opencv-gst-install \-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \-D WITH_GSTREAMER=ON \-D WITH_GTK=ON \-D WITH_FFMPEG=ON \-D BUILD_opencv_highgui=ON \-D WITH_V4L=ON \-D WITH_OPENGL=OFF \-D BUILD_EXAMPLES=OFF \-D BUILD_opencv_python3=ON \-D OPENCV_ENABLE_NONFREE=ON \-D PYTHON3_EXECUTABLE=$(which python) \-D PYTHON3_INCLUDE_DIR=$(python -c "from sysconfig import get_paths; print(get_paths()['include'])") \-D PYTHON3_LIBRARY=$(python -c "import sysconfig, sys; print(sysconfig.get_config_var('LIBDIR') + '/libpython' + sys.version[:3] + '.so')") \-D PYTHON3_PACKAGES_PATH=$(python -c "import site; print(site.getsitepackages()[0])")

✅ 本配置已适配你的 ARM64/OrangePi 环境,使用系统 GStreamer 开发包,确保与 OpenCV 动态链接。


🧱 5. 编译与安装
make -j$(nproc)
make install

🐍 6. 拷贝 Python 模块到当前环境(或设置 PYTHONPATH)
cp ~/opencv-gst-install/lib/python3*/site-packages/cv2/python-3.12/cv2*.so $(python -c "import site; print(site.getsitepackages()[0])")

或使用:

export PYTHONPATH=~/opencv-gst-install/lib/python3.12/site-packages:$PYTHONPATH

✅ 7. 验证 GStreamer 支持
python -c "import cv2; print( cv2.getBuildInformation() )"

一键生成whl安装包

下面是一个完整的脚本,可以从你已经安装好的 OpenCV 目录 /home/orangepi/opencv-gst-install/ 中提取 Python 模块 cv2 和所有 .so 动态库,打包成一个离线 .whl 安装包,方便在其他 ARM64 机器上直接使用。


✅ 一键生成 OpenCV .whl 安装包脚本

保存为:build_opencv_whl.sh

#!/bin/bash
set -e# 变量设置
INSTALL_DIR="/home/orangepi/opencv-gst-install"
BUILD_DIR="$HOME/opencv_whl_build"
PYTHON_VERSION="3.12"
PYTHON_TAG="cp312"
ARCH="aarch64"
CV2_SO_PATH="$(find $HOME/build_opencv -name "cv2*.so" | head -n 1)"if [ ! -f "$CV2_SO_PATH" ]; thenecho "❌ 找不到 cv2.so 文件,确保你已经完成 OpenCV 编译"exit 1
fi# 清理旧目录
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR/opencv_python_custom/cv2"# 拷贝 cv2.so
cp "$CV2_SO_PATH" "$BUILD_DIR/opencv_python_custom/cv2/"# 拷贝所有 .so 动态库
cp "$INSTALL_DIR/lib/"libopencv_*.so* "$BUILD_DIR/opencv_python_custom/cv2/"# 创建空的 __init__.py
touch "$BUILD_DIR/opencv_python_custom/cv2/__init__.py"# 生成 setup.py
cat > "$BUILD_DIR/setup.py" <<EOF
from setuptools import setup
from setuptools.dist import Distributionclass BinaryDistribution(Distribution):def has_ext_modules(self):return Truesetup(name='opencv_python_gstreamer',version='5.0.0',packages=['cv2'],package_dir={'cv2': 'opencv_python_custom/cv2'},package_data={'cv2': ['*.so*']},include_package_data=True,zip_safe=False,distclass=BinaryDistribution,
)
EOF# 打包 whl
cd "$BUILD_DIR"
python setup.py bdist_wheelecho "✅ 构建完成!whl 文件位置:"
find dist/ -name "*.whl"

✅ 使用说明

  1. 确保你已经安装了 Python setuptools 和 wheel:

    conda activate py312_gst
    pip install setuptools wheel
    
  2. 运行脚本:

    chmod +x build_opencv_whl.sh
    ./build_opencv_whl.sh
    
  3. 会生成类似:

    dist/opencv_python_gstreamer-5.0.0-py3-none-any.whl
    

✅ 在其它机器上部署:

在另一台机器上安装:

pip install ./opencv_python_gstreamer-5.0.0-py3-none-any.whl

注意:此 .whl 实际不是 pure Python,因此建议手动加上 --force-reinstall 以避免安装冲突。


是否还需要我为你加一段自动检测缺失依赖(如 GTK, GStreamer)的代码?

http://www.dtcms.com/a/277469.html

相关文章:

  • 正则化-机器学习
  • Redis面试精讲 Day 2:Redis数据类型全解析
  • 内存管理概念
  • Docker安装Nginx
  • Web:JS的三种引用方式
  • 《每日AI-人工智能-编程日报》--2025年7月12日
  • Windows 常用命令
  • 网络编程 JAVA
  • 视觉语言导航与目标导航
  • 【银行测试】基金项目测试详细,测试点+面试(一)
  • ​​LangChain专家养成:工具扩展/Agent决策/记忆控制三维进阶
  • 250707脑电分析课题进展——EEGLAB的使用
  • 前端工程化-构建打包
  • 大模型-量化技术
  • 前端构建工具 Webpack 5 的优化策略与高级配置
  • [2025CVPR]DenoiseCP-Net:恶劣天气下基于LiDAR的高效集体感知模型
  • 神经网络的层与块
  • 掌握系统设计的精髓:12个核心设计模式的通俗解读
  • 【编程实践】利用open3d生成物体的最长边方向并可视化
  • 面向对象设计模式详解
  • CD49.【C++ Dev】容器适配器模式
  • 深入解析5G核心网容灾:UDM 故障场景下 SMF 容灾机制深度解析
  • C++ 单例模式实现
  • 【读书笔记】《C++ Software Design》第五章:The Strategy and Command Design Patterns
  • Java学习------设计模式(1)
  • ZKmall开源商城技术攻略:轻松掌握规则引擎与Spring Boot3接口的开发技巧
  • Linux V4L2应用编程常用结构体介绍
  • STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南
  • 面试150 从前序与中序遍历构造二叉树
  • STM32-第五节-TIM定时器-1(定时器中断)