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

发布于:2025-07-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

主要用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_opencv

cmake ../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" ]; then
    echo "❌ 找不到 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 Distribution

class BinaryDistribution(Distribution):
    def has_ext_modules(self):
        return True

setup(
    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_wheel

echo "✅ 构建完成!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)的代码?


网站公告

今日签到

点亮在社区的每一天
去签到