IVA/魔视-RK3568-SDK/MvObjectEventDetect.h
2023-10-20 23:41:14 +08:00

740 lines
28 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 版权所有 2015 魔视智能科技(上海)有限公司
* Copyright (c) 2015,Motovis Intelligent Technologies (Shanghai) Co.,Ltd
* 魔视智能智能公司秘密
* Motovis Intelligent Confidential Proprietary
* 文件名称MvObjectEventDetect.h
* 摘要:封装事件检测算法
* 版本v1.0.0.0
* 作者:
* 完成日期2019年12月3日
*/
#ifndef _OBJECT_EVENT_DETECT_H_
#define _OBJECT_EVENT_DETECT_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define EVENT_WARN_NUM 26 //报警类型种类
#define EVENT_ADAS_WARN_NUM 7 //adas报警类型种类
#define EVENT_DSM_WARN_NUM 15 //dsm报警类型种类
//数据通道类型
typedef enum _DETECT_CHANNEL_TYPE_
{
ADAS_DETECT_CHANNEL = 1, //adas数据通道
RIGHT_BSD_FRONT_DETECT_CHANNEL = 2, //右侧bsd(非鱼眼)--右前 从前往后
DMS_DETECT_CHANNEL = 4, //dms数据通道
RIGHT_BSD_REAR_DETECT_CHANNEL = 8, //右侧bsd(非鱼眼)--右后 从后往前
LEFT_BSD_FRONT_DETECT_CHANNEL = 0x10, //左侧bsd(非鱼眼)--左前
LEFT_BSD_REAR_DETECT_CHANNEL = 0x20, //左侧bsd(非鱼眼)--左后
FRONT_BSD_DETECT_CHANNEL = 0x40, //前侧bsd(非鱼眼)
REAR_BSD_DETECT_CHANNEL = 0x80 //后侧bsd(非鱼眼)
}DetectChannelType;
//数据功能类型
typedef enum _DETECT_FUNCTION_TYPE_
{
ADAS_FUNCTION_TYPE = 1, //adas类型
BSD_FUNCTION_TYPE = 2, //bsd功能类型
DSM_FUNCTION_TYPE = 4, //dsm功能类型
SECOND_BSD_FUNCTION_TYPE = 8, //第2bsd功能类型(bsd2)
BELT_FUNCTION_TYPE = 0x10, //安全带功能类型(dsm2)
OVERBOARD_FUNCTION_TYPE = 0x20, //超员功能类型
IMAGEFUSION_FUNCTION_TYPE = 0x40, //360图像融合功能类型
CARGO_FUNCTION_TYPE = 0x80, //货箱功能类型
ALIVE_FUNCTION_TYPE = 0x100, //活体功能类型
FACE_COUNT_FUNCTION_TYPE = 0x200, //人头计数功能类型
THIRD_BSD_FUNCTION_TYPE = 0x400, //第3bsd功能类型(bsd3)
FOURTH_BSD_FUNCTION_TYPE = 0x800 //第4bsd功能类型(bsd4)
}DetectFunctionType;
//bsd安装类型
typedef enum _BSD_INSTALL_TYPE_
{
BSD_RIGHT = 0, //右
BSD_FRONT = 1, //前
BSD_LEFT = 2, //左
BSD_BACK = 3 //后
}BsdInstallType;
//bsd车身位置
typedef enum _BSD_CARPOS_TYPE_
{
BSD_CARPOS_LEFT = 0, //左
BSD_CARPOS_RIGHT = 1, //右
BSD_CARPOS_UP = 2, //上
BSD_CARPOS_DOWN = 3 //下
}BsdCarPosType;
//bsd相机类型
typedef enum _BSD_CAMERA_TYPE_
{
BSD_CAMERA_NOFISHEYE = 0, //非鱼眼
BSD_CAMERA_FISHEYE = 1 //鱼眼
}BsdCameraType;
//视频图像帧信息
typedef struct _VideoFrameDataInfo
{
int nFrameId; //帧号
int u32Width; //视频图像宽
int u32Height; //视频图像高
long long u64PTS; //时间戳(毫秒)
unsigned char* pu8VirAddr; //视频图像帧数据虚拟地址
}VideoFrameDataInfo;
//标定点坐标
typedef struct _CalibrationPoint
{
int x; //X坐标
int y; //Y坐标
}CalibrationPoint;
//标定点坐标
typedef struct _CalibrationFloatPoint
{
float x; //X坐标
float y; //Y坐标
}CalibrationFloatPoint;
//自标定矩形区域
typedef struct _CalibrationRectRegion
{
int x; //X坐标
int y; //Y坐标
int nWidth; //宽
int nHeight; //高
}CalibrationRectRegion;
//360标定错误返回信息
typedef struct _CalibrationErrorInfo
{
float fDeviation[4]; //每路相机的标定误差,顺序分别是0-前, 1-右, 2-后, 3-左
int nRet[4][2]; //每路相机每块标定布自标定返回值
}CalibrationErrorInfo;
//虚拟线坐标点
typedef struct _VirtualLinePoint
{
CalibrationPoint ptBegin; //起点坐标
CalibrationPoint ptEnd; //终点坐标
}VirtualLinePoint;
//目标类型
typedef enum _ObjectDetectType
{
NONE_TYPE = 0, //未知类型
PEDESTRIAN_TYPE = 1, //行人
CAR_TYPE = 2, //小型汽车
BUS_TYPE = 3, //大巴
TRUCK_TYPE = 4, //卡车
MIDBUS_TYPE = 5, //中巴
MOTO_TYPE = 6, //机动车
NOMOTO_TYPE = 7 //非机动车
}ObjectDetectType;
//报警事件类型
typedef enum _ObjectEventType
{
EVENT_NONE = 0, //无报警
EVENT_LDW_LEFT = 1, //向左车道偏离报警
EVENT_LDW_RIGHT = 2, //向右车道偏离报警
EVENT_FCW = 4, //前车碰撞报警
EVENT_PCW = 8, //行人碰撞报警
EVENT_HMW = 0x10, //车距监测报警
EVENT_CROSS_WALK = 0x20, //人行横道检测报警
EVENT_BLIND = 0x40, //右侧盲区报警
EVENT_SMOKE = 0x80, //抽烟
EVENT_CALL = 0x100, //打电话
EVENT_YAWN = 0x200, //打哈欠
EVENT_NO_ALIGNMENT = 0x400, //未对准(偏离座位)
EVENT_CAMERA_SHIELD = 0x800, //摄像头遮挡
EVENT_ABNORMAL_IDENTITY = 0x1000, //身份异常(不是原来的驾驶员)
EVENT_ABSENT_DRIVER = 0x2000, //异常驾驶(检测不到脸)
EVENT_EYES_MASKED = 0x4000, //阻断型墨镜
EVENT_MOUTH_MASKED = 0x8000, //嘴部遮挡
EVENT_EYE_CLOSING = 0x10000, //闭眼
EVENT_SWINGING_LEFT = 0x20000, //分神驾驶(东张)
EVENT_SWINGING_RIGHT = 0x40000, //分神驾驶(西望)
EVENT_HEAD_UP = 0x80000, //分神驾驶(仰望)
EVENT_HEAD_DOWN = 0x100000, //分神驾驶(低头)
EVENT_NORMAL_IDENTITY = 0x200000, //身份正常
EVENT_ABNORMAL_BELT = 0x400000, //未系安全带
EVENT_ABNORMAL_HAND = 0x800000, //手脱离方向盘
EVENT_ABNORMAL_PHONE = 0x1000000, //玩手机
EVENT_ABNORMAL_OVERBOARD = 0x2000000 //超员
}ObjectEventType;
//车道线类型
typedef enum _LaneType
{
OTHER_LINE = 0, //其他车道线类型
WHITE_SOLID_LINE = 1, //白实线
YELLOW_SOLID_LINE = 2, //黄实线
DOUBLE_YELLOW_LINE = 3, //双黄线
DOUBLE_WHITE_LINE = 4 //双白线
}LaneType;
//目标信息
typedef struct _ObjectPara
{
int nObjectId; //目标编号
ObjectDetectType nDetectType; //目标类型
int nLeft; //目标位置左
int nTop; //目标位置上
int nRight; //目标位置右
int nBottom; //目标位置下
float fDist; //每个目标的距离(单位m最大值250最小值0)
float fVelo; //相对运动目标的相对速度(单位m/s)
float fTTC; //ttc时间(单位s)
int nTargetPosX; //落脚点横坐标bsd用
int nTargetPosY; //落脚点纵坐标bsd用
}ObjectPara;
//目标跟踪报警结果
typedef struct _ObjectTrackEventResult
{
int nFrameId; //图像帧号
long long lTimeStamp; //时间戳(毫秒)
int nObjectNumber; //目标数目
ObjectPara objInfo[255]; //目标信息
ObjectEventType nEventType; //报警事件类型
int nMainObjectId; //主目标编号
int nWarnFrameId[10]; //报警图像帧号
int nWarnFrameIdCount; //实际报警图像帧号数目
int nDangerLevel; //报警等级,1表示最高危险报警,2表示次高危险报警,3表示第三高危险报警
CalibrationPoint tFirstAlarmPoint[4]; //一级告警区域bsd用
CalibrationPoint tSecondAlarmPoint[4]; //二级预警区域bsd用
CalibrationPoint tThirdAlarmPoint[4]; //三级预警区域bsd用
int nFaceLandMarksNum; //人脸关键点
CalibrationPoint tFaceLandMarks[68]; //人脸关键点
LaneType nLeftLineType; //左车道线类型
LaneType nRightLineType; //右车道线类型
}ObjectTrackEventResult;
//车身信息
typedef struct _CarInfoInput
{
float fVelocity; //车速,单位: km/h
float fAcceleration; //车辆加速度 >0表示加速度,单位:m/s2
float fDeceleration; //车辆减速度 0表示速度为0或正在加速度 其他值表示减速度值,单位:m/s2
int nBrake; //刹车,1刹车 0未刹车
int nLLight; //左转向灯,1、点亮 0、不亮
int nRLight; //右转向灯,1、点亮 0、不亮
float fAlpha; //转向角,单位:度
float fSteeingWheelAngle; //方向盘转角,单位:度
}CarInfoInput;
//事件检测配置信息
typedef struct _ObjectEventDetectConfig
{
char szAdasDetectConfigPathName[256]; //adas检测配置
char szAdasTrackConfigPathName[256]; //adas跟踪配置
char szBsdDetectConfigPathName[256]; //右视非鱼眼bsd检测配置(从后往前)
char szRightBsdFrontDetectConfigPathName[256]; //右视非鱼眼bsd检测配置(从前往后)
char szFrontBsdDetectConfigPathName[256]; //前视bsd检测配置
char szRearBsdDetectConfigPathName[256]; //后视bsd检测配置
char szRightFisheyeBsdDetectConfigPathName[256]; //右视鱼眼bsd检测配置
char szBeltDetectConfigPathName[256]; //安全带检测配置
char szOverBoardDetectConfigPathName[256]; //超员检测配置
char szDsmFaceDetectConfigPathName[256]; //dsm人脸检测配置
char szDsmFaceLandMarksDetectConfigPathName[256]; //dsm人脸特征点检测配置
char szDsmFaceVerificationDetectConfigPathName[256]; //dsm人脸认证检测配置
char szDsmFaceFeaturePathName[256]; //dsm人脸特征存储路径配置
char szDsmHeadPoseConfPathName[256]; //dsm头部位姿配置
char szDsmEyeLandMarksDetectConfigPathName[256]; //dsm人眼特征点检测配置
char szDsmMaskDetectConfigPathName[256]; //口罩墨镜检测配置
char szDsmSmokeConfPathName[256]; //抽烟检测配置
char szDsmCallConfPathName[256]; //电话检测配置
char szDsmAliveDetectConfigPathName[256]; //活体检测配置
char szTsrDetectConfigPathName[256]; //tsr检测配置
char szLutTablePathName[256]; //360图像融合标定配置
char szCarPathName[256]; //车辆图像配置
char szCameraIntrinsicPathName[256]; //360相机内参配置
}ObjectEventDetectConfig;
//相机内外参
typedef struct _CameraCalibration
{
int fCarLen; //车长单位mm
int fCarWidth; //车宽(两个轮胎外侧之间的距离)单位mm
int fRefCenter; //相机与车辆中心之间的距离(从驾驶室往外看,左正右负)单位mm
int fRefTop; //相机到前保险杠距离单位mm
int fDisLen2Tyre; //镜头和前轮胎之间的距离单位mm,镜头前方为正向
int fCameraHeight; //相机距离地面高度单位mm
float fCameraFocus; //相机焦距单位mm
float fCameraDx; //sensor尺寸(像平面离散化系数CMOS unit cell size, 单位mm)
float fPitch; //俯仰角默认为0
float fYaw; //偏航角默认为0
}CameraCalibration;
//bsd报警区域
typedef struct _BsdWarnRegion
{
CalibrationPoint tFirstRegionPoint[4]; //一级报警区域4个点组成的任意四边形
CalibrationPoint tSecondRegionPoint[4]; //二级报警区域4个点组成的任意四边形
CalibrationPoint tThirdRegionPoint[4]; //三级报警区域4个点组成的任意四边形
}BsdWarnRegion;
//bsd报警距离
typedef struct _BsdWarnDistance
{
float fFirstWarnDistance; //一级报警距离(单位:mm)
float fSecondWarnDistance; //二级报警距离(单位:mm)
float fThirdWarnDistance; //三级报警距离(单位:mm)
float fFrontWarnDistance; //前方报警距离(单位:mm)
float fLeftWarnDistance; //左报警距离(单位:mm)
float fRightWarnDistance; //右报警距离(单位:mm)
}BsdWarnDistance;
//事件报警参数配置
typedef struct _EventWarnParamConfig
{
bool bStartEventWarnKind[EVENT_WARN_NUM]; //是否启动此类报警,一共21种报警类型0表示EVENT_LDW_LEFT20表示EVENT_HEAD_DOWN顺序与ObjectEventType宏定义一致
int nAbnormalWarnFrameCount[EVENT_WARN_NUM]; //累积多长时间开始报警,用帧数来表示(主要针对dsm)
int nNormalFrameCount[EVENT_WARN_NUM]; //累积多长时间恢复正常,用帧数来表示(主要针对dsm)
int nAbnormalWarnIntervalFrameCount[EVENT_WARN_NUM]; //间隔多长时间进行下一次报警,用帧数来表示(主要针对dsm)
float fAbnormalWarnScoreThreshold[EVENT_WARN_NUM]; //每种异常报警阈值,0-1之间0表示更容易触发报警1表示更难触发报警(主要针对dsm)
float fNormalWarnScoreThreshold[EVENT_WARN_NUM]; //每种报警恢复正常阈值,0-1之间0表示更容易恢复正常1表示更难恢复正常(主要针对dsm)
int nHmwTime; //HMW开启阈值,单位ms
int nPcwTime; //PCW开启阈值,单位ms
int nFcwTime; //FCW报警开启阈值,单位ms
float fHmwVel; //HMW报警车速阈值,单位km/h
float fFcwVel; //FCW报警车速阈值,单位km/h
float fLdwVel; //LDW报警车速阈值,单位km/h
float fPcwVel; //PCW报警车速阈值,单位km/h
float fBsdFirstVel; //BSD一级报警车速阈值,单位km/h
float fBsdSecondVel; //BSD二级报警车速阈值,单位km/h
float fBsdThirdVel; //BSD三级报警车速阈值,单位km/h
int nLdwDistance; //左右车道线距离报警阈值,单位cm(范围:-20cm~20cm越过车道线为负)
float fDsmVel; //DSM报警车速阈值,单位km/h
}EventWarnParamConfig;
//车道线的点阵列(最多四条车道线)
typedef struct _DARW_POINT_INFO
{
unsigned int pSrcPointX[4][600]; //每条车道线的点x坐标
unsigned int pSrcPointY[4][600]; //每条车道线的点y坐标
unsigned int nPointCounters[4]; //每条车道线的点数
int nLaneID[4]; //车道线编号(-1表示不存在此车道线,0,1,2,3表示从左往右的四条车道线)
}DrawPointInfo;
//人脸特征信息
typedef struct _FACE_FEATURE_INFO
{
float fFaceFeature[512]; //人脸特征
int nFaceNum; //人脸数目
int nLeft; //人脸位置左
int nTop; //人脸位置上
int nRight; //人脸位置右
int nBottom; //人脸位置下
int nErrorCode; //错误类型,0-成功1-提取特征失败2-无人脸3-人脸太偏
}FaceFeatureInfo;
//bsd路沿点阵列
typedef struct _CURB_POINT_INFO
{
unsigned int pSrcPointX[600];
unsigned int pSrcPointY[600];
unsigned int nPointCounters;
}CurbPointInfo;
//360相机外参
typedef struct _FisheyeCameraCalibration
{
///////////////////////////以下是相机外参,棋盘格必须保证相对车辆左右对称,上下平齐
float fCarLen; //车长单位mm
float fCarWidth; //车宽(两个轮胎外侧之间的距离)单位mm
float fFrontDistance; //车头到棋盘格的纵向距离单位mm, 默认1000mm
float fRearDistance; //车尾到棋盘格的纵向距离单位mm, 默认1000mm
float fLeftDistance; //车左侧到棋盘格的横向距离单位mm, 默认(2000-fCarWidth/2)mm
float fRightDistance; //车右侧到棋盘格的横向距离单位mm, 默认(2000-fCarWidth/2)mm
float fVisionField; //视野范围单位mm大车默认20000mm, 模型车8000mm
float fBigChessBoardWidth; //大棋盘格宽度单位mm, 默认800mm(如果是缩小版的棋盘格80mm)
float fSmallChessBoardWidth; //小棋盘格高度单位mm, 默认400mm(如果是缩小版的棋盘格40mm)
float fFusionAngle; //融合角度,默认60度
}FisheyeCameraCalibration;
/*
* 函数功能:获取算法库版本号
* 输入参数:pAlglibVersion-算法库版本号
* 输出参数:pAlglibVersion-算法库版本号
* 返回值:0-成功,-1-失败
*/
int MvGetAlglibVersion(char* pAlglibVersion);
//算法结果回调函数
typedef void (*AlgResultProcessFunc)(int nDataChannel, ObjectTrackEventResult* pObjectTrackEventResult, void *pPrivData);
//车道线结果回调函数
typedef void (*AlgLaneLineProcessFunc)(DrawPointInfo* pPointInfo, void *pPrivData);
/*
* 函数功能:目标跟踪事件检测初始化
* 输入参数:pObjectEventDetectConf-事件检测配置信息,nStartDetectChannel-启动检测通道类型nStartDetectChannel=ADAS_DETECT_CHANNEL|BSD_DETECT_CHANNEL|DMS_DETECT_CHANNEL
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvObjectEventDetectInit(ObjectEventDetectConfig *pObjectEventDetectConf, int nStartDetectChannel);
/*
* 函数功能:设置算法结果回调函数
* 输入参数:nDataChannel-通道类型0-adas,1-bsd(从后往前),2-dsm,3-bsd(从前往后),4-belt pFunc--算法结果回调函数, pPrivData-私有信息
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetAlgResultFuncCallback(int nDataChannel,AlgResultProcessFunc pFunc, void *pPrivData);
/*
* 函数功能:设置算法车道线回调函数
* 输入参数:pFunc--算法车道线回调函数, pPrivData-私有信息
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetAlgLaneLineFuncCallback(AlgLaneLineProcessFunc pFunc, void *pPrivData);
/* 函数功能:目标跟踪事件检测(每帧循环调用,结果在回调函数中返回)
* 输入参数:nDataChannel-通道类型0-adas,1-bsd(从后往前),2-dsm,3-bsd(从前往后),4-belt pImageDataInfo--图像数据(adas,bsd:1280*720,dsm:1280*720), pCarInfo-车身信息
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvObjectEventDetect(int nDataChannel, VideoFrameDataInfo* pImageDataInfo, CarInfoInput* pCarInfo);
/*
* 函数功能:目标跟踪事件检测释放
* 输入参数:无
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvObjectEventDetectUnInit();
////////////////////////////////////////////////////////////////////////////
/*
* 函数功能:相机标定(固定灭点)
* 输入参数:pCameraCalibration-相机内外参
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvCameraCalibration(CameraCalibration* pCameraCalibration);
/*
* 函数功能:自学习相机标定
* 输入参数:pCameraCalibration-相机内外参
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvAutoCameraCalibration(CameraCalibration* pCameraCalibration);
/*
* 函数功能:手动相机标定(手动4点标定,只有adas通道会用到)
* 输入参数:pCameraCalibration-相机外参,pCalibrationPoint-标定手动绘制的4个坐标点
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvManualCameraCalibration(CameraCalibration* pCameraCalibration, CalibrationPoint* pCalibrationPoint);
/*
* 函数功能:获取相机标定信息
* 输入参数:pCameraCalibration-相机内外参
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvGetCameraCalibrationInfo(CameraCalibration* pCameraCalibration);
/*
* 函数功能:获取是否自标定完成
* 输入参数:无
* 输出参数:无
* 返回值:0-否,1-是
*/
int MvGetSelfCalibrationStatus();
/*
* 函数功能:获取灭点
* 输入参数:无
* 输出参数:pCalibrationPoint-灭点(基于1280x720图像坐标)
* 返回值:无
*/
void MvGetVanishPoint(CalibrationPoint* pCalibrationPoint);
/*
* 函数功能:设置灭点
* 输入参数:pCalibrationPoint-灭点(基于1280x720图像坐标)
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetVanishPoint(CalibrationPoint* pCalibrationPoint);
////////////////////////////////////////////////////////////////////////////
/*
* 函数功能:设置bsd报警区域
* 输入参数:nDataChannel-通道类型1-bsd(从后往前),3-bsd(从前往后),pBsdWarnRegion-bsd报警区域
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetBsdWarnRegion(int nDataChannel, BsdWarnRegion* pBsdWarnRegion);
/*
* 函数功能:bsd相机标定
* 输入参数:nDataChannel-通道类型1-bsd(从后往前),3-bsd(从前往后),pCameraCalibration-相机内外参,pVanishPoint-灭点,pBsdWarnDistance-bsd报警距离
* 输出参数:pBsdWarnRegion-bsd报警区域
* 返回值:0-成功,-1-失败
*/
int MvBsdCalibration(int nDataChannel, CameraCalibration* pCameraCalibration, CalibrationPoint* pVanishPoint, BsdWarnDistance* pBsdWarnDistance, BsdWarnRegion* pBsdWarnRegion);
/*
* 函数功能:获取bsd灭点位置
* 输入参数:pBsdVanishPt-bsd灭点位置
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvGetBsdVanishPoint(int nDataChannel, CalibrationPoint* pBsdVanishPt) ;
/*
* 函数功能:设置超员报警区域
* 输入参数:tRegionPoint-超员报警区域
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetOverBoardWarnRegion(CalibrationPoint tRegionPoint[4]);
////////////////////////////////////////////////////////////////////////////
/*
* 函数功能:设置dsm检测区域起始位置
* 输入参数:pCropPoint-dsm检测区域起始位置
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetDsmCropPosition(CalibrationPoint* pCropPoint);
/*
* 函数功能:获取dsm检测区域位置
* 输入参数:无
* 输出参数:pPointLeftTop-dsm检测区域左上位置pPointRightBottom-dsm检测区域右下位置
* 返回值:0-成功,-1-失败
*/
int MvGetDsmCropRegion(CalibrationPoint* pPointLeftTop, CalibrationPoint* pPointRightBottom);
/*
* 函数功能:获取jpg人脸特征
* 输入参数:pJpgImageData-jpg图像地址,nJpgImageDataLen-jpg图像大小
* 输出参数:pFaceFeatureInfo-jpg人脸特征信息
* 返回值:0-成功,-1-失败
*/
int MvGetJpgFaceFeature(unsigned char* pJpgImageData, int nJpgImageDataLen, FaceFeatureInfo* pFaceFeatureInfo);
/*
* 函数功能:获取录入人脸特征
* 输入参数:pImageDataInfo-实时图像数据
* 输出参数:pFaceFeatureInfo-人脸特征信息
* 返回值:0-成功,-1-失败
*/
int MvGetFaceFeature(VideoFrameDataInfo* pImageDataInfo, FaceFeatureInfo* pFaceFeatureInfo);
/*
* 函数功能: 获取人脸认证结果
* 输入参数: pFaceFeatureInfo1-实时人脸特征,nFeatureNum1-实时人脸特征数目,pFaceFeatureInfo2-录入的人脸特征,nFeatureNum2-录入的人脸特征数目
* 输出参数: 无
* 返回值: 0-认证成功(同一个人),-1-认证失败 (不是同一个人)
*/
int MvGetFaceVerifyResult(FaceFeatureInfo* pFaceFeatureInfo1, int nFeatureNum1, FaceFeatureInfo* pFaceFeatureInfo2, int nFeatureNum2);
/*
* 函数功能: 获取DSM标定信息
* 输入参数: 无
* 输出参数: pYaw-偏转角(左正右负)pPitch-俯仰角(上正下负)
* 返回值: 0-成功,-1-失败
*/
int MvGetDsmCalibration(float* pYaw, float* pPitch);
/*
* 函数功能: 设置DSM标定信息
* 输入参数: 无
* 输出参数: fYaw-偏转角(左正右负)fPitch-俯仰角(上正下负)
* 返回值: 0-成功,-1-失败
*/
int MvSetDsmCalibration(float fYaw, float fPitch);
/*
* 函数功能: DSM标定
* 输入参数: 无
* 输出参数: pPointLeftTop-dsm检测区域左上位置,fYaw-偏转角(左正右负)fPitch-俯仰角(上正下负)
* 返回值: 0-成功,-1-失败
*/
int MvDsmCalibration(CalibrationPoint* pPointLeftTop, float* pYaw, float* pPitch);
/*
* 函数功能:设置事件报警参数配置(必须在初始化函数后调用)
* 输入参数:pEventWarnParamConfig-事件报警参数配置
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetEventWarnParamConfig(EventWarnParamConfig *pEventWarnParamConfig);
/*
* 函数功能:获取事件报警参数配置(必须在初始化函数后调用)
* 输入参数:无
* 输出参数:pEventWarnParamConfig-事件报警参数配置
* 返回值:0-成功,-1-失败
*/
int MvGetEventWarnParamConfig(EventWarnParamConfig *pEventWarnParamConfig);
/*
* 函数功能:设置打印接口
* 输入参数:bPrintf-是否打印
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetPrintf(bool bPrintf);
/*
* 函数功能:设置签名接口(在初始化函数之前调用)
* 输入参数:szSignPath-签名写入路径
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetSignPath(char szSignPath[256]);
/*
* 函数功能:设置授权服务器地址(在初始化函数之前调用)
* 输入参数:szAuthHost-授权服务器地址
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetAuthHost(char szAuthHost[256]);
/*
* 函数功能:获取授权认证状态
* 输入参数:无
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvGetAuthStatus();
/*
* 函数功能: 获取芯片ID
* 输入参数: pChipId-芯片ID,32个字节长度
* 输出参数: 无
* 返回值: 0-成功,-1-失败
*/
int MvGetAuthChipId(unsigned char* pChipId);
/*
* 函数功能:获取车距线坐标
* 输入参数:fDistance-车距线距离(单位:mm,建议10米),fLaneWidth-车道宽度(单位:mm,建议3米)
* 输出参数:pLinePoint-车距线两个端点图像坐标
* 返回值:0-成功,-1-失败
*/
int MvGetDistanceLine(float fDistance, float fLaneWidth, VirtualLinePoint* pLinePoint);
/*
* 函数功能:获取虚拟车道线坐标
* 输入参数:fNearDistance-近端线距离(单位:mm,建议10米),fFarDistance-远端线距离(单位:mm,建议30米),fLaneWidth-车道宽度(单位:mm,建议3米)
* 输出参数:pLeftLinePoint-左侧虚拟车道线两个端点图像坐标pRightLinePoint-右侧虚拟车道线两个端点图像坐标
* 返回值:0-成功,-1-失败
*/
int MvGetVirtualLaneLine(float fNearDistance, float fFarDistance, float fLaneWidth, VirtualLinePoint* pLeftLinePoint, VirtualLinePoint* pRightLinePoint);
/*
* 函数功能:获取最小车距
* 输入参数:无
* 输出参数:无
* 返回值:fDistance-最小车距(单位:mm)
*/
float MvGetNearDistance();
/*
* 函数功能:设置fcw报警灵敏
* 输入参数:nFcwSensitivity-灵敏度等级0-最低灵敏度,1-中灵敏度,2-高灵敏度
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetFcwWarnSensitivity(int nFcwSensitivity);
/*
* 函数功能:获取授权功能类型
* 输入参数:无
* 输出参数:无
* 返回值:授权功能类型
*/
int MvGetAuthFunctionType();
/*
* 函数功能: 设置imei ID
* 输入参数: chImeiId-芯片ID,16个字节,十六进制表示
* 输出参数: 无
* 返回值: 0-成功,-1-失败
*/
int MvSetImeiId(unsigned char chImeiId[16]);
/*
* 函数功能:设置dsm标定模式
* 输入参数:nMode-0-表示自动模式1-表示手动模式, fVelocityThreshold-自标定速度阈值,fTimeThreshold-自标定时间阈值,fAngleThreshold-自标定角度阈值
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetDsmCalibrationMode(int nMode, float fVelocityThreshold, float fTimeThreshold, float fAngleThreshold);
/* 函数功能:360图像融合
* 输入参数:pInImageDataInfo--4路输入图像数据(1280*720),顺序分别是0-前, 1-右, 2-后, 3-左, 需要保证4路相机同步,pCarInfo-车身信息
* 输出参数:pOutImageDataInfo-融合图像数据(640x640),需要在外部分配内存空间
* 返回值:0-成功,-1-失败
*/
int MvImageFusion(VideoFrameDataInfo* pInImageDataInfo[4], VideoFrameDataInfo* pOutImageDataInfo, CarInfoInput* pCarInfo);
/* 函数功能:360图像融合标定
* 输入参数:pCalibrationConfigPathName-标定文件路径名称,pInImageDataInfo--4路带有棋盘格的输入图像数据(1280*720),顺序分别是0-前, 1-右, 2-后, 3-左,pCameraCalibration-相机内外参,pImagePoints[4][8]-手动标定点nMode-0手动标定,1自动标定,pCalibrationRectRegion-自动标定矩形区域
* 输出参数:pDeviation-标定误差,一般>10表示误差很大说明参数有问题需要重新标定, pErrorInfo-360自动标定错误返回信息,pOutImageDataInfo-自动标定返回图像
* 返回值:0-成功,-1-失败
*/
int MvImageFusionCalibration(char* pCalibrationConfigPathName, VideoFrameDataInfo* pInImageDataInfo[4], FisheyeCameraCalibration* pCameraCalibration, CalibrationFloatPoint* pImagePoints, int nMode,float* pDeviation, CalibrationRectRegion* pCalibrationRectRegion, CalibrationErrorInfo* pErrorInfo, VideoFrameDataInfo* pOutImageDataInfo);
/*
* 函数功能:启动授权
* 输入参数:nStartDetectChannel-启动检测功能类型nStartDetectChannel=ADAS_FUNCTION_TYPE|BSD_FUNCTION_TYPE|DSM_FUNCTION_TYPE|SECOND_BSD_FUNCTION_TYPE,nMode-是否修改授权0-不修改1-修改
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvReAuthorization(int nStartDetectChannel);
/*
* 函数功能:启动停止连接授权服务器
* 输入参数:bConnectAuthServer-1-启动连接, 0-停止连接
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvConnectAuthServer(bool bConnectAuthServer);
/*
* 函数功能:设置是否tsr检测
* 输入参数:bSetTsrDetect-是否tsr检测
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetTsrDetect(bool bSetTsrDetect);
/*
* 函数功能:设置检测通道(最大同时支持4个通道)
* 输入参数:nDetectChannel-检测通道类型nDetectChannel=RIGHT_BSD_FRONT_DETECT_CHANNEL|RIGHT_BSD_REAR_DETECT_CHANNEL|LEFT_BSD_FRONT_DETECT_CHANNEL|LEFT_BSD_REAR_DETECT_CHANNEL
* 输出参数:无
* 返回值:0-成功,-1-失败
*/
int MvSetDetectChannel(int nDetectChannel);
#ifdef __cplusplus
}
#endif
#endif // _OBJECT_EVENT_DETECT_H_