智能视频处理软件V1.0开发参考
前言
本文为使用智能视频处理软件进行开发的程序员而写,目的是供您在开发过程中查阅智能视频处理软件开发包的各种参考信息,包括API、头文件、错误码等。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
系统概述
概述
智能视频处理软件(Intelligent Video Process,简称IVP)可支持智能应用软件快速开发。该软件包直接提供API接口用于检测和识别应用的快速集成开发。
该平台支持应用软件快速开发以下功能:
- 目标检测:人脸、人形、车辆、宠物、头肩、非机动车检测等。
- 视觉结构化识别:人脸抓拍、车牌识别。
系统架构
IVP平台的典型系统层次如图1所示,主要分为以下层次:
- SDK层:SDK提供的芯片相关的硬件处理层。
- 智能视频处理层:基于SDK层控制芯片完成相应的视频处理任务。
- 应用层:基于智能视频处理层,由用户开发的智能应用软件系统。

智能视频处理软件架构
智能视频处理软件主要数据处理流程如图1所示,主要分为目标检测(AiDetect)和视觉结构化识别(AiVsr)。主要的处理流程介绍如下:
- AiDetect接收SDK媒体处理平台(MPP)输出的视频帧,输出目标位置信息,该结果可以直接用于周界,告警,客流统计等智能应用,或者传入AiVsr作进一步的结构化识别。
- AiVsr接收SDK媒体处理平台(MPP)输出的视频帧,和AiDetect输出的目标位置信息,输出人脸抓拍或者车牌识别的结构化信息。

AiDetect
概述
本文档所涉及的接口是一套完整的AI算法检测接口,用户基于AiDetect API可以快速开发检测应用,您在开发过程中可查阅AiDetect API支持的各种参考信息,包括API、头文件、错误码等。
功能描述
重要概念
-
通道(channel)
用户在调用AiDetect API时,需要传入对应的通道号,用于表示不同的算法分析任务。
-
检测(detect)
AiDetect API通过对视频中画面中存在的目标(如人脸、人形、机动车等)进行检测,并获取该类目标在图像中的坐标。
-
跟踪(track)
AiDetect API内部会基于对已检测到的目标进行跟踪,需要该目标在画面中连续出现。当目标离开画面后,跟踪会断开。
-
运动判断(motion detect)
AiDetect API内部会基于对已跟踪到的目标进行运动判断,输出目标的运动状态(静止/运动)。
-
模型(model)
模型是针对一系列目标数据进行建模后的产物,AiDetect API内部检测流程依赖模型的检测能力。
-
帧率(frame_rate)
AiDetect API内部会计算最近1秒内的检测帧率、平均帧率,单位是fps,即每秒能分析多少帧。
功能介绍
-
支持场景:
- 室内:家居、办公室、楼道、商场、室内停车场等。
- 室外:园区、小区、露天停车场、广场、街道、野外、景区、交通路口等。
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标角度:建议1.5~2米 俯角15度拍摄;2米以上俯角30度拍摄。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
-
目标遮挡:
- 上下遮挡小于50%,露出头肩。
- 人体:支持上下遮挡少于40%(至少露出头+胸部),左右遮挡少于50%。人体不支持横躺、趴着。
- 车辆:支持遮挡小于66%,至少露出车轮
-
目标大小(1080p分辨率且符合遮挡规格的情况下):
- 最小人形像素大小:40x80
- 最大人形像素大小:800x800
- 最小车辆像素大小:80x80
- 最大车辆像素大小:800x800
-
支持光照:正常光照、低照、红外、WDR。
-
支持场景:
- 室内:家居、办公室、楼道、商场、室内停车场等。
- 室外:园区、小区、露天停车场、广场、街道、野外、景区、交通路口等。
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
-
目标遮挡:
- 上下遮挡小于50%,露出头肩。
- 人脸:支持上下遮挡少于50%(至少露出眼睛、鼻子),左右遮挡少于50%(半边脸)。
- 人体:支持上下遮挡少于40%(至少露出头+胸部),左右遮挡少于50%。人体不支持横躺、趴着。
- 车辆:支持遮挡小于66%,至少露出车轮。
-
目标大小(1080p分辨率且符合遮挡规格的情况下):
- 最小人脸像素大小:40x80
- 最大人脸像素大小:800x800
- 最小人形像素大小:40x80
- 最大人形像素大小:800x800
- 最小车辆像素大小:80x80
- 最大车辆像素大小:800x800
-
支持光照:正常光照、低照、红外、WDR。
-
支持场景:
- 室内场景。
- 室外:工业园区、城市公园、农村关键路口、户外鱼塘/养殖场/果园等。
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
-
目标状态:
-
人形车形
- 室内场景:3~35米。
- 室外无光:3~15米。
- 室外有光:3~35米。
-
人脸
室内&室外:3~15米。
-
-
目标遮挡:
- 上下遮挡小于50%,露出头肩。
- 人脸:支持上下遮挡少于50%(至少露出眼睛、鼻子),左右遮挡少于50%(半边脸)。
- 人体:支持上下遮挡少于40%(至少露出头+胸部),左右遮挡少于50%。人体不支持横躺、趴着。
- 车辆:支持遮挡小于66%,至少露出车轮。
-
支持光照:正常光照、低照、红外。
-
支持场景:
- 室内:家居、用于时光缩影、宠物喂食机。
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标状态:0.5~5米内。
-
目标遮挡:无遮挡。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
-
目标大小(1080p分辨率且符合遮挡规格的情况下):
- 最小宠物像素大小:60x60
- 最大宠物像素大小:800x800
-
支持光照:白天、夜晚。
-
支持场景:
- 客流统计:沿街店铺、商铺等通道式场景。
- 在离岗场景:通用安保监控环境、工厂监控室、门岗及其营业场所前台。
- 区域人数统计:以头/肩为识别目标,对图片中的瞬时人数进行统计。
-
使用约束:
- 目标数量:无数量限制。
- 目标状态:3.5~6米内。
-
目标遮挡:无遮挡。
-
支持场景:
- 楼道、公共违停区域。
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
- 目标状态:
- 公共违停区域:4~10米内。
-
目标遮挡:无遮挡。
- 支持光照:白天、夜晚
-
支持场景:
- 梯控场景。
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
- 目标状态:
- 梯控:电梯内拍摄。
-
目标遮挡:无遮挡。
- 支持光照:正常光照
-
支持场景:
- 门铃门禁场景,小区监控等
-
使用约束:
- 目标数量:检测、跟踪每个种类的目标个数推荐不超过10。
- 目标速度:为保证跟踪ID连续性,连续两帧之间不能目标/相机运动过快或者反向运动导致两帧没有重合部分。
-
目标遮挡:无遮挡。
-
目标大小(1080p分辨率且符合遮挡规格的情况下):
- 最小像素大小:130x130
- 最大像素大小:800x800
-
支持光照:白天、夜晚
使用流程
AiDetect API处理数据流如图1所示,用户通过VPSS获取离线微缩图片送给AiDetect模块进行分析,并输出对应的结果。

用户通过调用AiDetect API创建通道成功后,将数据流送入对应的通道,数据流使用NV21格式,输入图像的分辨率可从ss_mpi_aidetect_get_model_info获取,分析过程可通过ss_mpi_aidetect_set_chn_attr接口配置是否开启跟踪,分析完成后可以通过设置对应的目标类别来获取该目标的信息,如检测坐标、置信度、跟踪信息等,常规调用流程如图2所示。

API参考
AiDetect API提供以下API:
- ss_mpi_aidetect_create_chn:创建检测通道并设置通道的属性参数,通道的属性包含是否开启跟踪以及是否开启运动检测。
- ss_mpi_aidetect_destroy_chn:销毁当前通道。
- ss_mpi_aidetect_set_chn_attr:设置通道属性,包括通道对应模型的检测分类是否开启跟踪及运动状态检测,可动态配置。
- ss_mpi_aidetect_get_chn_attr:获取通道属性,包括当前通道内的模型对应检测分类是否开启跟踪及运动检测。
- ss_mpi_aidetect_set_chn_param:设置通道参数,包括当前通道对应模型的分类阈值、模型执行的优先级,可动态配置。
- ss_mpi_aidetect_get_chn_param:获取通道参数,包括当前通道对应模型的阈值,模型执行的优先级。
- ss_mpi_aidetect_get_model_info:获取模型相关信息,包括当前通道模型输入分辨率以及模型支持的检测类型。
- ss_mpi_aidetect_process:算法分析处理,输入帧和通道,得到检测、跟踪结果。
- ss_mpi_aidetect_set_log_level:设置日志输出级别,可动态配置。
- ss_mpi_aidetect_get_log_level:获取当前日志级别,默认为0。
-
ss_mpi_aidetect_query_status:获取当前通道状态。
须知: 用户调用本模块API编译可执行程序时需要额外链接sdk基础版本的库: libsvp_acl.so, libss_mpi_cipher.so, libss_mpi_ive.so, libot_osal.so,libss_ivs_md.so。
ss_mpi_aidetect_create_chn
【描述】
创建检测通道并设置通道的属性参数,通道的属性包含是否开启跟踪以及运动检测相关参数。
【语法】
td_s32 ss_mpi_aidetect_create_chn(ot_aidetect_chn chn, const ot_aidetect_input_model *input_model, const ot_aidetect_chn_attr *chn_attr);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- 该接口和ss_mpi_aidetect_destroy_chn配套使用。
- chn必须是尚未创建的通道号,否则返回错误。
- 通道属性中的 track_class_num、class_type取值范围请参考ot_aidetect_threshold中的注意事项。
- 如果通过输入模型内存方式创建通道,在通道成功创建后即可释放。
- 内存敏感场景,推荐使用输入模型路径的方式。
- 在调用该接口之前,请确保ot_cipher.ko已被正确加载。
- 在调用该接口之前,请确保ss_mpi_sys_init已被成功调用。
- 首次调用该接口会同步初始化ivsmd模块及创建ivsmd通道,多个aidetect chn只会创建并复用一个ivsmd通道。
【举例】
无。
【相关主题】
ss_mpi_aidetect_destroy_chn
【描述】
销毁当前通道。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 销毁最后的通道会同步去初始化ivsmd及销毁已创建的ivsmd通道。
【举例】
无。
【相关主题】
ss_mpi_aidetect_set_chn_attr
【描述】
设置通道属性,包括通道对应模型的检测分类是否开启跟踪及运动状态检测,可动态配置。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 通道属性中的track_class_num、motion_detect_class_num取值范围参考ot_aidetect_chn_attr。
【举例】
无。
【相关主题】
ss_mpi_aidetect_get_chn_attr
【描述】
获取通道属性,包括当前通道内的模型对应检测分类是否开启跟踪及运动检测。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 通道参数中的track_class_num为0,则代表默认查看所有种类是否开启跟踪。
- 通道参数中的motion_detect_class_num为0,则代表默认查看所有种类是否开启运动检测。
【举例】
无。
【相关主题】
ss_mpi_aidetect_set_chn_param
【描述】
设置通道参数,包括当前通道对应模型的分类阈值、模型执行的优先级,可动态配置。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 通道参数中的detect_threshold_num、class_type取值范围参考ot_aidetect_threshold中的注意事项。
- 通道参数中的track_miss_frame_num为0,则代表使用默认跟踪参数,如果大于0,则代表使用该变量的值。默认参数见ot_aidetect_track。
- 非机动车模型的检测类型之间共享跟踪属性。检测类型同时开启或关闭跟踪,并共用一个track_miss_frame_num值。比如单独开启自行车跟踪,电瓶车也会自动开启跟踪。
【举例】
无。
【相关主题】
ss_mpi_aidetect_get_chn_param
【描述】
获取通道参数,包括当前通道对应模型的阈值,模型执行的优先级。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 通道参数中的detect_threshold_num为0,则代表默认查看所有种类的阈值信息和模型优先级。
【举例】
无。
【相关主题】
ss_mpi_aidetect_get_model_info
【描述】
获取模型相关信息,包括当前通道模型输入分辨率以及模型支持的检测类型。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
【举例】
无。
【相关主题】
无。
ss_mpi_aidetect_process
【描述】
算法分析处理,输入通道、帧信息,输出检测、跟踪结果信息。
【语法】
td_s32 ss_mpi_aidetect_process(ot_aidetect_chn chn, const ot_video_frame *frame, ot_aidetect_result_array *detect_result);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 通道支持自动缩放至模型所需分辨率,但会增加处理耗时,并创建新的内存用于保存缩放后的图像。
- 输入帧的最小分辨率为80*80,最大分辨率为4096*4096。输入帧的步长(stride)需为16的倍数。
- detect_result中的class_type、object_capacity为外部输入,*objects内存需要外部开辟,object_num内部输出。
- 不支持处理压缩图像。
- 若通道未开启跟踪,除头肩模型通道输出无上限外,其余模型通道每次处理每个种类最多输出10个目标。
- 若通道开启跟踪,模型通道每个种类最多输出10个目标。
- 运动检测依赖ivsmd模块,aidetect内部会对ivsmd进行初始化,并占用1个ivsmd通道。
【举例】
无。
【相关主题】
ss_mpi_aidetect_get_model_info
ss_mpi_aidetect_set_log_level
【描述】
设置日志输出级别,可动态配置。优先级默认为0,0表示错误,1表示警告,2表示信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
设置日志级别范围不在[0,2]时会返回错误。
【举例】
无。
【相关主题】
ss_mpi_aidetect_get_log_level
【描述】
获取当前日志级别,默认为0。0表示错误,1表示警告,2表示信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
设置日志级别范围不在[0,2]时会返回错误。
【举例】
无。
【相关主题】
ss_mpi_aidetect_query_status
【描述】
获取当前通道状态,包括当前通道帧率、接收总帧数等信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
- 库文件:libss_mpi_aidetect.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aidetect_create_chn已创建的通道号,否则返回错误。
- 输出参数中的avg_frame_rate,为当前通道接收的总帧数和总耗时的比值。
- 输出参数中的frame_rate,为当前通道中,最近1秒的帧率。
【举例】
无。
【相关主题】
数据类型和数据结构
相关数据类型、数据结构定义如下:
- OT_AIDETECT_MAX_CHN_NUM:定义AiDetect API输入通道数的最大值。
- ot_aidetect_chn:定义通道号。
- ot_aidetect_priority:定义模型执行的优先级相关参数。
- ot_aidetect_track_status:定义目标跟踪的状态。
- ot_aidetect_class:定义模型支持的检测目标类型。
- ot_aidetect_model_info:定义检测模型相关信息。
- ot_aidetect_track:定义单类目标跟踪使能。
- ot_aidetect_chn_attr:定义通道属性信息。
- ot_aidetect_threshold:定义模型所支持的类别的阈值。
- ot_aidetect_chn_param:定义通道参数。
- ot_aidetect_object:定义单个目标检测、跟踪结果。
- ot_aidetect_object_of_one_class:定义单类目标算法分析的结果。
- ot_aidetect_result_array:定义算法分析的结果。
- ot_aidetect_model_load_mode:定义模型加载方式。
- ot_aidetect_input_model:定义输入模型信息。
- ot_aidetect_chn_status:定义当前通道状态信息。
OT_AIDETECT_MAX_CHN_NUM
【说明】
定义AiDetect API输入通道数的最大值。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_chn
【说明】
定义通道号,范围:[0,7]。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aidetect_priority
【说明】
定义模型执行的优先级相关参数。
【定义】
typedef struct {
td_bool preemp_en;
td_u32 priority;
td_u32 priority_up_step_timeout;
td_u32 priority_up_top_timeout;
} ot_aidetect_priority;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_track_status
【说明】
定义目标跟踪的状态。
【定义】
typedef enum {
OT_AIDETECT_TRACK_STATUS_NEW = 0x0,
OT_AIDETECT_TRACK_STATUS_UPDATE,
OT_AIDETECT_TRACK_STATUS_DIE,
OT_AIDETECT_TRACK_STATUS_INVALID,
OT_AIDETECT_TRACK_STATUS_BUTT,
} ot_aidetect_track_status;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aidetect_motion_status
【说明】
定义目标运动状态。
【定义】
typedef enum {
OT_AIDETECT_MD_STATUS_STILL = 0x0,
OT_AIDETECT_MD_STATUS_MOTION,
OT_AIDETECT_MD_STATUS_INVALID,
OT_AIDETECT_MD_STATUS_BUTT,
} ot_aidetect_motion_status;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aidetect_class
【说明】
定义模型支持的检测目标类型。
【定义】
typedef enum {
OT_AIDETECT_CLASS_FACE = 0x0,
OT_AIDETECT_CLASS_HUMAN,
OT_AIDETECT_CLASS_VEHICLE,
OT_AIDETECT_CLASS_PET,
OT_AIDETECT_CLASS_GARBAGE,
OT_AIDETECT_CLASS_BAG,
OT_AIDETECT_CLASS_WALLET,
OT_AIDETECT_CLASS_PHONE,
OT_AIDETECT_CLASS_HEAD_SHOULDER,
OT_AIDETECT_CLASS_BICYCLE,
OT_AIDETECT_CLASS_MOTORCYCLE,
OT_AIDETECT_CLASS_PACKAGE,
OT_AIDETECT_CLASS_BUTT,
} ot_aidetect_class;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aidetect_model_info
【说明】
定义检测模型相关信息。
【定义】
typedef struct {
ot_size size;
td_u32 class_num;
ot_aidetect_class classes[OT_AIDETECT_CLASS_BUTT];
} ot_aidetect_model_info;
【成员】
classes[OT_AIDETECT_CLASS_BUTT] |
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_track
【说明】
定义单类目标跟踪使能。
【定义】
【成员】
【注意事项】
- 跟踪策略:画面中首次出现对应目标并检测到该目标后,会进入跟踪流程,首次跟踪上会产生OT_AIDETECT_TRACK_STATUS_NEW的跟踪状态,目标仍在画面中时,该状态会变为OT_AIDETECT_TRACK_STATUS_UPDATE,当该目标从画面中连续消失N(N的值参考下表)帧后,跟踪状态会断开,状态变成OT_AIDETECT_TRACK_STATUS_DIE。如该目标再出现则会变为OT_AIDETECT_TRACK_STATUS_NEW。
- 推荐(默认)目标连续消失帧数详见ot_aidetect_threshold中的注意事项
【相关数据类型及接口】
ot_aidetect_md
【说明】
定义单类目标运动使能。
【定义】
typedef struct {
ot_aidetect_class class_type;
td_bool md_en;
td_float md_motion2StillThresh;
td_float md_still2MotionThresh;
} ot_aidetect_md;
【成员】
【注意事项】
- 运动检测策略:运动检测必须依赖跟踪使能,请确保在使用运动前对应类别目标已开启跟踪,md_motion2StillThresh和md_still2MotionThresh阈值越高,对运动越敏感。
- 当前仅支持人、车类别的运动检测,其他类别设置后运动状态不生效。
【相关数据类型及接口】
ot_aidetect_chn_attr
【说明】
定义通道属性信息。
【定义】
typedef struct {
td_u32 track_class_num;
ot_aidetect_track track_class_attr[OT_AIDETECT_CLASS_BUTT];
td_u32 motion_detect_class_num;
ot_aidetect_md motion_class_attr[OT_AIDETECT_CLASS_BUTT];
} ot_aidetect_chn_attr;
【成员】
track_class_attr[OT_AIDETECT_CLASS_BUTT] |
|
motion_class_attr[OT_AIDETECT_CLASS_BUTT] |
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_threshold
【说明】
定义模型所支持的类别的阈值。
【定义】
typedef struct {
ot_aidetect_class class_type;
td_float detect_threshold;
td_u32 track_miss_frame_num;
} ot_aidetect_threshold;
【成员】
【注意事项】
下方表格中的阈值设置越大,对应目标漏检越多,误检越少;反之,漏检越少,误检越多。
模型对应目标的信息和当前推荐阈值&目标连续消失帧数:
【相关数据类型及接口】
ot_aidetect_chn_param
【说明】
定义通道参数。
【定义】
typedef struct {
td_u32 detect_threshold_num;
ot_aidetect_threshold detect_threshold[OT_AIDETECT_CLASS_BUTT];
ot_aidetect_priority model_priority;
} ot_aidetect_chn_param;
【成员】
detect_threshold[OT_AIDETECT_CLASS_BUTT] |
|
【注意事项】
无。
【相关数据类型及接口】
- ss_mpi_aidetect_set_chn_param
- ss_mpi_aidetect_get_chn_param
- ot_aidetect_threshold
- ot_aidetect_priority
ot_aidetect_object
【说明】
定义单个目标检测、跟踪结果。
【定义】
typedef struct {
ot_rect detect_rect;
td_float detect_confidence;
td_u32 track_id;
ot_aidetect_track_status track_status;
ot_aidetect_motion_status motion_status;
} ot_aidetect_object;
【成员】
【注意事项】
输出参数detect_confidence会向下取整到最近的十分位,如0.67会保留到0.65。如果置信度低于0.5,直接返回-1。
【相关数据类型及接口】
ot_aidetect_object_of_one_class
【说明】
定义单类目标算法分析的结果。
【定义】
typedef struct {
ot_aidetect_class class_type;
td_u32 object_num;
td_u32 object_capacity;
ot_aidetect_object *objects;
} ot_aidetect_object_of_one_class;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_result_array
【说明】
定义算法分析的结果。
【定义】
typedef struct {
td_u32 class_num;
ot_aidetect_object_of_one_class object_class[OT_AIDETECT_CLASS_BUTT];
} ot_aidetect_result_array;
【成员】
object_class[OT_AIDETECT_CLASS_BUTT] |
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_model_load_mode
【说明】
定义模型加载方式。
【定义】
typedef enum {
OT_AIDETECT_MODEL_LOAD_FROM_MEMORY = 0x0,
OT_AIDETECT_MODEL_LOAD_FROM_PATH,
OT_AIDETECT_MODEL_LOAD_BUTT,
} ot_aidetect_model_load_mode;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_aidetect_input_model
【说明】
定义输入模型信息。
【定义】
typedef struct {
ot_aidetect_model_load_mode model_load_mode;
td_u32 size;
td_void *model;
} ot_aidetect_input_model;
【成员】
|
|
【注意事项】
无。
【相关数据类型及接口】
ot_aidetect_chn_status
【说明】
定义当前通道状态信息。
【定义】
typedef struct {
td_u32 frame_rate;
td_u32 avg_frame_rate;
td_u32 recv_frames;
} ot_aidetect_chn_status;
【成员】
【注意事项】
- 当前帧率为最近1秒内的帧率,即最近1s内分析了多少帧。
- 平均帧率为整个分析流程的总帧数和总耗时的比值。
【相关数据类型及接口】
错误码
AiDetect API错误码如表1所示。
表 1 AiDetect API错误码
模型列表
【注意事项】
- 以下性能统计以Hi3516CV610-20S型号为例并作为参考。
- 输入图像以sample中的图像为例。
- MMZ内存统计不包含图片输入。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
AiVsr
概述
本文档所涉及的接口是一套完整的AI算法检测接口,用户基于AiVsr API(AI Vision Structured Recognition API,AI视觉结构化识别接口)可以快速开发人脸抓拍、车牌识别和人脸识别应用,您在开发过程中可查阅AiVsr API支持的各种参考信息,包括API、头文件、错误码等。
功能描述
重要概念
-
通道(channel)
用户在调用AiVsr API时,需要传入对应的通道号,用于表示不同的算法分析任务,一个通道只能运行一种任务类型。
-
人脸抓拍(face_capture)
AiVsr API通过对视频中检测到的人脸信息进行分析,提供人脸质量和角度等属性信息。
-
车牌识别(vlpr)
AiVsr API通过对视频中检测到的车辆信息进行分析,提供识别到的车辆属性,车牌属性以及车牌号码。
-
人脸识别(fr)
AiVsr API通过对视频中检测到的人脸信息进行分析,提供人脸特征向量信息。
功能介绍
-
支持场景:
- 室内:家居、办公室、楼道、室内停车场等。
- 室外:园区、街道等。
-
使用约束:
- 目标数量:人脸属性分析的目标个数上限是OT_FACE_CAPTURE_MAX_OUTPUT_NUM。
- 目标角度:建议参考高度2.2-3m俯角拍摄;抓拍距离3.5-6m。
-
目标姿态:
人脸:支持上下遮挡少于50%(至少露出眼睛、鼻子),左右遮挡少于50%(半边脸)。
-
目标大小:1080p分辨率下
- 最小人脸像素大小:40*40
- 最大人脸像素大小:400*400(人形在符合遮挡规格的约束下)
-
支持光照:正常光照、低照。
-
支持场景:
- 乡村道路,乡村主要路口。
- 小区出入口,乡村停车场出入口。
-
使用约束:
- 目标数量:车牌目标个数上限是OT_VLPR_MAX_OUTPUT_NUM。
- 目标角度:乡村道路,乡村主要路口参考高度3.5~5米,摄像机垂直角度10~30度,水平角度10~15度;小区出入口,乡村停车场出入口参考高度1.2~2米,摄像机垂直角度10~30度,水平角度10~15度。
-
目标遮挡:车牌无遮挡。
-
目标大小:1080p分辨率下
- 最小车辆像素大小30*40
- 最大车辆像素大小800*800
-
支持光照:正常光照、低照。
-
支持场景:
室内:家居、楼道等。
-
使用约束:
- 目标数量:人脸属性分析的目标个数上限是OT_FR_MAX_OUTPUT_NUM。
- 目标角度:建议参考高度2.2-3m俯角拍摄。
-
目标姿态:
人脸:支持遮挡少于30%。
-
目标大小:1080p分辨率下,瞳距大于20像素人脸。
- 支持光照:正常光照。
- 模糊程度:单帧检测物较清晰,肉眼可清晰辨识轮廓,人脸可辨识五官。
使用流程
AiVsr API处理参考数据流如图1所示,用户通过VPSS获取离线微缩图片送给AiDetect模块进行分析,获取检测结果,将检测结果送给AiVsr模块进行分析,获取AiVsr分析结果。

用户通过调用AiVsr API创建通道成功后,将数据流送入对应的通道,数据流使用NV21格式,建议输入图像分辨率为1920*1080,输入AiVsr图像分辨率与AiDetect输入图像分辨率无硬性要求一致,若与AiDetect输入图像分辨率不一致,需对AiDetect检测到的检测框按分辨率做相应的缩放处理,保证在输入分辨率图像下检测框正确。分析过程可通过ss_mpi_aivsr_set_chn_attr接口配置人脸抓拍或车牌识别功能及各自的通道属性参数,通过ss_mpi_aivsr_set_chn_param接口配置任务的通道参数,分析完成后可获取满足条件的结果信息,同步调用流程如图2所示,异步调用流程如图3,其中虚框表示可选调用接口,实线框是必须要调用的接口。


API参考
AiVsr提供以下API:
- ss_mpi_aivsr_create_chn:创建aivsr通道并设置通道的属性参数。
- ss_mpi_aivsr_destroy_chn:销毁指定通道。
- ss_mpi_aivsr_set_chn_attr:设置通道属性,包括通道对应任务的属性参数,可动态配置。
- ss_mpi_aivsr_get_chn_attr:获取通道属性,包括通道的任务类型以及对应任务类型的属性参数。
- ss_mpi_aivsr_set_chn_param:设置通道参数,包括当前通道对应任务类型、模型执行的优先级,该任务类型对应的参数,可动态配置。
- ss_mpi_aivsr_get_chn_param:获取通道参数,包括当前通道对应任务类型、模型执行的优先级,该任务类型对应的参数。
- ss_mpi_aivsr_process:算法分析处理,输入通道、帧信息,检测结果、输出结构化属性识别结果。
- ss_mpi_aivsr_register_result_callback:注册结果回调函数。
- ss_mpi_aivsr_unregister_result_callback:注销结果回调函数。
-
ss_mpi_aivsr_async_process:异步算法分析处理,输入通道,帧信息,检测结果,通过结果回调函数获取结构化识别结果。
须知: 用户调用本模块API编译可执行程序时需要额外链接sdk基础版本的库:libsvp_acl.so、libss_mpi_cipher.so、libss_mpi_ive.so、libot_osal.so。
ss_mpi_aivsr_create_chn
【描述】
创建aivsr通道并设置通道的属性参数,通道的属性包含任务类别,选择人脸抓拍、车牌识别或人脸识别任务。
【语法】
td_s32 ss_mpi_aivsr_create_chn(ot_aivsr_chn chn, const ot_aivsr_input_model *input_model, const ot_aivsr_chn_attr *chn_attr);
【参数】
通道属性信息指针,不能为空,输入指定视觉结构化识别的具体任务类型,若任务类型为OT_AIVSR_TASK_FACE_CAPTURE,则需指定人脸抓拍属性参数ot_face_capture_attr,控制是否开启人脸质量和人脸姿势识别。 |
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- 该接口和ss_mpi_aivsr_destroy_chn配套使用。
- chn必须是尚未创建的通道号,否则返回错误。
- 如果通过输入模型内存方式创建通道,在通道成功创建后即可释放。
- 内存敏感场景,推荐使用输入模型路径的方式。
- 在调用该接口之前,请确保ot_cipher.ko已被正确加载。
【举例】
无。
【相关主题】
ss_mpi_aivsr_destroy_chn
【描述】
销毁指定通道。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
【举例】
无。
【相关主题】
ss_mpi_aivsr_set_chn_attr
【描述】
设置通道属性,包括通道对应任务的属性参数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
- chn_attr中的任务类型必须和ss_mpi_aivsr_create_chn已创建通道的任务类型一致,否则返回错误。
【举例】
无。
【相关主题】
ss_mpi_aivsr_get_chn_attr
【描述】
获取通道属性,包括通道的任务类型以及对应任务类型的属性参数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
【举例】
无。
【相关主题】
ss_mpi_aivsr_set_chn_param
【描述】
设置通道参数,包括当前通道对应任务类型、模型执行的优先级,该任务类型对应的参数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
- chn_param中的task_type必须和ss_mpi_aivsr_create_chn已创建通道的任务类型一致,否则返回错误。
【举例】
无。
【相关主题】
ss_mpi_aivsr_get_chn_param
【描述】
获取通道参数,包括当前通道对应任务类型、模型执行的优先级,该任务类型对应的参数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
【举例】
无。
【相关主题】
ss_mpi_aivsr_process
【描述】
算法分析处理,输入通道、帧信息,检测结果、输出结构化属性识别结果。
【语法】
td_s32 ss_mpi_aivsr_process(ot_aivsr_chn chn, const ot_video_frame *frame, const ot_aidetect_object_of_one_class *object, ot_aivsr_result_array *result);
【参数】
检测结果指针,不能为空。结构体信息定义,ot_aidetect_object_of_one_class详见 “AiDetect”章节。 |
||
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h、ot_common_aidetect.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
- 输入帧信息格式为NV21。最小分辨率为80*80,最大分辨率为4096*4096。输入帧的步长(stride)需为16的倍数。
- detect_rect的坐标需在图片分辨率之内,否则会返回错误。
- 不支持处理压缩图像。
【举例】
无。
【相关主题】
无。
ss_mpi_aivsr_register_result_callback
【描述】
注册结果回调函数。
【语法】
td_s32 ss_mpi_aivsr_register_result_callback(ot_aivsr_chn chn, const ot_aivsr_result_callback callback);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
- 人脸识别任务不支持调用此接口。
【举例】
无。
【相关主题】
ss_mpi_aivsr_unregister_result_callback
ss_mpi_aivsr_unregister_result_callback
【描述】
注销结果回调函数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
- 人脸识别任务不支持调用此接口。
【举例】
无。
【相关主题】
ss_mpi_aivsr_register_result_callback
ss_mpi_aivsr_async_process
【描述】
异步算法分析处理,输入通道,帧信息,检测结果,通过结果回调函数获取结构化识别结果。
【语法】
td_s32 ss_mpi_aivsr_async_process(ot_aivsr_chn chn, const ot_video_frame *frame, const ot_aidetect_object_of_one_class *object, td_s32 milli_sec);
【参数】
检测结果指针,不能为空。结构体信息定义,ot_aidetect_object_of_one_class详见“AiDetect”章节。 |
||
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ss_mpi_aivsr.h、ot_common_vlpr.h、ot_common_face_capture.h、ot_common_aivsr.h、ot_common_aidetect.h
- 库文件:libss_mpi_aivsr.so、libface_capture.so、libvlpr.so、libaiservice_comm.so
【注意】
- chn必须为ss_mpi_aivsr_create_chn已创建的通道号,否则返回错误。
- 输入帧信息格式为NV21。最小分辨率为80*80,最大分辨率为4096*4096。输入帧的步长(stride)需为16的倍数。
- object中detect_rect的坐标需在输入图片分辨率之内,否则会返回错误。
- 如果milli_sec设为-1,表示阻塞模式,程序一直等待,直到等待队列可以插入才返回。如果milli_sec等于0,表示非阻塞模式。如果milli_sec大于0,表示超时等待模式,参数的单位是毫秒,指超时时间,在此时间内队列仍然是满的,则超时返回。
- 如果输入图片内存是vb内存,比如从vpss获取的图像帧,则调用ss_mpi_vpss_get_chn_frame获取帧,然后调用ss_mpi_aivsr_async_process之后就可以调用ss_mpi_vpss_release_chn_frame释放帧;如果输入图片内存是MMZ内存,则需要等待进入回调函数时才能释放内存。
- 不支持处理压缩图像。
- 人脸识别任务不支持异步调用。
【举例】
无。
【相关主题】
数据类型和数据结构
相关数据类型、数据结构定义如下:
- OT_AIVSR_MAX_CHN_NUM:定义AiVsr API输入通道数的最大值。
- OT_VLPR_MAX_OUTPUT_NUM:定义车牌识别输出结果最大个数。
- OT_VLPR_LICENSE_PLATE_MAX_NUM:定义单辆车的最大车牌个数。
- OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM:定义车牌号码最大字符数。
- OT_FACE_CAPTURE_MAX_OUTPUT_NUM:定义人脸抓拍输出最大个数。
- OT_FR_MAX_OUTPUT_NUM:定义人脸识别最大输出个数。
- OT_FR_FACE_FEATURE_LEN:定义脸特征维度长度。
- ot_aivsr_result_callback:定义结果回调函数指针。
- ot_aivsr_chn:定义通道号。
- ot_aivsr_chn_attr:定义AiVsr的任务类型,及相应任务的属性参数。
- ot_aivsr_task_type:定义AiVsr任务支持的子任务类型。
- ot_face_capture_attr:人脸抓拍子任务属性,包含人脸质量和人脸姿势识别开关。
- ot_vlpr_attr:定义车牌识别子任务属性。
- ot_aivsr_chn_param:定义通道参数。
- ot_aivsr_model_priority:定义模型执行的优先级相关参数。
- ot_vlpr_param:定义车牌识别的通道参数
- ot_face_capture_param:定义人脸抓拍的通道参数。
- ot_face_pose:定义人脸姿势的偏航角、翻滚角、俯仰角。
- ot_aivsr_result_array:定义结构化识别算法分析的结果。
- ot_vlpr_result_array:定义车牌识别的分析结果。
- ot_face_capture_result_array:定义人脸抓拍的分析结果。
- ot_face_quality_result:定义人脸质量属性信息结果。
- ot_aivsr_model_load_mode:定义模型加载方式。
- ot_aivsr_input_model:定义输入模型信息。
- ot_vlpr_result_info: 定义车牌识别结果信息。
- ot_vehicle_info: 定义车辆的结果信息。
- ot_vehicle_property:定义车辆的属性信息。
- ot_vehicle_orient:定义车辆朝向。
- ot_vehicle_color:定义车辆颜色。
- ot_vehicle_category:定义车辆类型。
- ot_license_plate_info:定义车牌信息。
- ot_license_plate_property:定义车牌属性信息。
- ot_license_plate_color:定义车牌颜色。
- ot_license_plate_category:定义车牌类型。
- ot_fr_result_array:定义人脸识别结果信息。
- ot_fr_result:定义人脸识别属性信息。
- ot_fr_face_feature:定义人脸特征信息。
OT_AIVSR_MAX_CHN_NUM
【说明】
定义AiVsr API输入通道数的最大值。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
OT_VLPR_MAX_OUTPUT_NUM
【说明】
定义车牌识别输出结果最大个数。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
OT_VLPR_LICENSE_PLATE_MAX_NUM
【说明】
定义单辆车的最大车牌个数。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM
【说明】
定义车牌号码最大字符数。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
OT_FACE_CAPTURE_MAX_OUTPUT_NUM
【说明】
定义人脸抓拍输出最大个数。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
OT_FR_MAX_OUTPUT_NUM
【说明】
定义人脸识别输出最大个数。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
OT_FR_FACE_FEATURE_LEN
【说明】
定义人脸识别人脸特征维度。
【定义】
【成员】
无。
【注意事项】
无。
【相关数据类型及接口】
ot_aivsr_result_callback
【说明】
定义结果回调函数指针。
【定义】
【成员】
ss_mpi_aivsr_async_process接口处理单帧结果返回值。 |
|
【注意事项】
无。
【相关数据类型及接口】
- ss_mpi_aivsr_async_process
- ss_mpi_aivsr_register_result_callback
- ss_mpi_aivsr_unregister_result_callback
ot_aivsr_chn
【说明】
定义通道号。
【定义】
【成员】
无。
【注意事项】
范围:[0,7]
【相关数据类型及接口】
无。
ot_aivsr_chn_attr
【说明】
定义AiVsr的任务类型,及相应任务的属性参数。
【定义】
typedef struct {
ot_aivsr_task_type task_type;
td_u32 depth;
union {
ot_vlpr_attr vlpr_attr;
ot_face_capture_attr face_attr;
};
} ot_aivsr_chn_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
- ss_mpi_aivsr_create_chn
- ss_mpi_aivsr_set_chn_attr
- ss_mpi_aivsr_get_chn_attr
- ot_aivsr_task_type
- ot_vlpr_attr
- ot_face_capture_attr
ot_aivsr_task_type
【说明】
定义AiVsr任务支持的子任务类型。
【定义】
typedef enum {
OT_AIVSR_TASK_FACE_CAPTURE,
OT_AIVSR_TASK_VLPR,
OT_AIVSR_TASK_FR,
OT_AIVSR_TASK_BUTT
} ot_aivsr_task_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_face_capture_attr
【说明】
人脸抓拍子任务属性,包含人脸质量和人脸姿势识别开关。
【定义】
typedef struct {
td_bool face_quality_en;
td_bool face_pose_en;
td_bool face_mask_en;
} ot_face_capture_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_vlpr_attr
【说明】
定义车牌识别子任务属性。
【定义】
typedef struct {
td_bool vehicle_property_en;
td_bool license_plate_detect_en;
td_bool license_plate_property_en;
td_bool license_plate_recognize_en;
} ot_vlpr_attr;
【成员】
车牌属性开关,默认打开;如果license_plate_detect_en为TD_FALSE,那么license_plate_property_en也要设为TD_FALSE。 |
|
车牌识别开关,默认打开;如果license_plate_detect_en为TD_FALSE,那么license_plate_recognize_en也要设为TD_FALSE。 |
【注意事项】
无。
【相关数据类型及接口】
ot_aivsr_chn_param
【说明】
定义通道参数。
【定义】
typedef struct {
ot_aivsr_task_type task_type;
ot_aivsr_model_priority model_priority;
union {
ot_vlpr_param vlpr_param;
ot_face_capture_param face_param;
};
} ot_aivsr_chn_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
- ss_mpi_aivsr_set_chn_param
- ss_mpi_aivsr_get_chn_param
- ot_aivsr_task_type
- ot_aivsr_model_priority
- ot_vlpr_param
- ot_face_capture_param
ot_aivsr_model_priority
【说明】
定义模型执行的优先级相关参数。
【定义】
typedef struct {
td_bool preemp_en;
td_u32 priority;
td_u32 priority_up_step_timeout;
td_u32 priority_up_top_timeout;
} ot_aivsr_model_priority;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_vlpr_param
【说明】
定义车牌识别的通道参数。
【定义】
typedef struct {
td_u32 vehicle_min_width;
td_u32 license_plate_min_width;
td_float license_plate_detect_threshold;
td_float license_plate_recognize_threshold;
} ot_vlpr_param;
【成员】
车牌识别置信度阈值,取值范围:[0, 1],vsr_vlpr.bin默认阈值为0.59,vsr_vlpr_lite.bin默认阈值为0.56。 |
【注意事项】
无。
【相关数据类型及接口】
ot_face_capture_param
【说明】
定义人脸抓拍的通道参数。
【定义】
typedef struct {
td_u16 min_face_quality;
ot_face_pose max_face_pose;
td_u16 min_pupil_pixel_dist;
} ot_face_capture_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_face_pose
【说明】
定义人脸姿势的偏航角、翻滚角、俯仰角。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_aivsr_result_array
【说明】
定义结构化识别算法分析的结果。
【定义】
typedef struct {
ot_aivsr_task_type task_type;
td_u64 frame_pts;
union {
ot_vlpr_result_array vlpr_result;
ot_face_capture_result_array face_result;
ot_fr_result_array fr_result;
};
} ot_aivsr_result_array;
【成员】
【注意事项】
无。
【相关数据类型及接口】
- ss_mpi_aivsr_process
- ot_aivsr_task_type
- ot_face_quality_result
- ot_face_capture_result_array
- ot_fr_result_array
- ot_fr_result
ot_vlpr_result_array
【说明】
定义车牌识别的分析结果。
【定义】
typedef struct {
td_u32 object_num;
ot_vlpr_result_info result_info[OT_VLPR_MAX_OUTPUT_NUM];
} ot_vlpr_result_array;
【成员】
result_info[OT_VLPR_MAX_OUTPUT_NUM] |
【注意事项】
无。
【相关数据类型及接口】
ot_face_capture_result_array
【说明】
定义人脸抓拍的分析结果。
【定义】
typedef struct {
td_u32 object_num;
ot_face_quality_result face_quality_result[OT_FACE_CAPTURE_MAX_OUTPUT_NUM];
} ot_face_capture_result_array;
【成员】
face_quality_result[OT_FACE_CAPTURE_MAX_OUTPUT_NUM] |
人脸结构化结果信息,最大输出10个人脸属性信息,具体信息见ot_face_quality_result。 |
【注意事项】
无。
【相关数据类型及接口】
ot_face_quality_result
【说明】
定义人脸质量属性信息结果。
【定义】
typedef struct {
ot_aidetect_object detect_object;
td_u16 quality;
ot_face_pose pose;
td_bool mask;
} ot_face_quality_result;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_aivsr_model_load_mode
【说明】
定义模型加载方式。
【定义】
typedef enum {
OT_AIVSR_MODEL_LOAD_FROM_MEMORY = 0x0,
OT_AIVSR_MODEL_LOAD_FROM_PATH,
OT_AIVSR_MODEL_LOAD_BUTT
} ot_aivsr_model_load_mode;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_aivsr_input_model
【说明】
定义输入模型信息。
【定义】
typedef struct {
ot_aivsr_model_load_mode model_load_mode; /* RW; model content from path or memory */
td_u32 size; /* RW; model size,if input model memory, must be model content size not empty */
td_void *model;
} ot_aivsr_input_model;
【成员】
如果是内存加载(ot_aivsr_model_load_mode),则表示内存大小; 如果是路径加载(ot_aivsr_model_load_mode),则表示路径字符串长度。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_vlpr_result_info
【说明】
定义车牌识别结果信息。
【定义】
typedef struct {
ot_vehicle_info vehicle_info;
td_u32 license_plate_num;
ot_license_plate_info license_plate_info[OT_VLPR_LICENSE_PLATE_MAX_NUM];
} ot_vlpr_result_info;
【成员】
license_plate_info[OT_VLPR_LICENSE_PLATE_MAX_NUM] |
【注意事项】
无。
【相关数据类型及接口】
ot_vehicle_info
【说明】
定义车辆的结果信息。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_vehicle_property
【说明】
定义车辆的属性信息。
【定义】
typedef struct {
ot_vehicle_category category;
ot_vehicle_color color;
ot_vehicle_orient orient;
} ot_vehicle_property;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_vehicle_orient
【说明】
定义车辆朝向。
【定义】
typedef enum {
OT_VEHICLE_ORIENT_FRONT = 0,
OT_VEHICLE_ORIENT_BACK,
OT_VEHICLE_ORIENT_SIDE,
OT_VEHICLE_ORIENT_BUTT,
} ot_vehicle_orient;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_vehicle_color
【说明】
定义车辆颜色。
【定义】
typedef enum {
OT_VEHICLE_COLOR_BLACK = 0,
OT_VEHICLE_COLOR_BLUE,
OT_VEHICLE_COLOR_BROWN,
OT_VEHICLE_COLOR_GREY,
OT_VEHICLE_COLOR_YELLOW,
OT_VEHICLE_COLOR_GREEN,
OT_VEHICLE_COLOR_PURPLE,
OT_VEHICLE_COLOR_RED,
OT_VEHICLE_COLOR_WHITE,
OT_VEHICLE_COLOR_OTHER,
OT_VEHICLE_COLOR_BUTT,
} ot_vehicle_color;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_vehicle_category
【说明】
定义车辆类型。
【定义】
typedef enum {
OT_VEHICLE_CATEGORY_BUS = 0,
OT_VEHICLE_CATEGORY_SEDAN,
OT_VEHICLE_CATEGORY_VAN,
OT_VEHICLE_CATEGORY_SUV,
OT_VEHICLE_CATEGORY_PICKUP,
OT_VEHICLE_CATEGORY_TRUCK,
OT_VEHICLE_CATEGORY_BUTT,
} ot_vehicle_category;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_license_plate_info
【说明】
定义车牌信息。
【定义】
typedef struct {
ot_rect license_plate_rect;
td_u32 license_plate_len;
td_u32 license_plate_code[OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM];
td_float recognize_confidence;
ot_license_plate_property property;
} ot_license_plate_info;
【成员】
license_plate_code[OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM] |
|
【注意事项】
无。
【相关数据类型及接口】
ot_license_plate_property
【说明】
定义车牌属性信息。
【定义】
typedef struct {
ot_license_plate_category category;
ot_license_plate_color color;
} ot_license_plate_property;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_license_plate_color
【说明】
定义车牌颜色。
【定义】
typedef enum {
OT_LICENSE_PLATE_COLOR_BLUE = 0,
OT_LICENSE_PLATE_COLOR_YELLOW,
OT_LICENSE_PLATE_COLOR_GREEN,
OT_LICENSE_PLATE_COLOR_BLACK,
OT_LICENSE_PLATE_COLOR_WHITE,
OT_LICENSE_PLATE_COLOR_OTHER,
OT_LICENSE_PLATE_COLOR_BUTT,
} ot_license_plate_color;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_license_plate_category
【说明】
定义车牌类型。
【定义】
typedef enum {
OT_LICENSE_PLATE_CATEGORY_LARGE_CAR = 0,
OT_LICENSE_PLATE_CATEGORY_SMALL_CAR,
OT_LICENSE_PLATE_CATEGORY_EMBASSY_CAR,
OT_LICENSE_PLATE_CATEGORY_CONSULATE_CAR,
OT_LICENSE_PLATE_CATEGORY_TRAILER,
OT_LICENSE_PLATE_CATEGORY_COACH_CAR,
OT_LICENSE_PLATE_CATEGORY_POLICE_CAR,
OT_LICENSE_PLATE_CATEGORY_HONGKONG,
OT_LICENSE_PLATE_CATEGORY_MACAO,
OT_LICENSE_PLATE_CATEGORY_ARMED_POLICE,
OT_LICENSE_PLATE_CATEGORY_PLA,
OT_LICENSE_PLATE_CATEGORY_NEW_ENERGY,
OT_LICENSE_PLATE_CATEGORY_BUTT,
} ot_license_plate_category;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_fr_result_array
【说明】
定义人脸识别结构化算法的结果。
【定义】
typedef struct {
td_u32 object_num;
td_u32 object_capacity;
ot_fr_result* fr_info_result;
} ot_fr_result_array;
【成员】
人脸识别的结构化结果信息,内存地址需提前被用户分配。最大输出OT_FR_MAX_OUTPUT_NUM个人脸特征信息,具体信息见ot_fr_result。 |
【注意事项】
无。
【相关数据类型及接口】
ot_fr_result
【说明】
定义人脸识别的特征信息结果。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_fr_face_feature
【说明】
定义人脸特征信息结果。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
- ss_mpi_aivsr_process
- ot_aivsr_result_array
- ot_fr_result_array
- ot_fr_face_feature
- OT_FR_FACE_FEATURE_LEN
错误码
AiVsr API错误码如表1所示。
表 1 AiVsr API错误码
模型列表
【注意事项】
- 以下性能统计以Hi3516CV610-20S型号为例并作为参考。
- MMZ内存统计不包含图片输入
Proc 调试信息说明
概述
调试proc信息采用了Linux下的proc文件系统,可实时反映当前系统的运行状态,所记录的信息可供问题定位及分析时使用。
【注意事项】
使用proc功能,需提前加载ot_user_proc.ko(insmod ot_user_proc.ko)。
【文件目录】
/proc/umap
【文件清单】
【信息查看方法】
- 查找进程id,ps -ef | grep {进程名},获取进程id。
- 在控制台上可以使用cat命令查看信息,例如cat /proc/umap/aialgo_{进程id};也可以使用其他常用的文件操作命令,例如 cp /proc/umap/ ./ -rf,将所有umap下的proc文件拷贝到当前目录。
- 在应用程序中可以将上述文件当做普通只读文件进行读操作,例如fopen、fread等。
aialgo
【调试信息】
~ # cat /proc/umap/aialgo_{pid}
[AiAlgo] Version: [HiYueyingS610 V100R001C01], Build Time[Dec 17 2024, 10:05:05]
----------------current log level-----------------------------------
aialgo : 0
-----------------aidetect attr param---------------------------------
chn class_type track_en
1 0 Y
1 1 N
1 2 N
------------------aidetect param-----------------------------------
chn class_type detect_threshold track_miss_frame_num
1 0 0.400000 30
1 1 0.620000 30
1 2 0.630000 30
-----------------aidetect model info--------------------------------
chn input_model_file_name model_version
1 model from memory 10000
-------------------aidetect frame info--------------------------------
chn width height pixel_fmt first_pic_pts cur_pic_pts
1 1920 1080 YVU420SP 63181977 63184787
------------------aidetect work status(ms)--------------------------
chn recv_frame_num proc_success_num frame_rate_per_sec
1 17 17 4.000000
avg_cost_time max_cost_time cur_cost_time avg_interval_time
44 45 44 165
max_interval_time_per_sec
358
--------------------aivsr facecap attr param-----------------------
chn face_quality_en face_pose_en face_mask_en
0 Y Y Y
--------------------aivsr facecap param----------------------------
chn min_face_quality min_pupil_pixel_dist max_face_pose_roll
0 0 0 0
max_face_pose_yaw max_face_pose_pitch
0 0
---------------------aivsr facecap model info-------------------------
chn input_model_file_name model_version
0 model from memory 20000
----------------------aivsr facecap frame info--------------------------
chn width height pixel_fmt first_pic_pts cur_pic_pts
0 1920 1080 YVU420SP 63181977 63184787
----------------------aivsr facecap work status(ms)-----------------------
chn recv_frame_num proc_success_num frame_rate_per_sec
0 6 4 2.500000
avg_cost_time max_cost_time cur_cost_time
13 29 6
avg_interval_time max_interval_time_per_sec
466 2051
----------------------aivsr vlpr attr param-----------------------------
chn vehicle_property_en lp_detect_en lp_property_en lp_recognize_en
0 N Y N Y
-----------------------aivsr vlpr param------------------------------------
chn vehicle_min_width lp_min_width lp_detect_threshold lp_recognize_threshold
0 50 50 0.300000 0.800000
-----------------------aivsr vlpr model info--------------------------------
chn input_model_file_name model_version
0 model from memory 10000
---------------------------aivsr vlpr frame info---------------------------------
chn width height pixel_fmt first_pic_pts cur_pic_pts
0 1920 1080 YVU420SP 63747243 63747243
-------------------------aivsr vlpr work status(ms)---------------------------
chn recv_frame_num proc_success_num frame_rate_per_sec
0 1 1 0.000000
avg_cost_time max_cost_time cur_cost_time
93 93 93
avg_interval_time max_interval_time_per_sec
0 0
-------------------------aivsr async queue info--------------------------
chn drop_frames_num free_num wait_num proc_num
0 0 1 0 0
【调试信息分析】
- 记录aialgo模块中aidetect、aivsr、face capture、vlpr等业务的运行情况。当业务已被创建,则展示业务的运行proc日志,若未创建chn,则不展示该类业务的proc信息。
-
修改logmpp级别:
修改aialgo模块的调试等级使用echo命令,例如: echo 'aialgo = 1' > /proc/umap/aialgo_{pid}; 将日志调试级别修改为1(WARNING级别)。
【参数说明】
FAQ
AiDetect
提前加载ot_cipher.ko库
【现象】
AiDetect接口调用报hash init失败问题。
【分析】
AiDetect和AiVsr接口调用前,需提前加载ot_cipher.ko库,未加载时,会出现hash init失败问题。
【解决】
加载ot_cipher.ko库。
如何解决人车漏检目标问题
【现象】
人车漏检测的目标较多。
【分析】
检查送帧图像,发现送入检测图像有畸变。
【解决】
确认送入检测图像已去畸变处理。
AiVsr
人脸抓拍送帧图像与AiDetect送帧图像分辨率不一致问题
【现象】
人脸抓拍人脸图像抠图失败,接口调用失败。
【原因】
人脸抓拍送帧图像分辨率与AiDetect送帧图像分辨率不一致,AiDetect检测框未按AiVsr送入图像的分辨率做相应的缩放处理,人脸抠图失败。
【解决】
人脸抓拍送帧图像与AiDetect送帧图像分辨率不一致,业务层需对AiDetect检测到的检测框按AiVsr送入图像的分辨率做相应的缩放处理,保证在输入分辨率图像下的检测框正确。
人脸抓拍人脸重复率高
【现象】
人脸抓拍上报人脸重复率高。
【分析】
人脸检测跟踪ID出现跳变,检查人脸检测送帧帧率稳定连续。送帧帧率较低,平均帧率不到6帧/秒,会出现跟踪ID跳变,人脸重复抓拍问题。
【解决】
业务层保证人脸检测的送帧帧率稳定。




