基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI、VDEC、VPSS、VGS、VO、NNIE,其中涉及的内容,大家可以参考之前我写的博客:
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数据流分析的更多相关文章
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: 基于Hi3559AV10 ...
- 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...
- Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...
- Hi3559AV100 NNIE开发(6)RFCN中NNIE实现关键线程函数->SAMPLE_SVP_NNIE_Rfcn_ViToVo()进行数据流分析
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- 基于底层的 XML 的解析方式详解
在上一篇博客中,我们介绍了什么是 XML ,http://www.cnblogs.com/ysocean/p/6901008.html,那么这一篇博客我们介绍如何来解析 XML . 部分文档引用:ht ...
- Spring源码学习笔记之基于ClassPathXmlApplicationContext进行bean标签解析
bean 标签在spring的配置文件中, 是非常重要的一个标签, 即便现在boot项目比较流行, 但是还是有必要理解bean标签的解析流程,有助于我们进行 基于注解配置, 也知道各个标签的作用,以及 ...
- canal 基于Mysql数据库增量日志解析
canal 基于Mysql数据库增量日志解析 1.前言 最近太多事情 工作的事情,以及终身大事等等 耽误更新,由于最近做项目需要同步监听 未来电视 mysql的变更了解到公司会用canal做增量监 ...
- 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计
下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...
随机推荐
- 【noi 2.6_9271】奶牛散步(DP)
这题与前面的"踩方格"重复了,而且是大坑题!题目漏写了取模12345的条件! 详细解析请见我之前的博文--http://www.cnblogs.com/konjak/p/59368 ...
- Educational Codeforces Round 97 (Rated for Div. 2) C. Chef Monocarp (DP)
题意:有\(n\)个菜在烤箱中,每个时刻只能将一个菜从烤箱中拿出来,第\(i\)个时刻拿出来的贡献是\(|i-a[i]|\),你可以在任意时刻把菜拿出来,问将所有菜拿出的最小贡献是多少? 题解: 先对 ...
- Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
题意:你有\(a\)个树枝和\(b\)个钻石,\(2\)个树枝和\(1\)个钻石能造一个铁铲,\(1\)个树枝和\(2\)个钻石能造一把剑,问最多能造多少铲子和剑. 题解:如果\(a\le b\),若 ...
- Educational Codeforces Round 89 (Rated for Div. 2) C. Palindromic Paths (思维)
题意:有一个\(n\)x\(m\)的矩阵,从\((1,1)\)出发走到\((n,m)\),问最少修改多少个数,使得所有路径上的数对应相等(e.g:\((1,2)\)和\((n-1,m)\)或\((2, ...
- 笔记-EF Core 并发冲突与令牌
并发标记并发分悲观并发和乐观并发.悲观并发:比如有两个用户A,B,同时登录系统修改一个文档,如果A先进入修改,则系统会把该文档 锁住,B就没办法打开了,只有等A修改完,完全退出的时候B才能进入修改.乐 ...
- 使用cfssl生成自签证书
安装ssl wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_li ...
- Cobbler服务引导第三方PE系统
通过Cobbler服务引导第三方PE系统 1.上传第三方ios到/root/Ushendu_win10.iso并增加菜单项 cobbler distro add --name=Ushendu_win1 ...
- LINUX - 通信
为什么三次握手: 让服务端和客户端都知道,自己的收信能力和发信能力没有问题: 第一次:客户端发给服务端--服务端知道了,自己的收信能力和客户端的发信能力没有问题: 第二次:服务端回复客户端--客户端知 ...
- 4.安装fluentd用于收集集群内部应用日志
作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-13 11:02:14 星期四 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...
- 鸟哥的linux私房菜——第十二章学习(Shell Scripts)
第十二章 Shell Scripts 1.0).什么是shell scripts? script 是"脚本.剧本"的意思.整句话是说, shell script 是针对 shel ...