DeepStream中,获得并修改识别对象参数的代码

简介: DeepStream中,获得并修改识别对象参数的代码

增加一个探头

GstElement* osd_sink_pad = gst_element_get_static_pad (osd, "sink");
gst_pad_add_probe (osd_sink_pad, GST_PAD_PROBE_TYPE_BUFFER,
        osd_sink_pad_buffer_probe, NULL, NULL);

实现osd_sink_pad_buffer_probe函数

 可以设置的信息有:


 识别对象的Bounding Box,边框、背景色等等;


 识别对象的文字标签(字体、颜色、标示框);


 吾这里都设置为半透明,显得很高档。


static GstPadProbeReturn osd_sink_pad_buffer_probe (GstPad * pad, GstPadProbeInfo * probe_info, gpointer u_data)
{
    GstBuffer *buf = (GstBuffer *) probe_info->data;
    NvDsFrameMeta *frame_meta    = NULL;
    NvOSD_TextParams *text_params= NULL;
    NvOSD_RectParams *rect_params= NULL;
    NvDsObjectParams *obj_meta   = NULL;
    static GQuark _nvdsmeta_quark = 0;
    if (!_nvdsmeta_quark)
    {
        //g_quark_to_string
        _nvdsmeta_quark = g_quark_from_static_string (NVDS_META_STRING);
    }
    while ((gst_meta = gst_buffer_iterate_meta (buf, &state)))
    {
        if (!gst_meta_api_type_has_tag (gst_meta->info->api, _nvdsmeta_quark))
        {
            continue;
        }
        nvdsmeta = (NvDsMeta *) gst_meta;
        /* 只对解析类型的元感兴趣。 */
        if (nvdsmeta->meta_type != NVDS_META_FRAME_INFO)
        {
            continue;
        }
        frame_meta = (NvDsFrameMeta *) nvdsmeta->meta_data;
        if (frame_meta == NULL)
        {
            return GST_PAD_PROBE_OK;
        }
        frame_meta->num_strings = 0;
        num_rects = frame_meta->num_rects;
        for (rect_index = 0; rect_index < num_rects; rect_index++)
        {
            /* 现在,使用上述信息,构造一个用于显示在边界框顶端的字串,在这里构造。*/
            obj_meta = (NvDsObjectParams *) & frame_meta->obj_params[rect_index];
            rect_params = &(obj_meta->rect_params);
            if (rect_params)
            {
                rect_params->has_bg_color       = 1;
                rect_params->bg_color.red       = 0.5;
                rect_params->bg_color.green     = 0.0;
                rect_params->bg_color.blue      = 0.0;
                rect_params->bg_color.alpha     = 0.3;
                rect_params->border_color.red   = 1.0;
                rect_params->border_color.green = 1.0;
                rect_params->border_color.blue  = 0.0;
                rect_params->border_color.alpha = 1.0;
          }
          text_params = &(obj_meta->text_params);
          /* 丢弃管线的字串。测试表明一直为空。 */
          if (text_params->display_text)
          {
            g_free (text_params->display_text);
          }
          text_params->display_text = g_malloc0 (MAX_DISPLAY_LEN);
          g_snprintf (text_params->display_text, MAX_DISPLAY_LEN, "%02d-%s",
              rect_index, pgie_classes_str[obj_meta->class_id]);
          /* 设置字串显示效果 */
          text_params->x_offset = obj_meta->rect_params.left;
          text_params->y_offset = obj_meta->rect_params.top - 25;
          /* Font , font-color and font-size */
          text_params->font_params.font_name        = "Arial";
          text_params->font_params.font_size        = 12;
          text_params->font_params.font_color.red   = 1.0;
          text_params->font_params.font_color.green = 1.0;
          text_params->font_params.font_color.blue  = 1.0;
          text_params->font_params.font_color.alpha = 1.0;
          /* Text background color */
          text_params->set_bg_clr        = 1;
          text_params->text_bg_clr.red   = 0.0;
          text_params->text_bg_clr.green = 0.0;
          text_params->text_bg_clr.blue  = 0.5;
          text_params->text_bg_clr.alpha = 0.3;
          frame_meta->num_strings++;
      }
  }
    return GST_PAD_PROBE_OK;
}

目录
相关文章
|
10月前
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
523 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
9月前
|
存储 人工智能 API
使用CAMEL框架和Qwen模型自动进行数据获取及报告与知识图谱生成
此笔记本演示如何设置和利用 CAMEL 的检索增强生成(RAG)结合 Milvus 进行高效的网页抓取、多智能体角色扮演任务和知识图谱构建。我们将通过一个使用 Qwen 模型对 2024 年巴黎奥运会的土耳其射手进行全面研究的例子来逐步演示。
|
11月前
|
机器学习/深度学习 数据可视化 自动驾驶
YOLO11-seg分割如何训练自己的数据集(道路缺陷)
本文介绍了如何使用自己的道路缺陷数据集训练YOLOv11-seg模型,涵盖数据集准备、模型配置、训练过程及结果可视化。数据集包含4029张图像,分为训练、验证和测试集。训练后,模型在Mask mAP50指标上达到0.673,展示了良好的分割性能。
4502 4
|
编解码 开发工具 Android开发
rtmp/rtsp直播播放器选择
相信大家在做rtmp、rtsp直播的时候,最大的困惑就是选个靠谱的播放器,直播的延迟,一定意义上说,90%的取决于播放器的好坏。
403 0
|
JavaScript 前端开发 C++
如何理解 QML_ELEMENT QML_SINGLETON staic Foo *create(QQmlEngine *, QJSEngine *){return s instance; }
如何理解 QML_ELEMENT QML_SINGLETON staic Foo *create(QQmlEngine *, QJSEngine *){return s instance; }
173 2
|
机器学习/深度学习 编解码 文字识别
【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】
【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】
|
前端开发 C# 开发工具
在winform中使用blazor hybrid构建页面
在winform中使用blazor hybrid构建页面
314 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园失物招领网站的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园失物招领网站的详细设计和实现(源码+lw+部署文档+讲解等)
165 0
|
Python
【nvidia jetson xavier】Deepstream 自定义检测Yolo v5模型吞吐量测试
【nvidia jetson xavier】Deepstream 自定义检测Yolo v5模型吞吐量测试
765 0