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…

spring启动流程

【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)_实例化bean和初始化bean-CSDN博客

js中new FormData对象的作用

一、js FormData方法介绍 1. 概述 FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利。 2. 构造函数 创建一个formData对象实例有几种方式: 1、创建一个空…

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

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

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

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

【Sublime详解】mac最好用的编辑器-配置-插件- Alignment-费元星

######################## 先同步下自己用了8年多的配置: mac 打开配置快捷键:command, 逗号 // Settings in here override those in "Default/Preferences.sublime-settings", // and are overridden in turn by syntax-specific setti…

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

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

ABR 车路协同场景

#include <iostream> #include <sstream> #include <vector> #include <regex> #include <string> using namespace std; int main() { // 创建一个字符串&#xff0c;用于存储输入 string input; // 从标准输入读取一行 get…

原 Excel 文件中的偶数行替换成对应上下两行的平均值

实现代码 import openpyxl# 打开Excel文件 input_file input.xlsx output_file input3.xlsx wb openpyxl.load_workbook(input_file) output_wb openpyxl.Workbook()# 处理每个工作表 for sheet_name in wb.sheetnames:sheet wb[sheet_name]# 新建一个工作表&#xff0c;…

14-pyspark的DataFrame使用总结

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

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

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

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

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

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

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

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

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

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

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

24/04/11总结

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