DeepStream做对象模糊的几种方法

        有时候,我们需要对视频的敏感信息做模糊处理,比如模糊人脸,车牌。

        有时候,也需要对整帧做模糊,或者遮挡。比如这个例子。

下面介绍几种模糊的办法。

1. 通过nvosd

        deepstream-test1是DeepStream最简单的一个例子,这个例子跑了一个对象检测模型,完整的管道是“file-source -> h264-parser -> nvh264-decoder ->  pgie -> nvvidconv -> nvosd -> video-renderer”。

        如果想模糊所有对象,可以在osd_sink_pad_buffer_probe中添加如下代码。

        for (l_obj = frame_meta->obj_meta_list; l_obj != NULL;
                l_obj = l_obj->next) {
            obj_meta = (NvDsObjectMeta *) (l_obj->data);
            if (obj_meta->class_id == PGIE_CLASS_ID_VEHICLE) {
                vehicle_count++;
                num_rects++;
            }
            if (obj_meta->class_id == PGIE_CLASS_ID_PERSON) {
                person_count++;
                num_rects++;
            }
            //新加
            obj_meta->rect_params.has_bg_color = 1;
            obj_meta->rect_params.bg_color.red = 0.0;
            obj_meta->rect_params.bg_color.green = 0.0;
            obj_meta->rect_params.bg_color.blue = 0.0;
            obj_meta->rect_params.bg_color.alpha = 0.5;
            //新加-------
        }

结果如下,可以看到所有对象都被模糊成黑色,模糊颜色可以通过red,green,blue进行更改,模糊程度可以通过alpha进行更改,如果设成1,就是全黑的效果。

        如果想模糊整帧,可以在osd_sink_pad_buffer_probe中添加如下代码。

        display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
        NvOSD_RectParams* rect_params = &display_meta->rect_params[0];
        display_meta->num_rects = 1;
        rect_params->left = 0;
        rect_params->top = 0;
        rect_params->width = frame_meta->pipeline_width;
        rect_params->height = frame_meta->pipeline_height;
        printf("w:%f,h:%f\n", rect_params->width, rect_params->height);
        rect_params->has_bg_color = 1;
        rect_params->bg_color.red = 0.0;
        rect_params->bg_color.green = 0.0;
        rect_params->bg_color.blue = 0.0;
        rect_params->bg_color.alpha = 1.0;
        rect_params->border_width = 3;
        rect_params->border_color = (NvOSD_ColorParams) {1.0, 1.0, 0.0, 1.0};

        nvds_add_display_meta_to_frame(frame_meta, display_meta);

        结果如下,这里有个小问题,整帧都被填成黑的,对象的标签还在显示,osd插件是开源的,这是因为,先画的矩形,后画的标签。

2. 通过dsexample插件

首先要重编dsexample插件,因为该插件默认不使用opencv。进入/opt/nvidia/deepstream/deepstream/sources/gst-plugins/gst-dsexample目录,按着readme重编dsexample插件,主要是以下几步:

$ sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \
       libopencv-dev
# set WITH_OPENCV?=1 in makefile
$ make && make install

不用写代码,测试命令如下:

$ cd /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1
$  gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! mux.sink_0 nvstreammux name=mux batch-size=1 width=1280 height=720    ! nvinfer  config-file-path=./dstest1_pgie_config.txt !  nvvideoconvert nvbuf-memory-type=1 ! 'video/x-raw(memory:NVMM),format=RGBA' ! dsexample full-frame=FALSE blur-objects=TRUE ! nvvideoconvert ! 'video/x-raw(memory:NVMM),format=RGBA' !   nvvideoconvert ! 'video/x-raw(memory:NVMM),format=RGBA' ! nvdsosd !   nvvideoconvert  ! nveglglessink

运行的结果如下:

  

源代码用的是opencv的高斯模糊, 当然也可以改成填充,导出sgie的输入tensor,发现也被填充了,所以这里的填充是对frame的buffer做in-place的更改。

// GaussianBlur(in_mat(crop_rect), in_mat(crop_rect), cv::Size(15,15), 4);
   rectangle(in_mat, cv::Point(crop_rect_params->left, crop_rect_params->top),
                  cv::Point(crop_rect_params->left+crop_rect_params->width, crop_rect_params->top+crop_rect_params->height) ,   (255, 0, 0), -1) ;

重新编译后,新的测试结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/531155.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的“垃圾分类网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“垃圾分类网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统功能界面图 用户登录、用户注…

基于java+springboot+vue实现的人事管理系统(文末源码+Lw)23-242

摘 要 使用旧方法对人事管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在人事管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的人事管理…

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测 目录 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索…

SQL 注入之 Windows/Docker 环境 SQLi-labs 靶场搭建!

在安全测试领域,SQL注入是一种常见的攻击方式,通过应用程序的输入执行恶意SQL查询,从而绕过认证和授权,可以窃取、篡改或破坏数据库中的数据。作为安全测试学习者,如果你要练习SQL注入,在未授权情况下直接去…

(2022级)成都工业学院数据库原理及应用实验一:CASE工具概念数据模型建模

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 PowerDesigner 16.1 实验要求 某医院一个门诊部排班管理子系统涉及如下信息: 若干科室&a…

传输大咖22|如何利用ProtoBuf实现高效的数据传输?

在今日信息技术日新月异的时代,数据传输的速度与安全性无疑成为了软件开发中的重中之重。无论是微服务架构下的服务间交流,还是客户端与服务器间的数据互动,寻求一种既高效又稳妥的数据传输方式已成为共识。尽管传统的数据格式,如…

论文复现 混淆矩阵

概念 参考视频: 使用pytorch和tensorflow计算分类模型的混淆矩阵_哔哩哔哩_bilibili 混淆矩阵是评判模型结果的一种指标,属于模型评估的一部分,常用于评判分类器模型的优劣。 准确率:所有预测正确的验证集样本个数/所有的验证集…

什么是SSL重签(reissue)?具体怎么做?

SSL重签(reissue)是指在SSL/TLS证书到期或需要更新时,证书持有者向证书颁发机构(CA)申请新的证书的过程。这通常是因为原有证书的有效期即将结束,或者证书因为某些原因(如密钥泄露、证书损坏等&…

2024,嵌入式还适合入吗?为什么好多人劝退?

昨几天有个老铁找我,说买了我们的教程。 我有点奇怪,c语言教程我们都是送的。 聊了一会才知道,有人拿我送给粉丝的教程工具资料,到某宝上卖。 他就是买了资料,看我们的教程和经历,找到我的。 他说&#xff…

深入理解LRU缓存算法:原理、应用与优化

LRU算法(Least Recently Used,最近最少使用算法)的思想是基于"时间局部性"原理,即在一段时间内,被访问过的数据在未来仍然会被频繁访问的概率较高。 LRU 原理 LRU算法的主要思想是将最近被使用的数据保留在…

redis的三大模式的演化及集群模式思考和总结

redis的三大模式,也是循序渐进。 1、主从复制 比如一开始的读写分离的,主从复制。 一个master,多个slave。 master进行写和 增量同步,slave负责读,和接收增量同步的信息。 这样压力减轻。 2、哨兵模式 这个推出…

如何通过VPN访问内网?

VPN(Virtual Private Network)是一种通过公共网络建立私有网络连接的技术,可以在不同地点的网络中建立安全通道,实现远程访问内网资源的目的。本文将介绍如何通过VPN访问内网,并介绍一款名为“天联”的VPN服务。 什么是…

ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

前言 ASP.NET Core 内置的标识(identity)框架,采用的是 RBAC(role-based access control,基于角色的访问控制)策略,是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…

软件设计—接口安全设计规范

1.token授权机制 2.https传输加密 3.接口调用防滥用 4.日志审计里监控 5.开发测试环境隔离,脱敏处理 6.数据库运维监控审计 软件项目相关全套精华资料包获取方式①:点我获取 获取方式②:本文末个人名片直接获取。

内网IP与外网IP关联关系连接过程

前言 我们每天都会访问各种各样的网站,比如淘宝,百度等等。不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚这个问题,首先就得先搞清楚内网ip和外网ip的联系。 网络结构 如图,假设我们的计算机…

测试开发必备技能:Python多线程处理!

什么是进程 进程是执行中的程序 拥有独立地址空间,内存,数据栈等 操作系统统一管理 派生(fork或spawn)新进程 进程间通信(IPC)方式共享信息 什么是线程 同进程下执行,并共享相同的上下文 …

python运行报错 ModuleNotFoundError: No module named ‘speech_recognition‘解决方法

写在前面 自己的测试环境&#xff1a; Ubuntu 20.04 一、问题描述 运行 python 程序时遇到如下问题&#xff1a; Traceback (most recent call last):File "mix.py", line 10, in <module>import speech_recognition as sr ModuleNotFoundError: No module…

羊大师分享:每日一杯羊奶,健康生活我有秘诀

今天&#xff0c;我要为大家揭开羊奶那神秘的面纱&#xff0c;分享为何它被我誉为“液体黄金”&#xff0c;以及如何正确饮用。 首先&#xff0c;让我们看看羊奶为何如此独特&#xff1a; 丰富的营养&#xff1a;羊奶含有高质量的蛋白质和必不可少的氨基酸&#xff0c;它们对…

免费在线SSL证书格式转换工具,轻松完成SSL证书格式转换

在互联网时代&#xff0c;网站安全问题备受关注&#xff0c;SSL证书作为确保网站安全的重要工具&#xff0c;会部署在服务器上来实现HTTPS确保传输数据安全。然而SSL证书有PEM、JKS、PKCS等多种格式&#xff0c;市面上有Apache、Nginx、Tomcat、Windows Server&#xff08;IIS&…

Jmeter的json提取器(包括提取一个参数的所有值,提取多个参数

jmeter的json提取器&#xff08;包括提取多个参数&#xff0c;提取一个参数的所有值&#xff09;https://www.cnblogs.com/jxial/p/15175314.html 在工作中经常遇到这种情况&#xff0c;就是下一个接口需要引用上一个接口返回的值&#xff0c;普遍的方法就是运用后置提取器 常…