下面随笔系列将对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. 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (9/12)

    $$2015-2016\ ACM-ICPC,\ NEERC,\ Northern\ Subregional\ Contest$$ \(A.Alex\ Origami\ Squares\) 签到 //# ...

  2. HDU 6852 Increasing and Decreasing 构造

    题意: 给你一个n,x,y.你需要找出来一个长度为n的序列,使得这个序列满足最长上升子序列长度为x,最长下降子序列长度为y.且这个序列中每个数字只能出现一次 且要保证最后输出的序列的字典序最小 题解: ...

  3. Linux 设置简单密码

    centos: echo 密码 | passwd --stdin 用户名 ubuntu:(需先设置一个密码) sudo passwd username https://blog.csdn.net/mi ...

  4. 记一次基于springboot+aop实现日志记录实战

    1. 为什么要记录日志 好处: a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的. b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志.有了日志 ...

  5. Jenkins 持续集成测试工具

    一.Jenkins(hudson)流程 创建job 执行job 通知机制 二.两种执行策略 定时执行:每隔一段时间执行一下(适合UI和接口测试的执行) 监控代码库执行:单元测试的执行模式(适合单元测试 ...

  6. 实战交付一套dubbo微服务到k8s集群(3)之二进制安装Maven

    maven官网:https://maven.apache.org/ maven二进制下载连接:https://archive.apache.org/dist/maven/maven-3/3.6.1/b ...

  7. Playbook 角色(Roles) 和 Include 语句

    简介 当我们刚开始学习运用 playbook 时,可能会把 playbook 写成一个很大的文件,到后来可能你会希望这些文件是可以方便去重用的,所以需要重新去组织这些文件. Include 语句 基本 ...

  8. 3.安装可视化工具kibana

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-19 10:10:42 星期三 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  9. leetcode29 两数相除 int 与移位

    难受啊 考虑越界 考虑dividend为-2^31,用负数移位运算 class Solution { public: int divide(int dividend, int divisor) { i ...

  10. 为树莓派3B添加LCD1602液晶屏

    树莓派3B针脚说明 LCD1602接线说明 VSS,接地VDD,接5V电源VO,液晶对比度调节,接电位器中间的引脚,电位器两边的引脚分别接5V和接地.RS,寄存器选择,接GPIO14RW,读写选择,接 ...