当前位置: 首页 > 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.xdnf.cn/news/1118197.html

相关文章:

  • vue的优缺点
  • Vue 3 TypeScript 接口(Interface)使用
  • 【基于开源大模型(如deepseek)开发应用及其发展趋势的一点思考】
  • 西藏氆氇新生:牦牛绒混搭液态金属的先锋尝试
  • web:js的三种引用方式
  • MYSQL笔记1
  • 大模型之Langchain篇(二)——RAG
  • SQL的初步学习(二)(以MySQL为例)
  • 《区间dp》
  • Excalidraw:一款颠覆传统思维的免费开源绘图工具
  • DHS及HTTPS工作过程
  • JSON/AJAX/XHR/FetchAPI知识点学习整理
  • 代码随想录算法训练营第三十二天|动态规划理论基础、LeetCode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • std::sort的核心设计思想
  • 代码随想录算法训练营第十七天
  • MongoDB数据基本介绍
  • 从 Intel MacBook 迁移到 ARM MacBook 的完整指南
  • Windows怎样同步时间服务器?
  • 【网络实验】-BGP选路原则-11条
  • 攻防世界——Web题 very_easy_sql
  • 嵌入式 Linux开发环境构建之安装 SSH 软件
  • Spring AI 项目实战(十六):Spring Boot + AI + 通义万相图像生成工具全栈项目实战(附完整源码)
  • mapstruct与lombok冲突原因及解决方案
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 44(题目+回答)
  • vue2入门(1)vue核心语法详解复习笔记
  • Agent篇
  • [Linux入门 ] RAID存储技术概述
  • 面向对象设计模式详解
  • 基于 STM32H743VIT6 的边缘 AI 实践:猫咪叫声分类 CNN 网络部署实战(已验证)中一些bug总结
  • OSPF 基础实验