Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

详解百度大脑EdgeBoard出色的视频处理技术

视频处理是人工智能应用中的一个重要方向,对于一款端上部署的AI加速产品,其视频接入能力是产品技术实力的重要体现,同时也直接影响用户的产品体验。端上的嵌入式设备,受制于本身的CPU等硬件资源,同时支持多种视频设备及多种视频格式是极大的挑战。

EdgeBoard是百度基于FPGA打造的嵌入式AI解决方案,能够提供强大的算力,并支持定制化模型,适配各种不同的场景,并大幅提高设备的AI推理能力,具有高性能、高通用、易集成等特点。EdgeBoard作为一款面向各个层次的AI开发者的硬件平台,兼顾了多种视频输入,包括MIPI、BT1120、USB摄像头、IPC(IP Camera,网络摄像头)、GigE工业摄像头,这极大地体现出EdgeBoard在视频处理上出色的技术实力,而同时支持如此多的视频接入设备在一般的AI端产品上也是不常见的。

本文将详细介绍EdgeBoard上的视频处理方案,如何兼顾效率和通用性,在二者之间取得平衡,最大程度上满足用户的需求。

Linux V4L2结构

内核V4L2模块

Linux系统发展至今,以其优越的跨平台特性和扩展移植性在嵌入式操作系统领域占据很大的份额,EdgeBoard采用的是Xilinx PetaLinux工具打造的Linux内核,操作系统采用的是RootFS,如果用户需要Ubuntu操作系统,可以直接在Xilinx论坛上获得arm64 Ubuntu操作系统。

Video4Linux2(简称V4L2)是Linux下关于视频采集相关设备的驱动框架,为驱动和应用程序提供了一套统一的接口规范。支持三类设备,分别会在/dev目录下产生不同的设备节点:

  • 视频输入输出设备(video capture device,video output device),分别是提供视频捕获功能的摄像头类型设备和提供视频输出功能的设备,对应的设备名为videoX。这是我们最常用的一种设备类型。
  • VBI设备(Vertical Blanking Interval),对VBI数据进行控制、发送或抓取的设备,对应设备名vbiX。
  • radio设备,提供FM/AM发送和接收的设备,对应设备名radioX

V4L2在Linux系统中的结构图如下:

在这里插入图片描述
从图中可以看出,驱动的框架层次分明,最上层通过字符设备提供video和media两种控制接口,分别从视频流控制(video)和媒体子设备控制(media)两种不同的角度抽象出操作接口。中间内核驱动层通过三层设备驱动分别从视频抽象,V4L2设备功能定义,子设备功能定义三个层面展开,模块化的设计提供了非常完善的扩展性。最下方是硬件层,除了提供常用摄像头传感器的功能外,对于常用的视频转换也有很好的支持。

在应用层的软件支持也非常丰富,比如广泛使用的FFmpeg、Gstreamer、LiVes、MPlayer等对本地视频设备的支持也都是通过V4L2提供的接口实现的。

Xilinx V4L2驱动结构

深入理解V4L2框架对于FPGA视频方案的灵活配置有很大的帮助作用,也方便FPGA开发人员快速验证视频功能。本节以Xilinx视频处理子系统为例,介绍一套完整的V4L2内核功能的实现,如下图。
在这里插入图片描述

结合上一节提到的V4L2结构图可以看出V4 L2内核对应了全部视频框架的内容。中间部分,xilinx通过xvip_dma结构实现了整体的video_device功能,给用户层提供必要的控制设备接口(右侧用户层接口);左侧部分,是内核将所有的xilinx视频相关设备组合成xvip_composite_device,即v4l2_device,通过该模块可以扩展具体的子设备功能,即v4l2_subdev,包括TPG、VTC、RGB2YUV、scaler等等;右侧部分,是用户层的接口,用户层调用接口实现对视频设备的操作;顶层部分,为了提高数据搬运的效率使用了DMA设备功能,即xilinx_dma_device。下层部分,对于内部数据的管理,使用了v4l2统一抽象提供的vb2_queue、vb2_buffer等模块实现。

V4L2结构应用实例解析

这里以在EdgeBoard上使用的MIPI摄像头(MIPI开发介绍见

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: Idea配置(2020.2版本)

下一篇: 盘点Python-turtle库画出的那些图

精华推荐