跳转至

智能视频处理软件V1.0开发参考

前言

概述

本文为使用智能视频处理软件进行开发的程序员而写,目的是供您在开发过程中查阅智能视频处理软件开发包的各种参考信息,包括API、头文件、错误码等。

读者对象

本文档(本指南)主要适用于以下工程师:

  • 技术支持工程师
  • 软件开发工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修改记录

文档版本

发布日期

修改说明

00B01

2026-06-30

第1次临时版本发布。

系统概述

概述

智能视频处理软件(Intelligent Video Process,简称IVP)可支持智能应用软件快速开发。该软件包直接提供API接口用于检测和识别应用的快速集成开发。

该平台支持应用软件快速开发以下功能:

  • 目标检测:人脸、人形、车辆、宠物、头肩、非机动车检测等。
  • 视觉结构化识别:人脸抓拍、车牌识别。

系统架构

IVP平台的典型系统层次如图1所示,主要分为以下层次:

  • SDK层:SDK提供的芯片相关的硬件处理层。
  • 智能视频处理层:基于SDK层控制芯片完成相应的视频处理任务。
  • 应用层:基于智能视频处理层,由用户开发的智能应用软件系统。

图 1 IVP系统层次图

智能视频处理软件架构

智能视频处理软件主要数据处理流程如图1所示,主要分为目标检测(AiDetect)和视觉结构化识别(AiVsr)。主要的处理流程介绍如下:

  • AiDetect接收SDK媒体处理平台(MPP)输出的视频帧,输出目标位置信息,该结果可以直接用于周界,告警,客流统计等智能应用,或者传入AiVsr作进一步的结构化识别。
  • AiVsr接收SDK媒体处理平台(MPP)输出的视频帧,和AiDetect输出的目标位置信息,输出人脸抓拍或者车牌识别的结构化信息。

图 1 IVP数据处理流程图

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模块进行分析,并输出对应的结果。

图 1 AiDetect处理数据流示意

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

图 2 AiDetect检测流程图

API参考

AiDetect API提供以下API:

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

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

input_model

输入模型信息指针,包括输入模型内存或者输入模型路径,不能为空

输入

chn_attr

通道属性信息指针,包含跟踪的类别数量、每个类别的跟踪使能配置以及运动检测相关参数,跟踪参数不能为空

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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

ss_mpi_aidetect_destroy_chn

【描述】

销毁当前通道。

【语法】

td_s32 ss_mpi_aidetect_destroy_chn(ot_aidetect_chn chn);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_create_chn

ss_mpi_aidetect_set_chn_attr

【描述】

设置通道属性,包括通道对应模型的检测分类是否开启跟踪及运动状态检测,可动态配置。

【语法】

td_s32 ss_mpi_aidetect_set_chn_attr(ot_aidetect_chn chn, const ot_aidetect_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

chn_attr

通道属性信息指针,不能为空

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
  • 库文件:libss_mpi_aidetect.so、libaiservice_comm.so

【注意】

【举例】

无。

【相关主题】

ss_mpi_aidetect_get_chn_attr

ss_mpi_aidetect_get_chn_attr

【描述】

获取通道属性,包括当前通道内的模型对应检测分类是否开启跟踪及运动检测。

【语法】

td_s32 ss_mpi_aidetect_get_chn_attr(ot_aidetect_chn chn, ot_aidetect_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

chn_attr

通道属性信息指针,不能为空

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_attr

ss_mpi_aidetect_set_chn_param

【描述】

设置通道参数,包括当前通道对应模型的分类阈值、模型执行的优先级,可动态配置。

【语法】

td_s32 ss_mpi_aidetect_set_chn_param(ot_aidetect_chn chn, const ot_aidetect_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

chn

通道,有效范围:[0, 7]

输入

chn_param

通道参数信息指针,不能为空

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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

ss_mpi_aidetect_get_chn_param

【描述】

获取通道参数,包括当前通道对应模型的阈值,模型执行的优先级。

【语法】

td_s32 ss_mpi_aidetect_get_chn_param(ot_aidetect_chn chn, ot_aidetect_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

chn_param

通道参数指针,不能为空

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_set_chn_param

ss_mpi_aidetect_get_model_info

【描述】

获取模型相关信息,包括当前通道模型输入分辨率以及模型支持的检测类型。

【语法】

td_s32 ss_mpi_aidetect_get_model_info(ot_aidetect_chn chn, ot_aidetect_model_info *model_info);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0,7]

输入

model_info

模型信息指针,不能为空

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0,7]

输入

frame

原始帧数据指针,不能为空

输入

detect_result

输出检测结果指针,不能为空

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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表示信息。

【语法】

td_s32 ss_mpi_aidetect_set_log_level(td_u32 log_level);

【参数】

参数名称

描述

输入/输出

log_level

日志级别,范围:[0, 2]

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
  • 库文件:libss_mpi_aidetect.so、libaiservice_comm.so

【注意】

设置日志级别范围不在[0,2]时会返回错误。

【举例】

无。

【相关主题】

ss_mpi_aidetect_get_log_level

ss_mpi_aidetect_get_log_level

【描述】

获取当前日志级别,默认为0。0表示错误,1表示警告,2表示信息。

【语法】

td_s32 ss_mpi_aidetect_get_log_level(td_u32 *log_level);

【参数】

参数名称

描述

输入/输出

log_level

日志级别,范围:[0, 2]

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_aidetect.h、ss_mpi_aidetect.h
  • 库文件:libss_mpi_aidetect.so、libaiservice_comm.so

【注意】

设置日志级别范围不在[0,2]时会返回错误。

【举例】

无。

【相关主题】

ss_mpi_aidetect_set_log_level

ss_mpi_aidetect_query_status

【描述】

获取当前通道状态,包括当前通道帧率、接收总帧数等信息。

【语法】

td_s32 ss_mpi_aidetect_query_status(ot_aidetect_chn chn, ot_aidetect_chn_status *status);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

status

通道状态信息指针,不能为空

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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秒的帧率。

【举例】

无。

【相关主题】

ss_mpi_aidetect_create_chn

数据类型和数据结构

相关数据类型、数据结构定义如下:

OT_AIDETECT_MAX_CHN_NUM

【说明】

定义AiDetect API输入通道数的最大值。

【定义】

#define OT_AIDETECT_MAX_CHN_NUM   8

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_aidetect_create_chn

ot_aidetect_chn

【说明】

定义通道号,范围:[0,7]。

【定义】

typedef td_s32 ot_aidetect_chn;

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

preemp_en

是否使能可抢占低优先级任务,默认开启抢占。

priority

模型执行优先级,高优先级任务会优先调度,范围:[0,7],默认值为3。数字越小,优先级越高。

priority_up_step_timeout

模型执行优先级逐步提升超时时间(单位毫秒),范围:0或[15,600000),为0代表不开启优先级逐步提升。

priority_up_top_timeout

模型执行优先级最高提升超时时间(单位毫秒),范围:0或[15,600000),为0代表不开启优先级最高提升。

【注意事项】

无。

【相关数据类型及接口】

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_TRACK_STATUS_NEW

单目标首次跟踪到的状态,即当前目标首次在画面中出现并被跟踪上的状态。

OT_AIDETECT_TRACK_STATUS_UPDATE

已跟踪上的目标状态更新,该目标仍然处于跟踪状态。

OT_AIDETECT_TRACK_STATUS_DIE

当前目标断开跟踪。

OT_AIDETECT_TRACK_STATUS_INVALID

未开启跟踪时返回的状态。

OT_AIDETECT_TRACK_STATUS_BUTT

无效状态。

【注意事项】

无。

【相关数据类型及接口】

无。

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_MD_STATUS_STILL

目标静止状态。

OT_AIDETECT_MD_STATUS_MOTION

目标运动状态。

OT_AIDETECT_MD_STATUS_INVALID

未开启运动检测时返回的状态。

OT_AIDETECT_MD_STATUS_BUTT

无效状态。

【注意事项】

无。

【相关数据类型及接口】

无。

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_CLASS_FACE

检测对象类型:人脸

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_model_info

【说明】

定义检测模型相关信息。

【定义】

typedef struct {
    ot_size size;
    td_u32 class_num;
    ot_aidetect_class classes[OT_AIDETECT_CLASS_BUTT];
} ot_aidetect_model_info;

【成员】

成员名称

描述

size

检测模型所支持的分辨率。详细请参考《MPP 媒体处理软件 V6.0 开发参考》“系统控制”章节。

class_num

检测模型支持的目标个数。

classes[OT_AIDETECT_CLASS_BUTT]

检测模型支持的目标信息。

【注意事项】

无。

【相关数据类型及接口】

ot_aidetect_class

ot_aidetect_track

【说明】

定义单类目标跟踪使能。

【定义】

typedef struct {
    ot_aidetect_class class_type;
    td_bool track_en;
} ot_aidetect_track;

【成员】

成员名称

描述

class_type

目标分类类型。

track_en

当前分类是否开启跟踪,默认不开启。

【注意事项】

  • 跟踪策略:画面中首次出现对应目标并检测到该目标后,会进入跟踪流程,首次跟踪上会产生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;

【成员】

成员名称

描述

class_type

目标分类类型。

md_en

当前类别是否开启运动检测,默认不开启。

md_motion2StillThresh

上一帧为运动帧,当前帧切换到静止帧的IOU阈值,大于该IOU判断为静止帧,默认值为0.97,范围:[0,1]

md_still2MotionThresh

上一帧为静止帧,当前帧切换到运动帧的IOU阈值,小于该IOU判断为运动帧,默认值为0.95,范围:[0,1]

【注意事项】

  • 运动检测策略:运动检测必须依赖跟踪使能,请确保在使用运动前对应类别目标已开启跟踪,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_num

跟踪的类别数量,范围:[1, 对应模型类别数量]。

track_class_attr[OT_AIDETECT_CLASS_BUTT]

单类别跟踪使能。

motion_detect_class_num

运动判断的类别数量,范围:[0, 对应模型类别数量]。

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;

【成员】

成员名称

描述

class_type

分类类别。

detect_threshold

对应目标的阈值,范围:[0,1]。

track_miss_frame_num

目标断开跟踪的帧数,即连续该帧数未检测或跟踪到该目标,跟踪就会断开。

【注意事项】

下方表格中的阈值设置越大,对应目标漏检越多,误检越少;反之,漏检越少,误检越多。

模型对应目标的信息和当前推荐阈值&目标连续消失帧数:

模型名称

分类类别

类别数量

类别

推荐(默认)阈值

推荐(默认)目标连续消失帧数

det_hv_hor.bin

支持检测人形、机动车

最大支持两类

人形

0.64

30

车形

0.63

30

det_hv_ver.bin

支持检测人形、机动车

最大支持两类

人形

0.64

30

车形

0.67

30

det_hvf_hor.bin

支持检测人脸、人形、机动车

最大支持三类

人脸

0.4

30

人形

0.62

30

车形

0.63

30

det_hvf_ver.bin

支持检测人脸、人形、机动车

最大支持三类

人脸

0.4

30

人形

0.64

30

车形

0.67

30

det_hvf_hor_ll_lite.bin

支持检测人脸、人形、机动车

最大支持三类

人脸

0.54

30

人形

0.63

30

车形

0.68

30

det_hvf_ver_ll_lite.bin

支持检测人脸、人形、机动车

最大支持三类

人脸

0.54

30

人形

0.63

30

车形

0.68

30

det_pet_hor.bin

支持检测宠物

最大支持一类

宠物

0.7

30

det_head_hor.bin

支持检测头肩

最大支持一类

头肩

0.52

30

det_nmv_hor.bin

支持检测自行车,电瓶车

最大支持两类

自行车

0.5

30(两类共用)

电瓶车

0.5

det_nmv_hor_elev.bin

支持检测自行车,电瓶车

最大支持两类

自行车

0.5

30

电瓶车

0.4

30

det_pkg_hor.bin

支持检测包裹

最大支持一类

包裹

0.55

30

【相关数据类型及接口】

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_num

当前模型支持检测类别个数。

detect_threshold[OT_AIDETECT_CLASS_BUTT]

每个类别对应的阈值。

model_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_rect

当前目标的检测坐标。

detect_confidence

当前目标的置信度,范围:[0.5,1]

track_id

当前目标的跟踪ID,从0开始,到达50000最大值后重置为0。

track_status

当前目标的跟踪状态。

motion_status

当前目标的运动状态,对于首次跟踪到的目标,其初始帧为运动状态

【注意事项】

输出参数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;

【成员】

成员名称

描述

class_type

分类类型。

object_num

检测到的目标个数。

object_capacity

最大支持目标个数。

objects

目标信息指针。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

class_num

需要算法输出的目标类别个数。

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_MODEL_LOAD_FROM_MEMORY

从内存加载模型。

OT_AIDETECT_MODEL_LOAD_FROM_PATH

从路径加载模型。

OT_AIDETECT_MODEL_LOAD_BUTT

无效。

【注意事项】

无

【相关数据类型及接口】

ss_mpi_aidetect_create_chn

ot_aidetect_input_model

【说明】

定义输入模型信息。

【定义】

typedef struct {
    ot_aidetect_model_load_mode model_load_mode;
    td_u32 size;
    td_void *model;
} ot_aidetect_input_model;

【成员】

成员名称

描述

model_load_mode

模型加载方式。

size

  • 如果是内存加载(OT_AIDETECT_MODEL_LOAD_FROM_MEMORY),则表示内存大小;
  • 如果是路径加载(OT_AIDETECT_MODEL_LOAD_FROM_PATH),则表示路径字符串长度。

model

模型数据,内存地址或者路径字符串。

【注意事项】

无。

【相关数据类型及接口】

ot_aidetect_chn_status

【说明】

定义当前通道状态信息。

【定义】

typedef struct {
    td_u32 frame_rate;
    td_u32 avg_frame_rate;
    td_u32 recv_frames;
} ot_aidetect_chn_status;

【成员】

成员名称

描述

frame_rate

当前帧率。

avg_frame_rate

平均帧率。

recv_frames

接收的总帧数。

【注意事项】

  • 当前帧率为最近1秒内的帧率,即最近1s内分析了多少帧。
  • 平均帧率为整个分析流程的总帧数和总耗时的比值。

【相关数据类型及接口】

ss_mpi_aidetect_process

错误码

AiDetect API错误码如表1所示。

表 1 AiDetect API错误码

错误代码

成员名称

描述

0xA1018007

OT_ERR_AIDETECT_ILLEGAL_PARAM

输入参数无效。

0xA1018008

OT_ERR_AIDETECT_EXIST

输入通道已存在。

0xA1018009

OT_ERR_AIDETECT_UNEXIST

输入通道不存在。

0xA101800A

OT_ERR_AIDETECT_NULL_PTR

空指针错误。

0xA101800D

OT_ERR_AIDETECT_NOT_PERM

授权不通过或授权信息错误。

0xA1018018

OT_ERR_AIDETECT_NOT_READY

未初始化或初始化失败。

模型列表

【注意事项】

  • 以下性能统计以Hi3516CV610-20S型号为例并作为参考。
  • 输入图像以sample中的图像为例。
  • MMZ内存统计不包含图片输入。

模型名称

分辨率&像素类型

模型性能

说明

det_hv_hor.bin

640x384

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

37FPS

算力

0.55T@30

模型大小(KB)

872

MMZ(MB)

2.18

det_hv_ver.bin

384x640

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

41FPS

算力

0.46T@30

模型大小(KB)

860

MMZ(MB)

1.83

det_hvf_hor.bin

768x448

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

23FPS

算力

0.48T@15

模型大小(KB)

1924

MMZ(MB)

3.67

det_hvf_ver.bin

448x768

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

22FPS

算力

0.55T@15

模型大小(KB)

1958

MMZ(MB)

4.01

det_hvf_hor_ll_lite.bin

768x448

OT_PIXEL_FORMAT_YUV_400

最大帧率

38FPS

算力

0.51T@30

模型大小(KB)

874

MMZ(MB)

2.78

det_hvf_ver_ll_lite.bin

448x768

OT_PIXEL_FORMAT_YUV_400

最大帧率

34FPS

算力

0.60T@30

模型大小(KB)

1050

MMZ(MB)

2.63

det_pet_hor.bin

640x384

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

60FPS

算力

0.41T@30

模型大小(KB)

758

MMZ(MB)

1.78

det_head_hor.bin

640x384

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

35FPS

算力

0.62T@30

模型大小(KB)

1361

MMZ(MB)

3.312

det_nmv_hor.bin

640x384

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

42FPS

算力

0.45T@30

模型大小(KB)

890

MMZ(MB)

2.21

det_nmv_hor_elev.bin

640x384

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

42FPS

算力

0.45T@30

模型大小(KB)

1493

MMZ(MB)

3.71

det_pkg_hor.bin

640x384

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

38FPS

算力

0.57T@30

模型大小(KB)

1044

MMZ(MB)

2.94

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分析结果。

图 1 AiVsr处理数据流示意

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

图 2 AiVsr同步调用流程图

图 3 AiVsr异步调用流程图

API参考

AiVsr提供以下API:

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

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

input_model

输入模型信息指针,包括输入模型内存或者输入模型路径,不能为空。

输入

chn_attr

通道属性信息指针,不能为空,输入指定视觉结构化识别的具体任务类型,若任务类型为OT_AIVSR_TASK_FACE_CAPTURE,则需指定人脸抓拍属性参数ot_face_capture_attr,控制是否开启人脸质量和人脸姿势识别。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_destroy_chn

【描述】

销毁指定通道。

【语法】

td_s32 ss_mpi_aivsr_destroy_chn(ot_aivsr_chn chn);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_create_chn

ss_mpi_aivsr_set_chn_attr

【描述】

设置通道属性,包括通道对应任务的属性参数。

【语法】

td_s32 ss_mpi_aivsr_set_chn_attr(ot_aivsr_chn chn, const ot_aivsr_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

chn_attr

通道属性信息指针,不能为空。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_get_chn_attr

ss_mpi_aivsr_get_chn_attr

【描述】

获取通道属性,包括通道的任务类型以及对应任务类型的属性参数。

【语法】

td_s32 ss_mpi_aivsr_get_chn_attr(ot_aivsr_chn chn, ot_aivsr_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

chn_attr

通道属性信息指针,不能为空。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_set_chn_param

【描述】

设置通道参数,包括当前通道对应任务类型、模型执行的优先级,该任务类型对应的参数。

【语法】

td_s32 ss_mpi_aivsr_set_chn_param(ot_aivsr_chn chn, const ot_aivsr_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

chn

通道,有效范围:[0, 7]

输入

chn_param

通道参数信息指针,不能为空。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_get_chn_param

ss_mpi_aivsr_get_chn_param

【描述】

获取通道参数,包括当前通道对应任务类型、模型执行的优先级,该任务类型对应的参数。

【语法】

td_s32 ss_mpi_aivsr_get_chn_param(ot_aivsr_chn chn, ot_aivsr_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

chn_param

通道参数指针,不能为空。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_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);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0,7]

输入

frame

原始帧数据指针,不能为空。

输入

object

检测结果指针,不能为空。结构体信息定义,ot_aidetect_object_of_one_class详见 “AiDetect”章节。

输入

result

结构化识别结果指针,不能为空。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

callback

回调函数指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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_async_process

ss_mpi_aivsr_unregister_result_callback

【描述】

注销结果回调函数。

【语法】

td_s32 ss_mpi_aivsr_unregister_result_callback(ot_aivsr_chn chn);

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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

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

【参数】

参数名称

描述

输入/输出

chn

通道号,有效范围:[0, 7]

输入

frame

原始帧数据指针,不能为空

输入

object

检测结果指针,不能为空。结构体信息定义,ot_aidetect_object_of_one_class详见“AiDetect”章节。

输入

milli_sec

超时时间

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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输入通道数的最大值。

【定义】

#define OT_AIVSR_MAX_CHN_NUM   8

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_aivsr_create_chn

OT_VLPR_MAX_OUTPUT_NUM

【说明】

定义车牌识别输出结果最大个数。

【定义】

#define OT_VLPR_MAX_OUTPUT_NUM      10

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

OT_VLPR_LICENSE_PLATE_MAX_NUM

【说明】

定义单辆车的最大车牌个数。

【定义】

#define OT_VLPR_LICENSE_PLATE_MAX_NUM     2

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM

【说明】

定义车牌号码最大字符数。

【定义】

#define OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM      20

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

OT_FACE_CAPTURE_MAX_OUTPUT_NUM

【说明】

定义人脸抓拍输出最大个数。

【定义】

#define OT_FACE_CAPTURE_MAX_OUTPUT_NUM      10

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

OT_FR_MAX_OUTPUT_NUM

【说明】

定义人脸识别输出最大个数。

【定义】

#define OT_FR_MAX_OUTPUT_NUM      10

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

OT_FR_FACE_FEATURE_LEN

【说明】

定义人脸识别人脸特征维度。

【定义】

#define OT_FR_FACE_FEATURE_LEN   512

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

ot_aivsr_result_callback

【说明】

定义结果回调函数指针。

【定义】

typedef void (*ot_aivsr_result_callback)(td_s32 retcode, const ot_aivsr_result_array *result);

【成员】

成员名称

描述

retcode

ss_mpi_aivsr_async_process接口处理单帧结果返回值。

result

结构化识别结果指针,不能为空。

【注意事项】

无。

【相关数据类型及接口】

ot_aivsr_chn

【说明】

定义通道号。

【定义】

typedef td_s32 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;

【成员】

成员名称

描述

task_type

AiVsr任务类型。

depth

异步处理时等待队列长度,默认是1,取值范围:[0, 8],0表示使用默认值。

vlpr_attr

如果任务是OT_AIVSR_TASK_VLPR,则填写车牌识别的属性开关。

face_attr

如果任务是OT_AIVSR_TASK_FACE_CAPTURE,则填写人脸抓拍的属性开关。

【注意事项】

无。

【相关数据类型及接口】

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_AIVSR_TASK_FACE_CAPTURE

人脸抓拍任务。

OT_AIVSR_TASK_VLPR

车牌识别任务。

OT_AIVSR_TASK_FR

人脸识别任务。

OT_AIVSR_TASK_BUTT

无效任务。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

face_quality_en

人脸质量属性识别功能开关。

face_pose_en

人脸姿势属性识别功能开关。

face_mask_en

人脸口罩属性识别功能开关。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

vehicle_property_en

车辆属性开关,默认打开。

license_plate_detect_en

车牌检测开关,默认打开。

license_plate_property_en

车牌属性开关,默认打开;如果license_plate_detect_en为TD_FALSE,那么license_plate_property_en也要设为TD_FALSE。

license_plate_recognize_en

车牌识别开关,默认打开;如果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;

【成员】

成员名称

描述

task_type

AiVsr任务类型。

model_priority

模型执行的优先级相关参数。

vlpr_param

如果任务是OT_AIVSR_TASK_VLPR,则填写车牌识别的通道参数。

face_param

如果任务是OT_AIVSR_TASK_FACE_CAPTURE,则填写人脸抓拍的通道参数。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

preemp_en

是否使能可抢占低优先级任务,默认开启抢占。

priority

模型执行优先级,高优先级任务会优先调度,范围:[0,7],默认值为3。数字越小,优先级越高。

priority_up_step_timeout

模型执行优先级逐步提升超时时间(单位毫秒),范围:0或[15,600000),为0代表不开启优先级逐步提升。

priority_up_top_timeout

模型执行优先级最高提升超时时间(单位毫秒),范围:0或[15,600000),为0代表不开启优先级最高提升。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

vehicle_min_width

车辆最小宽度,默认为200。

license_plate_min_width

车牌最小宽度,默认为80。

license_plate_detect_threshold

车牌检测置信度阈值,取值范围:[0, 1],默认为0.4。

license_plate_recognize_threshold

车牌识别置信度阈值,取值范围:[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;

【成员】

成员名称

描述

min_face_quality

最小人脸质量,范围:[0,100]。按照最小人脸质量过滤结果,人脸质量小于min_face_quality,则过滤该人脸。最小人脸质量为0,则不对人脸质量进行过滤。默认值30。

max_face_pose

最大人脸姿势,按照最大人脸姿势过滤结果,人脸姿势成员变量(如roll、yaw、pitch)的绝对值大于max_face_pose中对应成员的值,则过滤人脸。最大人脸姿势为0,则不对人脸姿势进行过滤。

  • max_face_pose.roll设置范围为[0,180],默认值为60;
  • max_face_pose.yaw设置范围为[0,180],默认值为90;
  • max_face_pose.pitch设置范围为[0,180],默认值为120。

min_pupil_pixel_dist

最小瞳孔像素距离,相对于1920x1080图片下的像素距离。按照最小瞳孔距离过滤结果,瞳孔距离小于min_pupil_pixel_dist,则过滤人脸。最小瞳孔像素距离为0,则不过滤人脸。默认值20。

【注意事项】

无。

【相关数据类型及接口】

ot_face_pose

【说明】

定义人脸姿势的偏航角、翻滚角、俯仰角。

【定义】

typedef struct {
    td_s16 yaw;
    td_s16 roll;
    td_s16 pitch;
} ot_face_pose;

【成员】

成员名称

描述

yaw

偏航角。

roll

翻滚角。

pitch

俯仰角。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

task_type

AiVsr任务类型。

frame_pts

原始帧的时间戳。

vlpr_result

vlpr结构化识别结果。

face_result

人脸抓拍结构化识别结果。

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;

【成员】

成员名称

描述

object_num

车牌识别输出目标数。

result_info[OT_VLPR_MAX_OUTPUT_NUM]

车辆结构化结果信息,最多输出10个车辆信息。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

object_num

人脸经过结构化识别算法后输出的个数。

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;

【成员】

成员名称

描述

detect_object

人脸的检测结果,结构体信息定义,ot_aidetect_object详见“AiDetect”章节。

quality

人脸质量。

pose

人脸姿势。

mask

人脸是否戴口罩。

【注意事项】

无。

【相关数据类型及接口】

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_MODEL_LOAD_FROM_MEMORY

从内存加载模型。

OT_AIVSR_MODEL_LOAD_FROM_PATH

从路径加载模型。

OT_AIVSR_MODEL_LOAD_BUTT

无效加载。

【注意事项】

无

【相关数据类型及接口】

ss_mpi_aivsr_create_chn

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;

【成员】

成员名称

描述

model_load_mode

模型加载方式。

size

如果是内存加载(ot_aivsr_model_load_mode),则表示内存大小;

如果是路径加载(ot_aivsr_model_load_mode),则表示路径字符串长度。

model

模型数据,内存地址或者路径字符串。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

vehicle_info

输出的车辆信息。

license_plate_num

一辆车上识别到的车牌个数。

license_plate_info[OT_VLPR_LICENSE_PLATE_MAX_NUM]

输出的车牌信息。

【注意事项】

无。

【相关数据类型及接口】

ot_vehicle_info

【说明】

定义车辆的结果信息。

【定义】

typedef struct {
    ot_aidetect_object detect_object;
    ot_vehicle_property property;
} ot_vehicle_info;

【成员】

成员名称

描述

detect_object

车辆的检测结果,ot_aidetect_object请见“AiDetect”章节。

property

车辆属性信息,包含类型,颜色和朝向。

【注意事项】

无。

【相关数据类型及接口】

ot_vehicle_property

【说明】

定义车辆的属性信息。

【定义】

typedef struct {
    ot_vehicle_category category;
    ot_vehicle_color color;
    ot_vehicle_orient orient;
} ot_vehicle_property;

【成员】

成员名称

描述

category

车辆类型。

color

车辆颜色。

orient

车辆朝向。

【注意事项】

无。

【相关数据类型及接口】

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_ORIENT_FRONT

车辆正面。

OT_VEHICLE_ORIENT_BACK

车辆背面。

OT_VEHICLE_ORIENT_SIDE

车辆侧面。

OT_VEHICLE_ORIENT_BUTT

无效值。

【注意事项】

无。

【相关数据类型及接口】

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_COLOR_BLACK

黑色。

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_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_VEHICLE_CATEGORY_BUS

客车。

OT_VEHICLE_CATEGORY_SEDAN

小轿车、掀背车、微型车、跑车。

OT_VEHICLE_CATEGORY_VAN

面包车、MPV。

OT_VEHICLE_CATEGORY_SUV

SUV车。

OT_VEHICLE_CATEGORY_PICKUP

皮卡车。

OT_VEHICLE_CATEGORY_TRUCK

大货车、中货车、小货车。

OT_VEHICLE_CATEGORY_BUTT

无效值。

【注意事项】

无。

【相关数据类型及接口】

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_rect

车牌检测坐标。

license_plate_len

车牌号码长度。

license_plate_code[OT_VLPR_LICENSE_PLATE_MAX_CHAR_NUM]

车牌号码。

recognize_confidence

车牌识别置信度。

property

车牌属性。

【注意事项】

无。

【相关数据类型及接口】

ot_license_plate_property

【说明】

定义车牌属性信息。

【定义】

typedef struct {
    ot_license_plate_category category;
    ot_license_plate_color color;
} ot_license_plate_property;

【成员】

成员名称

描述

category

车牌类型。

color

车牌颜色。

【注意事项】

无。

【相关数据类型及接口】

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_COLOR_BLUE

蓝牌。

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_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_LICENSE_PLATE_CATEGORY_LARGE_CAR

大型汽车车牌,比如黄牌车。

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_fr_result_array

【说明】

定义人脸识别结构化算法的结果。

【定义】

typedef struct {
    td_u32 object_num;
    td_u32 object_capacity;
    ot_fr_result* fr_info_result;
} ot_fr_result_array;

【成员】

成员名称

描述

object_num

经过人脸识别结构化识别算法后输出的人脸个数。

object_capacity

最大支持输出人脸识别个数,需提前由用户设置。

fr_info_result

人脸识别的结构化结果信息,内存地址需提前被用户分配。最大输出OT_FR_MAX_OUTPUT_NUM个人脸特征信息,具体信息见ot_fr_result。

【注意事项】

无。

【相关数据类型及接口】

ot_fr_result

【说明】

定义人脸识别的特征信息结果。

【定义】

typedef struct {
    ot_aidetect_object detect_object;
    ot_fr_face_feature face_feature;
} ot_fr_result;

【成员】

成员名称

描述

detect_object

人脸的检测结果,结构体信息定义,ot_aidetect_object详见“AiDetect”章节。

face_feature

人脸特征。

【注意事项】

无。

【相关数据类型及接口】

ot_fr_face_feature

【说明】

定义人脸特征信息结果。

【定义】

typedef struct {
    float feature[OT_FR_FACE_FEATURE_LEN];
} ot_fr_face_feature;

【成员】

成员名称

描述

feature

人脸特征向量,OT_FR_FACE_FEATURE_LEN维度。

【注意事项】

无。

【相关数据类型及接口】

错误码

AiVsr API错误码如表1所示。

表 1 AiVsr API错误码

错误代码

成员名称

描述

0xA1028007

OT_ERR_AIVSR_ILLEGAL_PARAM

输入参数无效

0xA1028008

OT_ERR_AIVSR_EXIST

输入通道已存在

0xA1028009

OT_ERR_AIVSR_UNEXIST

输入通道不存在

0xA102800A

OT_ERR_AIVSR_NULL_PTR

空指针错误

0xA102800D

OT_ERR_AIVSR_NOT_PERM

操作不允许

0xA1028017

OT_ERR_AIVSR_BUF_FULL

队列缓冲区已满

0xA1028018

OT_ERR_AIVSR_NOT_READY

未初始化或初始化失败

模型列表

【注意事项】

  • 以下性能统计以Hi3516CV610-20S型号为例并作为参考。
  • MMZ内存统计不包含图片输入

模型名称

分辨率&像素类型

模型性能

说明

vsr_face_cap.bin

1920x1080

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率(1人脸)

200fps

  • 横屏模式
  • 推荐在人脸抓拍场景使用
  • 模型性能基于输入1080P含有一张人脸图片的情况下统计

算力

0.13T@30fps

模型大小(KB)

3321

MMZ(MB)

4.3

vsr_vlpr.bin

1920x1080

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

10fps

  • 横屏模式
  • 推荐在车牌识别场景使用,建议在256MB及以上芯片平台上使用
  • 模型性能基于输入1080P含有一辆车和一个车牌的情况下统计

算力

2.58T@30fps

模型大小(KB)

30555

MMZ(MB)

33.1

vsr_vlpr_lite.bin

1920x1080

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

18fps

  • 横屏模式
  • 推荐在车牌识别场景使用,建议在128MB及以上芯片平台上使用
  • 模型性能基于输入1080P含有一辆车和一个车牌的情况下统计

算力

1.41T@30fps

模型大小(KB)

10373

MMZ(MB)

13.5

vsr_fr.bin

1920x1080

OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420

最大帧率

50fps

  • 横屏模式
  • 推荐在人脸识别场景使用
  • 模型性能基于输入1080P含有一张人脸的情况下统计

算力

0.33T@30fps

模型大小(KB)

9605

MMZ(MB)

10

Proc 调试信息说明

概述

调试proc信息采用了Linux下的proc文件系统,可实时反映当前系统的运行状态,所记录的信息可供问题定位及分析时使用。

【注意事项】

使用proc功能,需提前加载ot_user_proc.ko(insmod ot_user_proc.ko)。

【文件目录】

/proc/umap

【文件清单】

文件名称

描述

aialgo_{pid}

记录aialgo模块的使用情况,pid为当前服务的进程id。

【信息查看方法】

  • 查找进程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级别)。

【参数说明】

参数

描述

current log level

当前日志级别

aialgo

当前日志级别。

取值范围:[0, 3]

0:ERROR

1:WARNING

2:INFO

3:DEBUG

aidetect attr param

AI检测属性参数

chn

通道ID号。

取值范围:[0, 8)

class_type

检测类型。

枚举取值,参考"2 AiDetect"章节中的“ot_aidetect_class”

track_en

跟踪使能状态。

N: 未使能

Y: 使能

aidetect param

AI检测属性参数

chn

通道ID号。

取值范围:[0, 8)

class_type

检测类型。

枚举取值,参考"2 AiDetect"章节中的“ot_aidetect_class”

detect_threshold

检测置信度阈值。

track_miss_frame_num

跟踪丢失帧数。

aidetect model info

AI检测模型信息

chn

通道ID号。

取值范围:[0, 8)

input_model_file_name

模型bin文件名字。

若模型为路径输入,则模型名为文件名,若为内存模式输入,则模型名为model from memory。

model_version

模型bin文件版本号。

aidetect frame info

AI检测输入帧信息

chn

通道ID号。

取值范围:[0,8)

width

输入图像宽度。

height

输入图像高度。

pixel_fmt

输入图像像素格式。

枚举取值:BGR、RGB、YVU420SP、YVU422SP、YUV400、BUTT

first_pic_pts

第一帧pts。

cur_pic_pts

当前帧pts。

aidetect work status(ms)

AI检测工作状态,时间单位(ms)

chn

通道ID号。

取值范围:[0, 8)

recv_frame_num

总接收帧数。

proc_success_num

成功检测图像数量。

frame_rate_per_sec

通道处理的实时帧率,最近1s的帧率。

avg_cost_time

任务的平均执行耗时,时间单位(ms)。

max_cost_time

任务执行的最大耗时,时间单位(ms)。

cur_cost_time

当前任务执行耗时,时间单位(ms)。

avg_interval_time

平均接口调用时间间隔,时间单位(ms)。

max_interval_time_per_sec

最近1s的最大接口调用时间间隔,时间单位(ms)。

aivsr facecap attr param

AiVsr人脸抓拍属性参数

chn

AiVsr通道ID号。

取值范围:[0, 8)

face_quality_en

人脸质量识别使能状态。

N: 未使能

Y: 使能

face_pose_en

人脸姿势识别使能状态。

N: 未使能

Y: 使能

face_mask_en

人脸口罩使能状态。

N: 未使能

Y: 使能

aivsr facecap param

AiVsr人脸抓拍参数

chn

AiVsr通道ID号。

取值范围:[0, 8)

min_face_quality

最小人脸质量。

min_pupil_pixel_dist

最小瞳距。

max_face_pose_roll

最大人脸翻滚角。

max_face_pose_yaw

最大人脸偏航角。

max_face_pose_pitch

最大人脸俯仰角。

aivsr facecap model info

AiVsr人脸抓拍模型信息

chn

AiVsr通道ID号。

取值范围:[0, 8)

input_model_file_name

模型bin文件名字。

若模型为路径输入,则模型名为文件名,若为内存模式输入,则模型名为model from memory。

model_version

模型bin文件版本号。

aivsr facecap frame info

AiVsr人脸抓拍输入帧信息

chn

AiVsr通道ID号。

取值范围:[0, 8)

width

输入图像宽度。

height

输入图像高度。

pixel_fmt

输入图像像素格式。

枚举取值:BGR、RGB、YVU420SP、YVU422SP、YUV400、BUTT

first_pic_pts

第一帧pts。

cur_pic_pts

当前帧pts。

aivsr facecap work status(ms)

AiVsr人脸抓拍工作状态,时间单位(ms)

chn

AiVsr通道ID号。

取值范围:[0, 8)

recv_frame_num

总接收帧数。

proc_success_num

成功检测图像数量。

frame_rate_per_sec

通道处理的实时帧率,最近1s的帧率。

avg_cost_time

任务的平均执行耗时,时间单位(ms)。

max_cost_time

任务执行的最大耗时,时间单位(ms)。

cur_cost_time

当前任务执行耗时,时间单位(ms)。

avg_interval_time

平均接口调用时间间隔,时间单位(ms)。

max_interval_time_per_sec

最近1s的最大接口调用时间间隔,时间单位(ms)。

aivsr vlpr attr param

AiVsr车辆识别属性参数

chn

AiVsr通道ID号。

取值范围:[0, 8)

vehicle_property_en

车辆属性检测使能状态。

N: 未使能

Y: 使能

lp_detect_en

车牌检测使能状态。

N: 未使能

Y: 使能

lp_property_en

车牌属性检测使能状态。

N: 未使能

Y: 使能

lp_recognize_en

车牌识别使能状态。

N: 未使能

Y: 使能

Aivsr vlpr param

AiVsr车辆识别参数

chn

AiVsr通道ID号。

取值范围:[0,8)

vehicle_min_width

车辆最小宽度。

lp_min_width

车牌最小宽度。

lp_detect_threshold

车牌检测置信度阈值。

lp_recognize_threshold

车牌识别置信度阈值。

aivsr vlpr model info

AiVsr车牌识别模型信息

chn

AiVsr通道ID号。

取值范围:[0, 8)

input_model_file_name

模型bin文件名字。

若模型为路径输入,则模型名为文件名,若为内存模式输入,则模型名为model from memory。

model_version

模型bin文件版本号。

aivsr vlpr frame info

AiVsr车牌识别输入帧信息

chn

AiVsr通道ID号。

取值范围:[0, 8)

width

输入图像宽度。

height

输入图像高度。

pixel_fmt

输入图像像素格式。

枚举取值:BGR、RGB、YVU420SP、YVU422SP、YUV400、BUTT

first_pic_pts

第一帧pts。

cur_pic_pts

当前帧pts。

aivsr vlpr work status(ms)

AiVsr车牌识别工作状态,时间单位(ms)

chn

AiVsr通道ID号。

取值范围:[0, 8)

recv_frame_num

总接收帧数。

proc_success_num

成功检测图像数量。

frame_rate_per_sec

通道处理的实时帧率,最近1s的帧率。

avg_cost_time

任务的平均执行耗时,时间单位(ms)。

max_cost_time

任务执行的最大耗时,时间单位(ms)。

cur_cost_time

当前任务执行耗时,时间单位(ms)。

avg_interval_time

平均接口调用时间间隔,时间单位(ms)。

max_interval_time_per_sec

最近1s的最大接口调用时间间隔,时间单位(ms)。

aivsr async queue info

AiVsr异步队列信息

chn

AiVsr通道ID号。

取值范围:[0, 8)

drop_frames_num

丢帧个数。

free_num

空闲任务数量。

wait_num

等待任务数量。

proc_num

执行任务数量。

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跳变,人脸重复抓拍问题。

【解决】

业务层保证人脸检测的送帧帧率稳定。