[RKNN学习记录]香橙派orangepi 5plus python获取HDMI输入视频流

 参考链接:

Ubuntu 20.04搭建OpenCV 4.5.0 & C++环境_ubuntu opencv4.5.0-CSDN博客

How to compile OpenCV with Gstreamer [Ubuntu&Windows] | by Galaktyk 01 | Medium

Releases - OpenCV

香橙派官方镜像自带一个opencv4.5.4的头文件库,可以使用C/C++语言直接调用,奈何本渣渣太菜还不会C++,只能想想办法用python调用了。按照以前玩jetson nano的经验,决定使用opencv的Gstreamer读取。

想要使用gstreamer获取视频流,首先必须确定opencv开启了Gstreamer,一般来说使用pip install opencv-python安装的opencv是不开启Gstreamer的

可以尝试以下代码查看:

import cv2
print(cv2.getBuildInformation())

上图就代表未开启Gstreamer,这种情况下是无法通过cv2.CAP_GSTREAMER直接读取的

cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)

想要开启Gstreamer,就需要从源码进行编译。

预备工作:

 下载依赖库

sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

1、下载opencv source

https://github.com/opencv/opencv/archive/4.5.4.zip

2、解压,创建build文件夹,使用Cmake配置

unzip opencv-4.5.4.zip
cd opencv-4.5.4
mkdir build
cd build

Cmake配置如下

cmake \
    -D CMAKE_BUILD_TYPE=RELEASE \                         # 设置构建类型为RELEASE
    -D INSTALL_PYTHON_EXAMPLES=OFF \                      # 不安装Python示例
    -D INSTALL_C_EXAMPLES=OFF \                           # 不安装C示例
    -D BUILD_opencv_python2=OFF \                         # 不构建Python 2支持
    -D CMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") \  # 设置安装路径为Python的安装路径
    -D PYTHON3_EXECUTABLE=$(which python3) \              # 指定Python 3可执行文件路径
    -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \  # 指定Python 3的包含目录
    -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \  # 指定Python 3的包路径
    -D WITH_GSTREAMER=ON \                                # 开启GStreamer支持
    -D BUILD_EXAMPLES=OFF \                               # 不构建示例
    -D PNG_LIBRARY=/usr/lib/aarch64-linux-gnu/libpng.so \ # 指定PNG库路径
    ..

配置后检查一下自己的配置,路径什么的是否正确,重点是GStreamer一行为YES(下图是截的别人的How to compile OpenCV with Gstreamer [Ubuntu&Windows] | by Galaktyk 01 | Medium

3、开始编译

下面命令是全核一起参与编译,但是在我的香橙派5plus上开全核编译时出现多次系统死机情况,所以我使用的是 make -j4 只开启四个线程编译

make -j$(nproc)

4、安装,更新动态链接库

sudo make install
sudo ldconfig

5、测试

首先卸载python中的opencv-python包

然后直接进入python测试下面代码

import cv2
print(cv2.getBuildInformation())

显示YES则成功。

6、获取HDMI输入测试

import cv2

# GStreamer 管道字符串
pipeline = "v4l2src device=/dev/video0 ! videoconvert ! appsink"

# 创建 VideoCapture 对象
cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)

if not cap.isOpened():
    print("Error: Could not open video stream.")
    exit()

# 读取和显示视频流
while True:
    ret, frame = cap.read()
    if not ret:
        print("Error: Failed to read frame from video stream.")
        break

    cv2.imshow('Video Stream', frame)
    
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

OK了

### EDID与Dolby技术详解 #### HDMI接口中的EDID功能解析 在现代显示设备中,如显示器和电视机,几乎都配备了HDMI接口。每一个HDMI端口都会保留一份扩展显示识别数据(Extended Display Identification Data, EDID),该数据存储于仅有256字节容量的EEPROM芯片内[^3]。 当外部源设备(例如蓝光播放机或游戏主机)连接到这些显示装置时,会经由HDMI线缆内的专用线路——即显示数据通道(Display Data Channel, DDC),读取目标屏幕所支持的各项参数配置详情,包括但不限于分辨率、刷新率以及音效编码格式等信息。这一过程确保了发送方能依据接收终端的能力调整输出设置,从而实现最佳视听效果呈现。 #### Dolby音频编解码标准概述 杜比实验室开发了一系列先进的音频处理技术和编解码方案,在家庭影院和个人娱乐领域广泛应用。具体来说: - **LPCM (Linear Pulse Code Modulation)**:一种无损数字音频信号表示方法,适用于CD质量级别的立体声录音文件传输; - **AC-3 / Dolby Digital**:早期版本的支持环绕声体验的技术之一,广泛应用于电影制作行业; - **Dolby Digital Plus**:改进型多声道音频解决方案,提高了比特率效率并增强了兼容性; - **Dolby TrueHD**:专为高清晰度视频设计的一种完全无损压缩算法,可保持原始母版级品质; - **Dolby Atmos**:最新一代三维沉浸式音响系统,不仅限于水平面布局的传统扬声器位置安排,而是引入高度维度概念,创造出更为逼真的空间感听觉环境[^1]; 值得注意的是,随着增强型音频回传信道(Enhanced Audio Return Channel, eARC)作为HDMI 2.1规格的一部分被推出后,它提供了更高的带宽用于承载诸如Dolby TrueHD这样的高级别未压缩或多轨位深优化后的音频流媒体内容,并且降低了延迟时间以更好地服务于互动性强的应用场景,比如电子竞技比赛直播观看体验提升等方面做出了贡献[^2]。 ```python # Python代码示例展示如何利用第三方库读写EDID信息 import edid_parser def read_edid(file_path): with open(file_path, 'rb') as f: raw_data = f.read() parsed_info = edid_parser.parse(raw_data) print(f"Monitor Name: {parsed_info['monitor_name']}") print(f"Supported Resolutions: {[f'{w}x{h}' for w,h in parsed_info['resolutions']]}") read_edid('example.edid') ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值