qtioverlay
Draw overlay on NV12/NV21.
Overview
高通的qtioverlay插件可以在YUV(NV12/NV21)图片帧上绘制RGB和YUV,它支持在YUV帧顶层绘制静态纹理图,回归边框,用户自定义文本和日期/时间,qtioverlay具备以下特性:
YUV帧可以来自于摄像头视频流或视频文件的解码;
绘制信息可以是机器学习算法输出的Metadata或直接使用GST Propertie来设置的用户自定义文本;
Machine Learning Metadata支持检测、分割、分类和拍照定位等算法输出;
一个metadata关联一个overlay item,支持同时绘制多个不同类型overlay item,metadata的个数没有上限,但数量过多会影响性能;
检测算法的metadata数据结构被设计为bbox和label信息;
分类算法的metada数据结构则仅有label和confidence信息(分类结果通常作为检测结果的一部分,即分类的数据结构为检测的数据结构结构体的一个成员);
支持overlay图片的格式为RGBA;
日期/时间和用户自定义文本内容只能通过设置GST Properties的方式来实现,也即这部分信息将和GST Pipeline绑定,一旦pipeline初始化完毕就无法改变。
qtioverlay插件源码地址:qtioverlay
例程地址:qtioverlay-example
Properties
name:qtioverlay的name。qos:时间服务质量。overlay-text:用户自定义文本字符串。overlay-data:overlay日期字符串。bbox-color:overlay ML Metadata回归边框的颜色,RGBA(32位无符号数),默认为0x0000CCFF。date-color:overlay日期颜色,RGBA(32位无符号数),默认为0xFF0000FF。text-color:用户自定义文本颜色,RGBA(32位无符号数),默认为0xFFFF00FF。pose-color:overlay ML Metadata PostNet Type的颜色,RGBA(32位无符号数),默认为0x33CC00FF。
以上都是qtioverlay的GST Properties,一旦设置就与pipeline绑定,无法动态修改,并不适合开发使用,因此在开发中更多使用的是ML Metadata来完成绘制信息的传递。
Develop Guide
qtioverlay所依赖的库主要有两个qtimlmeta和qmmf_overlay,libqtimlmeta.so为ML Metadata的实现,libqmmf_overlay.so为绘制的实现。
qtimlmeta
GstMLDetactionMeta
GstClassificationResult
gst_buffer_add_detection_meta()
资源回收
GstMeta将随着GstBuffer的释放而自动释放,因此这部分资源的释放不需要用户来手动操作。
ML Metadata
qtiverlay
在gst_overlay_apply_bbox_item中最终使用gstoverlay->overlay的成员函数CreateOverlayItem和EnableOverlayItem进行绘图,这部分的实现在qmmf_overlay中的
增加meta-color属性
在_GstMLDetectionMeta结构体中增加一个guint类型的32位无符号整型变量bbox_color用于表示qtipverlay颜色所需的RGBA值,在gstqtioverlay.cc也即qtioverlay的源码中增加一个gboolean类型的meta-color变量用于判断是使用bbox-color属性设置的固定边框颜色还是从ML Metadata中取颜色值动态改变边框颜色。
增加meta-thick属性
在gstoverlay中gst_overlay_apply_ml_bbox_item调用gst_overlay_apply_bbox_item完成bbox item的绘制,:
可以看到在整个流程中流没有关于绘制线条thick有关的参数,而最终的绘制工作交给了C2D来完成:
这部分使用了动态库的显示调用,高通并没有开源C2D的源码,我在整个overlay相关的源码中都没有找到thick相关的参数,我原以为会开发一个宏定义,但是并没有,因此这部分调查告一段落。
在实际使用过程中,如果是绘制一直变化的bbox_info,绘制效果是能够接受的;但是测试过如果一直画同一个bbox_inffo,透明度会比较差,整个颜色比较淡。
后记:关于qtioverlay的介绍至此就结束了,插件或多或少有一些缺陷,开发也不可避免要妥协。好在尝试解决问题的过程始终是有趣的,但是还是希望高通能够更好的维护和完善自家平台的工具,让开发者有更好的开发体验。
Last updated
Was this helpful?