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


目录
相关文章
|
5月前
|
数据库连接 数据库
实现加载驱动、得到数据库对象、关闭资源的代码复用,将代码提取到相应的工具包里边。优化程序
该博客文章展示了如何通过创建工具类`Connectiontools`实现数据库连接、语句执行以及资源关闭的代码复用,以优化程序并提高数据库操作的效率和安全性。
|
6月前
|
JSON 文字识别 数据格式
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
|
6月前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
8月前
|
存储 算法 C语言
【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式
【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式
261 0
|
8月前
|
机器学习/深度学习 自然语言处理
代码识别模型有哪些
代码识别模型有哪些
128 1
|
8月前
|
自然语言处理 数据挖掘 Java
20源代码模型的数据增强方法:克隆检测、缺陷检测和修复、代码摘要、代码搜索、代码补全、代码翻译、代码问答、问题分类、方法名称预测和类型预测对论文进行分组【网安AIGC专题11.15】
20源代码模型的数据增强方法:克隆检测、缺陷检测和修复、代码摘要、代码搜索、代码补全、代码翻译、代码问答、问题分类、方法名称预测和类型预测对论文进行分组【网安AIGC专题11.15】
315 0
|
自然语言处理 API 数据处理
面向低资源和增量类型的命名实体识别挑战赛PaddleNLP解决方案
面向低资源和增量类型的命名实体识别挑战赛PaddleNLP解决方案
107 0
第4章 MATLAB编程基础——4.6 M文件中变量的检测与传递
第4章 MATLAB编程基础——4.6 M文件中变量的检测与传递
|
传感器 IDE 程序员
Python 代码智能感知 —— 类型标注与特殊的注释(所有人都需要知道)
Python 代码智能感知 —— 类型标注与特殊的注释(所有人都需要知道)
254 0
|
存储 自然语言处理 编译器
程序环境和预处理(基本定义与实例使用)
程序环境和预处理(基本定义与实例使用)
109 0
程序环境和预处理(基本定义与实例使用)