下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI、VDEC、VPSS、VGS、VO、NNIE,其中涉及的内容,大家可以参考之前我写的博客:

Hi3559AV100的VI细节处理说明

https://www.cnblogs.com/iFrank/p/14374658.html

基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计

https://www.cnblogs.com/iFrank/p/14370575.html

基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

https://www.cnblogs.com/iFrank/p/14465306.html

基于Hi3559AV100的SVP(NNIE)开发整体流程 :

https://www.cnblogs.com/iFrank/p/14377668.html

  首先给出整体的RFCN流程图解,整个RFCN分为3个step,具体如下所示:

  在分析RFCN数据流之前,首先了解一下基于Hi3559AV100的NNIE模型,在搭建好SDK等环境后,配置好对应的硬件,在HiLinux上进行测试,具体如下:

 1 ~ # ./sample_nnie_main
2 Usage : ./sample_nnie_main <index>
3 index:
4 0) RFCN(VI->VPSS->NNIE->VGS->VO).
5 1) Segnet(Read File).
6 2) FasterRcnnAlexnet(Read File).
7 3) FasterRcnnDoubleRoiPooling(Read File).
8 4) Cnn(Read File).
9 5) SSD(Read File).
10 6) Yolov1(Read File).
11 7) Yolov2(Read File).
12 8) Yolov3(Read File)
13 9) LSTM(Read File)
14 a) Pvanet(Read File).\n")

  从中看可以看到RFCN的整个过程VI->VPSS->NNIE->VGS->VO,VI模块绑定了VPSS模块,VI从摄像头输入一路视频,经VPSS分解为两路,(具体见SAMPLE_SVP_NNIE_Rfcn中step 3-线程创建函数SAMPLE_SVP_NNIE_Rfcn_ViToVo),通过如下函数:

 1   HI_MPI_VPSS_GetChnFrame(  //用户从通道获取一帧处理完成的图像。
2
3           s32VpssGrp,
4
5           as32VpssChn[1],
6
7           &stExtFrmInfo,
8
9           s32MilliSec);
10   HI_MPI_VPSS_GetChnFrame( //用户从通道获取一帧处理完成的图像。
11
12           s32VpssGrp,
13
14           as32VpssChn[0],
15
16           &stBaseFrmInfo,
17
18           s32MilliSec);

(设置两路VPSS通道如帧图片大小等等参数见SAMPLE_COMM_IVE_StartVpss函数)

  一路stBaseFrmInfo保持原来的1080P分辨率(这个需要看MIPI接口的相机型号来,如:见SAMPLE_COMM_IVE_StartViVpssVencVo函数:

case SONY_IMX277_SLVS_2M_240FPS_12BIT:

*penSize = PIC_1080P;

);

  一路stExtFrmInfo转为PIC_CIF(352x288)分辨率(追溯到最初的赋值语句:在SAMPLE_SVP_NNIE_Rfcn函数中:PIC_SIZE_E enSize = PIC_CIF;

经过如下得到VPSS通道对应的图片大小:

 1 SAMPLE_COMM_IVE_StartViVpssVencVo
2
3 aenSize[1] = *penExtPicSize;
4
5 SAMPLE_COMM_IVE_VbInit(aenSize,astSize,VPSS_CHN_NUM);
6
7 SAMPLE_COMM_SYS_GetPicSize(paenSize[i], &pastSize[i])
8
9 SAMPLE_COMM_SYS_GetPicSize
10
11 {
12
13 switch (enPicSize)
14
15 {
16
17 case PIC_CIF: /* 352 * 288 */
18 pstSize->u32Width = 352;
19 pstSize->u32Height = 288; break;......
20
21 }
22
23 }

  之后到SAMPLE_SVP_NNIE_Rfcn_Proc函数,具体如下:

 1 s32Ret = SAMPLE_SVP_NNIE_Rfcn_Proc(
2
3      pstParam,
4
5 pstSwParam,
6
7 &stExtFrmInfo,
8
9 stBaseFrmInfo.stVFrame.u32Width,
10
11 stBaseFrmInfo.stVFrame.u32Height);

  随后进入加框函数:(即进入VGS视频图形子系统)

1 //Draw rect
2
3 s32Ret = SAMPLE_COMM_SVP_NNIE_FillRect(
4
5 &stBaseFrmInfo, //*pstFrmInfo
6
7 &(pstSwParam->stRect), // *pstRect
8
9 0x0000FF00); //u32color

  用到了两个VGS重要参数定义:

  VGS_TASK_ATTR_S stVgsTask;  //定义 VGS task 的属性

  VGS_ADD_COVER_S stVgsAddCover; //定义 VGS 上 COVER 的配置

  下面为定义图像属性和输出图像属性:

1 memcpy(  &stVgsTask.stImgIn,
2 pstFrmInfo,
3 sizeof(VIDEO_FRAME_INFO_S));
4
5 memcpy( &stVgsTask.stImgOut,
6 pstFrmInfo,          
7 sizeof(VIDEO_FRAME_INFO_S));

  随后定义 VGS 上 COVER 的配置,设置COVER参数,如颜色设置为0x0000FF00(绿色,这个与之前Hi3519 RFCN运行一致,加绿色的框)

通过memcpy定义任意四边形 COVER 四个坐标点:

1 memcpy(  stVgsAddCover.stQuadRangle.stPoint,
2
3 pstRect->astRect[i][j].astPoint, //(pstSwParam->stRect)
4
5 sizeof(pstRect->astRect[i][j].astPoint));

  VGS 支持对一幅图像进行遮挡操作,遮挡区域形状可以是矩形或者任意四边形, 遮挡区域颜色为纯色,支持批量打 COVER。 而在Draw rect函数中,没有对stBaseFrmInfo数据直接操作,目前认知VGS做COVER任务提交job时,直接将COVER数据送入至VO,随后加上stBaseFrmInfo的数据:

 1 //将视频图像送入指定输出通道显示。
2
3 s32Ret = HI_MPI_VO_SendFrame(
4
5 voLayer,
6
7 voChn,
8
9 &stBaseFrmInfo,
10
11 s32MilliSec);

  整体的数据流处理流程如下:

基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析的更多相关文章

  1. 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  2. 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: 基于Hi3559AV10 ...

  3. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  4. Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析

    之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...

  5. Hi3559AV100 NNIE开发(6)RFCN中NNIE实现关键线程函数->SAMPLE_SVP_NNIE_Rfcn_ViToVo()进行数据流分析

    前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...

  6. 基于底层的 XML 的解析方式详解

    在上一篇博客中,我们介绍了什么是 XML ,http://www.cnblogs.com/ysocean/p/6901008.html,那么这一篇博客我们介绍如何来解析 XML . 部分文档引用:ht ...

  7. Spring源码学习笔记之基于ClassPathXmlApplicationContext进行bean标签解析

    bean 标签在spring的配置文件中, 是非常重要的一个标签, 即便现在boot项目比较流行, 但是还是有必要理解bean标签的解析流程,有助于我们进行 基于注解配置, 也知道各个标签的作用,以及 ...

  8. canal 基于Mysql数据库增量日志解析

    canal 基于Mysql数据库增量日志解析  1.前言  最近太多事情 工作的事情,以及终身大事等等 耽误更新,由于最近做项目需要同步监听 未来电视 mysql的变更了解到公司会用canal做增量监 ...

  9. 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计

    下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...

随机推荐

  1. Little Difference Gym - 101612L 思维

    题意: 给你一个数n,你需要输出它可以由那几个数相乘构成,我们设可以由x个数构成,这x个数中最小值为minn,最大值为maxx,那么要求maxx-minn<=1 问你满足上面要求的情况有多少种. ...

  2. Codeforces Round #646 (Div. 2) E. Tree Shuffling dfs

    题意: 给你n个节点,这n个节点构成了一颗以1为树根的树.每一个节点有一个初始值bi,从任意节点 i 的子树中选择任意k个节点,并按他的意愿随机排列这些节点中的数字,从而产生k⋅ai 的成本.对于一个 ...

  3. 获取csc.exe路径

    using System.Runtime.InteropServices; var frameworkPath = RuntimeEnvironment.GetRuntimeDirectory(); ...

  4. map最最最基本用法

    map<a,b>c中,a,b是变量类型 参数定义的map的名字 #include<stdio.h> #include<map> //头文件 map<int,c ...

  5. sqlmap在https情况下的一个错误

    对于https网站,使用sqlmap可能会出现如下错误.使用–force-ssl无效. https证书有问题 方法 本地建立proxy.php,内容为 <?php $url = "ht ...

  6. 可迭代对象&迭代器&生成器

    在python中,可迭代对象&迭代器&生成器的关系如下图: 即:生成器是一种特殊的迭代器,迭代器是一种特殊的可迭代对象. 可迭代对象 如上图,这里x是一个列表(可迭代对象),其实正如第 ...

  7. 链接脚本再探和VMA与LMA

    链接脚本简单描述 连接脚本的描述都是以节(section)的单位的,网上也有很多描述链接脚本语法的好文章,再不济还有官方的说明文档可以用来学习,其实主要就是对编译构建的整个过程有了深入的理解后就能对链 ...

  8. matplotlib 图标显示中文

    matplotlib 显示中文 Method_1: # 添上: plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcPara ...

  9. macOS 升级后导致 dart bug

    macOS 升级后导致 dart bug macOS 10.15.5 $ demo_app git:(master) flutter doctor # /Users/xgqfrms-mbp/Docum ...

  10. front-end & web & best code editor

    front-end & web & best code editor 2019 VS Code https://designrevision.com/best-code-editor/ ...