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) ;

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录训练营day36

第八章 贪心算法 part05 1.LeetCode. 无重叠区间 1.1题目链接:435. 无重叠区间 文章讲解:代码随想录 视频讲解:B站卡哥视频 1.2思路:我来按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区…

Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释(2)

Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释(2) flyfish Transformer - 注意⼒机制 Scaled Dot-Product Attention 计算过程 Transformer - 注意⼒机制 代码实现 Transformer - 注意⼒机制 Scaled Dot-Product Attention不同的代码比较 Tran…

【数字化转型】上市公司智能制造词频统计数据(1991-2022年)

数据来源:上市公司年报 时间跨度:1991-2022年 数据范围:上市公司 数据指标: 版本一 智能制造 智能机器 智能生产 机器人 全自动 全机器 版本二 宏观政策 中国制造2025 工业4.0 互联网 范式特征 自动化 信息化 信息…

Socks5代理IP使用教程及常见使用问题

当我们在互联网上浏览网页、下载文件或者进行在线活动时,隐私和安全问题常常被提及。在这样的环境下,一个有效的解决方案是使用Sock5IP。本教程将向您介绍Sock5IP的使用方法,帮助您保护个人隐私并提升网络安全。 一、什么是Sock5IP&#xff1…

QT学习day5

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),socket(new QTcpSocket(this)) {ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false);//不可用ui->sendBtn-&g…

[Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

文章目录 操作流程:前置:Docker和K8S安装版本匹配查看0.1:安装指定docker版本 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一:主节点操作 查看主机域名->编辑域名->域名配置二:安装自动填充,虚拟…

如何借助AI高效完成写作提纲

AI变革力量:未来数据中心的智能化之旅! 在当今这个信息爆炸的时代,人工智能(AI)在众多领域展现出了它的能力,特别是在写作领域。AI写作工具不仅能够帮助我们高效地生成内容,还能在一定程度上提升…

代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和

系列文章目录 目录 系列文章目录455.分发饼干贪心算法大饼干喂胃口大的(先遍历胃口)胃口大的先吃大饼干(先遍历饼干)小饼干先喂胃口小的(先遍历胃口)胃口小的先吃小饼干(先遍历饼干) 376. 摆动序…

14-pyspark的DataFrame使用总结

目录 前言DataFrame使用总结 DataFrame的构建方法1:通过列表构建方法2:通过Row对象构建方法3:通过表Schema构建 方法4:rdd结合字符串构建 DataFrame的方法 PySpark实战笔记系列第五篇 10-用PySpark建立第一个Spark RDD(PySpark实战…

CSGO游戏搬砖,落袋为安才是王道

1.市场燃了,都在赚钱,谁在赔钱? 首先要分清“纸面富贵”和“落袋为安”。市场燃了,你库存里的渐变大狙从5000直接涨到了1W,你赚到5000了吗?严格讲,你需要把库存里的渐变大狙卖出去,提…

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…

2024-基于人工智能的药物设计方法研究-AIDD

AIDD docx 基于人工智能的药物设计方法研究 AI作为一种强大的数据挖掘和分析技术已经涉及新药研发的各个阶段,有望推动创新药物先导分子的筛选、设计和发现,但基于AI的数据驱动式创新药物设计和筛选方法仍存在若干亟待解决的问题。我们课题组的核心研究…

基于达梦数据库开发-python篇

文章目录 前言一、搭建demo前提初始化简单demo 二、可能出现的异常情况DistutilsSetupErrorNo module named dmPythonlist报错 总结 前言 出于信创的考虑,近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用…

matlab使用教程(40)—二维傅里叶变换和多项式插值

1使用 FFT 进行多项式插值 使用快速傅里叶变换 (FFT) 来估算用于对一组数据进行插值的三角函数多项式的系数。 1.1数学中的 FFT FFT 算法通常与信号处理应用相关,但也可以在数学领域更广泛地用作快速计算工具。例如,通常通过解算简单的线性系统来计算…

24/04/11总结

IO流(First edition): IO流:用于读入写出文件中的数据 流的方向(输入指拿出来,输出指写进去) 输入流:读取 输出流:写出 操作文件类型 字节流:所有类型文件 字符流:纯文本 字节流: InputStream的子类:FileInputStream:操作本地文件的字节输入流 OutputSt…

ssm036基于Java的图书管理系统+jsp

图书管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处…

光伏电站运维管理系统功能全面详解

一、系统概述 光伏电站运维管理系统是一款专为光伏电站设计的综合性管理平台。该系统集成了先进的数据监测、故障诊断、运维任务管理、设备信息管理、用户权限管理以及系统维护与升级等功能,旨在提供全面、高效、智能的光伏电站运维服务,确保电站安全、…

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍: 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术,按…

【C++初阶】C++简单入门(长期维护)

本篇博客是对C的一些简单知识分享,有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念:2.C发展历程3.C如何学? 二、C入门1.C关键字(C98标准)2.命名空间3.C输入&输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参…

JavaScript_注释数据类型

JavaScript_语法_注释&数据类型: 1.2注释: 1.单行注释://注释内容 2.多行注释:/*注释内容*/ 1.3数据类型: 1.原始数据类型(基本数据类型):(只有这五种) 1.number:数字…