五、视频处理与GStreamer

五、视频处理与GStreamer

1 视频处理流程

  1. 视频处理的经典流程

    五、视频处理与GStreamer_第1张图片

    • 解码(Decode):负责对压缩的视频进行解压缩,将压缩视频解码为Raw格式的原始视频流。在实际应用中,可能会并行解码多个流,且每个流拥有不同的分辨率与格式。常用解码方式有Media-SDK、OpenCV、GStreamer以及FFMPEG等,但需要注意的是,Media-SDK并不支持MP4这类容器文件。
    • 预处理(Pre-Processing):将解码后获得的Raw原始视频流进行预处理,获取每一帧图像,使之匹配神经网络的输入格式,作为blob输入到神经网络中。该阶段包括转换图像格式、调整图像尺寸以及增强模糊图像等。
    • 推理(Inference):使用基于深度学习的模型进行分类、检测以及分割等操作,可支持并行或串行多个模型的多个推理任务
    • 后处理(Post-Processing):对推理结果进行处理,如加上识别框以及识别置信度等。
    • 编码(Encode):获得视频流的处理结果后,重新对视频流进行压缩,以便用于存储或上传云端。
  2. 各阶段的软硬件依赖

    • 软件依赖

      五、视频处理与GStreamer_第2张图片

    • 硬件依赖

      五、视频处理与GStreamer_第3张图片

      各阶段任务均可在CPU、GPU、FPGA以及AI加速器上运行,因此采用异构系统,将各阶段任务部署到不同硬件设备上,可以在同一系统上处理更多任务,最大限度的发挥系统效能

  3. 视频解码实战

    通过下述代码,可选择各类解码方式

        ##### Decode ####
        # 3 options to decode
    
        #1) decode using OpenCV
        cap = cv2.VideoCapture("road.mp4")
        
        #2) Use GSTREAMER
        # cap = cv2.VideoCapture('filesrc location=road.mp4 !  decodebin ! videoconvert !appsink sync=false', cv2.CAP_GSTREAMER)
    
        #3) Use media-SDK,if don't have iGPU(集成显卡),these codes can't work, just for reference
        # cap = cv2.VideoCapture('road.h264', cv2.CAP_INTEL_MFX)
    

​ 解码结果:

五、视频处理与GStreamer_第4张图片

2 GStreamer流水线

  1. 适用场景

    • 多个模型并行进行测量推理性能
    • 对一个特殊视频流进行要素整合处理
    • 解决多个视频流的解码密度问题
  2. DL-Streamer

    用于构建计算图或流水线,支持将开发的视频分析元素添加至GStreamer Elements的列表中,通过OpenVINO进行检测、分类以及可视化等操作。

你可能感兴趣的:(音视频,计算机视觉,opencv,openvino,python)