基于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层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...
随机推荐
- Codeforces Round #633 (Div. 2)
Codeforces Round #633(Div.2) \(A.Filling\ Diamonds\) 答案就是构成的六边形数量+1 //#pragma GCC optimize("O3& ...
- Codeforces Round #640 (Div. 4)
比赛链接:https://codeforces.com/contest/1352 A - Sum of Round Numbers 题意 将一个十进制数的每一个非零位分离出来. 代码 #include ...
- hdu4686 Arc of Dream
Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission ...
- ACdream1414 Geometry Problem
Problem Description Peter is studying in the third grade of elementary school. His teacher of ...
- Codeforces Round #577 (Div. 2) C. Maximum Median (模拟,中位数)
题意:给你一个长度为奇数\(n\)的序列.你可以对任意元素加上\(k\)次\(1\),求操作后的中位数最大. 题解:先对序列进行排序,然后对中位数相加,如果中位数和后面的元素相等,就对后面所有和当前中 ...
- Codeforces Round #304 (Div. 2) C. Basketball Exercise (DP)
题意:给你两个长度相同的数组,每次从两个数组中选数(也可以不选),但是不可以在同一个数组中连续选两次,问能选的最大值是多少? 题解:dp,\(dp[i][0]\)表示第\(i\)个位置不选,\(dp[ ...
- 【ybt金牌导航1-2-3】折线统计
折线统计 题目链接:ybt金牌导航1-2-3 题目大意 在一个图上有一些点,保证任意两个点的横纵坐标都不相同. 要你选一些集合,按 x 坐标排序依次连接,会构成一些连续上升下降的折线,问你折线数量是 ...
- leetcode 122 123 309 188 714 股票买卖 动态规划
这类问题有一个通法 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/yi-ge-tong-y ...
- Leetcode(28)-实现strStr()
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- Linux 驱动框架---cdev字符设备驱动和misc杂项设备驱动
字符设备 Linux中设备常见分类是字符设备,块设备.网络设备,其中字符设备也是Linux驱动中最常用的设备类型.因此开发Linux设备驱动肯定是要先学习一下字符设备的抽象的.在内核中使用struct ...