下面随笔将给出Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现,最终的效果是:USB摄像头通过板载处理能够把图像通过HDMI接口输出,并结合RFCN模型,通过NNIE实现目标检测,下面给出具体的实现过程。

  板载平台:BOXER-8410AI

  芯片型号:Hi3559AV100

  相机型号:Logitch c270

  开发环境:VM15.5+ubuntu16.04+Hilinux

  首先给出本篇随笔涉及之前写的随笔,希望大家先提前看一看,因为有些知识你可能不大清楚,看了之后能够清楚V4L2的实现及更好理解移植过程:

Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析

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

Hi3559AV100外接UVC/MJPEG相机实时采图设计(二):V4L2接口的实现(以YUV422为例) :

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

Hi3559AV100外接UVC/MJPEG相机实时采图设计(三):V4L2接口通过MPP平台输出 :

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

Hi3559AV100外接UVC/MJPEG相机实时采图设计(四):VDEC_Send_Stream线程分析

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

1、系统框图及VDEC Chn通道与VPSS Group组的关系

  在实现系统功能前先要确定VDEC的通道数、VPSS Group组的关系,我先给出系统的整体实现图解:

  为了确定参数,再度分析VPSS上下文关系,用户可通过 MPI 接口对 GROUP 进行管理。每个 GROUP 仅可与一个输入源绑定。GROUP 的物理通道两种工作模式:AUTO 和 USER,两种模式间可动态切换。AUTO 模式下各通道仅可与一个接收者绑定,主要用于预览和回放场景下做播放控制。USER 模式下各通道可与多个接收者绑定。需要特别注意的是,USER 模式主要用于对同一通道图像进行多路编码的场景,此模式下播放控制不生效,因此回放场景下不建议使用 USER 模式。(对于RFCN移植就用到了user模式)

  在移植过程中,用到了VPSS两个物理通道,对应Hi3559AV100(#define VPSS_MAX_PHY_CHN_NUM 4),对应图示图下:

  VPSS 硬件提供多个物理通道,每个通道具缩放、裁剪等 功能。扩展通道具备缩放功能,它通过绑定物 理通道,将物理通道输出作为自己的输入,把图像缩放成用户设置的目标分辨率输出,对于本项目,VPSS的输入源为VDEC,输出为SVP NNIE,我之前实现的Hi3559AV100外接UVC/MJPEG相机实时采图设计(三):V4L2接口通过MPP平台输出VPSS是接的VO,所有开发过程有不同,实现过程如下图:

  VDEC模块读取的视频文件需为H.264/H.265/MJPEG的数据文件,该模块可参考sample_vdec demo编写,一个通道对应一个视频文件。

2、V4L2->VDEC->VPSS->NNIE->VGS->VO实现过程

  BOXER-8410AI-A2-1010 通过外接 UVC/MJPEG USB 摄像头利用 V4L2 视频接口读取一帧 MJPEG 数据,将 MJPEG 数据送入至 VDEC 解码,经过 VPSS 分两路图形,VpssChn[1]送给 NNIE 做神经网络处理,VpssChn[0]一路正常输出,再通过 VGS 加框,最后 VO-HDMI 输出。整个流程如下:
  (1)初始化 V4L2 接口,开启内存映射;
  (2)初始化 SYS(SAMPLE_COMM_SYS_Init),必须先于 VDEC,VPSS 等模块;
  (3)初始化 VB or USER VB for VDEC(SAMPLE_COMM_VDEC_InitVBPool);
  (4)开启 VDEC(SAMPLE_COMM_VDEC_Start);
  (5)开启 VPSS(SAMPLE_COMM_VPSS_Start);
  (6)开启 VO(SAMPLE_COMM_VO_StartVO);
  (7)绑定 VDEC 与 VPSS(SAMPLE_COMM_VDEC_Bind_VPSS);
  (8)开启 VDEC Stream 线程(SAMPLE_COMM_VDEC_StartSendStream),时刻从 V4L2 接口取数据;
  (9)Load .wk 模型文件(SAMPLE_COMM_SVP_NNIE_LoadModel);
  (10)初始化模型参数(SAMPLE_SVP_NNIE_Rfcn_ParamInit);
  (11)开启 NNIE RFCN 处理线程,从 VPSS 取帧数据,经 NNIE 处理,再用 VGS加框;
  (12)打开 VDEC Stream 线程控制指令;
  (13)VDEC Stream 线程回收 pthread_join();
  (14)NNIE RFCN 线程回收 pthread_join();
  (15)反初始化,结束 V4L2 采集任务等等;
  下面给出具体的移植实现步骤,首先先抛开 V4L2 接口(因为这个之前写已经封装好了,移植相对简单),即先把 V4L2 配置先放一边,其代码主要结合了VDEC、RFCN 及自己编写的 V4L2。所有的代码均在 RFCN 的基础上进行了修改,这个很大程度节约了时间,且提高了程序正确运行的概率,避免出现莫名其妙的 bug。首先,系统需要完成的是就是 MJPEG->VDEC->VPSS->NNIE->VGS->VO 的各个模块的初始化,step1为 SAMPLE_COMM_IVE_StartViVpssVencVo(SAMPLE_VI_CONFIG_S*pstViConfig,SAMPLE_IVE_SWITCH_S*pstSwitch,PIC_SIZE_E*penExtPicSize),此函数实现(2)-(8), step2 在 RFCN_SVP_NNIE_Rfcn()函数下实现.wk 模型导入及 NNIE 初始化,step3 完成 NNIE RFCN 线程的初始化,step4 完成 VDEC_Stream 线程控制和回收及 NNIE 线程的回收。
  关于 V4L2 的移植及实现可以参考我之前的随笔,功能验证都是正确的。
  最后需要在头文件加上 V4L2 接口的相应定义及初始化,在sample_nnie_main.h 函数下添加头文件:

  #include "sample_comm.h"

  #include <linux/types.h>

  #include <linux/videodev2.h>

  文件改动位置:

3、调试遇到问题解决

  在完成MJPEG->VDEC->VPSS->NNIE->VGS->VO函数的初始化之后,最初是简单的移植了VDEC线程开启运行的三个函数,但是出现了程序卡住的bug,具体如下所示:

  代码对应位置:

  因为SAMPLE_COMM_VDEC_CmdCtrl()函数进入了while,卡住了进程,直接将函数位置放到NNIE初始化后面即可,且把函数输入的参数换成全局变量即可。

4、结果测试

  系统的硬件连接图如下所示:

  结果测试如下所示,因为视频上传不了,所有以图片来进行演示,从图片可以看到,数据通过V4L2->VDEC->VPSS->NNIE->VGS->VO的系统开发后,能够将摄像头的数据通过HDMI在显示屏输出,并且开发的NNIE实现了RFCN目标识别的深度学习模型(红色框为NNIE处理图形后VGS加框的效果)。

Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现的更多相关文章

  1. iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

    iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...

  2. 系统开发中按下Enter键登录系统

    转载来自:http://www.jb51.net/article/54308.htm 系统开发中按下Enter键登录系统,即就是监听键盘,当按下Enter键后调用登录按钮的click()事件. JS方 ...

  3. SNF快速开发平台--多组织+多平台+多系统处理方案

    多组织架构的集团要看组织的组成形式: 1.如果每个组织都是独立法人,这个相对来说简单一些,组织之间的关联交易跟集团外部客户交易没什么本质区别, 各个公司都是独立核算,正常的应收应付都需要开发票,各自出 ...

  4. MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...

  5. AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...

  6. unity3d开发的android应用中增加AD系统的详细步骤

    unity3d开发的android应用中增加AD系统的详细步骤 博客分类: Unity3d unity3d  Unity3d已经支持android,怎样在程序里增加admob?  试了一下,确实能够, ...

  7. SSM开发基于Java EE在线图书销售系统

           SSM(Spring+Spring MVC+MyBatis)开发基于Java EE在线图书销售系统  网站成功建立和运行很大部分取决于网站开发前的规划,因此为了在网站建立过程中避免一些不 ...

  8. javaCV开发详解之12:视频转apng动态图片实现,支持透明通道,也支持摄像机、桌面屏幕、流媒体等视频源转apng动态图

    wjavaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG. ...

  9. .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布

    希望 .net 和 WPF 技术时至今日,还能有一些存在感. 这个项目源于2015年前后,当时开发的初版,我使用了 ASP.NET MVC 做为后端,数据库使用原生 ADO.NET 进行操作.WPF ...

随机推荐

  1. Codeforces Round #171 (Div. 2) B. Books (模拟队列)

    题意:有一组数,问子数组和最大不超过\(t\)的最多元素个数. 题解:用数组模拟队列,不断的往里面放,队列中的元素之和大于\(t\),就不断地从队头弹出直到满足条件,维护一个最大值即可. 代码: in ...

  2. Codeforces Round #565 (Div. 3) C. Lose it! (思维)

    题意:给你一串只含\(4,8,15,16,23,42\)的序列,如果它满足长度是\(6\)的倍数并且有\(\frac {k}{6}\)个子序列是\([4,8,15,16,23,42]\),则定义它是好 ...

  3. Codeforces Round #668 (Div. 2) B. Array Cancellation (思维,贪心)

    题意:有一个长度为\(n\)并且所有元素和为\(0\)的序列,你可以使\(a_{i}-1\)并且\(a_{j}+1\),如果\(i<j\),那么这步操作就是免费的,否则需要花费一次操作,问最少操 ...

  4. linux环境下使用jmeter进行分布式测试

    1.前言 熟练使用jmeter进行性能测试的工程师都知道,jmeter的客户端性能是有点差的.这会导致一个问题,其客户端的性能损耗会干扰到性能测试的结果,而且当线程数/并发大到一定程度时,客户端性能会 ...

  5. 字节笔试题 leetcode 69. x 的平方根

    更多精彩文章请关注公众号:TanLiuYi00 题目 解题思路 题目要求非负整数 x 的平方根,相当于求函数 y = √x 中 y 的值. 函数 y = √x  图像如下: 从上图中,可以看出函数是单 ...

  6. C# 类(3)

    方法重载 和python类似,在调用函数的时候可以指定默认参数,car("Jeep",color="red") 方法重载就是 可以定义几个同名的函数,然后带有不 ...

  7. CSS overflow-anchor

    CSS overflow-anchor https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor https://develop ...

  8. RT-Thread学习笔记3-线程间通信 & 定时器

    目录 1. 事件集的使用 1.1 事件集控制块 1.2 事件集操作 2. 邮箱的使用 2.1 邮箱控制块 2.2 邮箱的操作 3. 消息队列 3.1 消息队列控制块 3.2 消息队列的操作 4. 软件 ...

  9. 区块链项目NGK未来价值几何?

    没有人可以预知NGK未来会涨到多少钱,就像比特币只有10美分时,也无法预测它会涨到现在的价格⼀样.那时候人们把CPU超频挖矿只作为⼀种爱好和娱乐.所以,人们也没有办法预知NGK未来的价格.但可以知道的 ...

  10. PAUL ADAMS ARCHITECT:日本楼市仍保持稳定

    日本国土交通省从2008年11月开始,到2020年10月,连续追踪日本的公寓房价和日经指数两个数值的变动关联性,结果显示相关系数是0.935,也就是说在此期间,日本楼市和股市有着非常强的正相关. 保罗 ...