主要用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"
✅ 使用说明
确保你已经安装了 Python setuptools 和 wheel:
conda activate py312_gst pip install setuptools wheel
运行脚本:
chmod +x build_opencv_whl.sh ./build_opencv_whl.sh
会生成类似:
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)的代码?