face_detect.h 5.95 KB
/************************************************************
* Version: face_detect_v1.4.1.20201221.x86_64.gpu
* CopyRight: 中科视语(北京)科技有限公司
* UpdateDate: 20201221
* Content:
************************************************************/
#ifndef FACEDETECT_H_
#define FACEDETECT_H_

#ifdef _MSC_VER
#ifdef FACEDETECT_EXPORTS
#define FACEDETECT_API __declspec(dllexport)
#else
#define FACEDETECT_API __declspec(dllimport)
#endif
#else
#define FACEDETECT_API __attribute__ ((visibility ("default")))
#endif
#ifdef __cplusplus
extern "C"
{
#endif

#include "sy_common.h"		//通用数据结构体定义

// #define GPUIMG_PROCESS

#ifndef FACIALFEAPOINTSIZE		//关键点检测支持25个点
#define FACIALFEAPOINTSIZE 25
#endif


#ifndef __FD_INFO__
#define __FD_INFO__
	typedef struct fd_info {
		sy_rect face_position;									//人脸位置
		float face_pos_score;									//人脸框置信度
		sy_point facial_fea_point[FACIALFEAPOINTSIZE];			//人脸关键点位置信息
		int occlusion;				                            //人脸遮挡度,范围值为0-100,越大表示人脸遮挡程度越高
		int clarity;											//人脸清晰度,范围值为0-100,越大表示图像越清晰,人脸清晰度判别建议阈值为30
		int brightness;											//人脸亮度,只有3种可能的值:[-1->太暗,0->正常,1->太亮],亮度结果会受亮度阈值参数brightness_min和brightness_max影响
		//int hat;												//带帽子,范围为0-100,越大表示越可能有佩戴帽子,建议判别阈值为50
		//int glass;												//带眼镜,范围为0-100,越大表示越可能有戴眼镜,建议判别阈值为70
		float roll;												//姿态角
		float yaw;												//姿态角
		float pitch;											//姿态角
		float score;											//人脸置信度
	} fd_info;
#endif

#ifndef __FD_RESULT__
#define __FD_RESULT__
	typedef struct fd_result {		//结果结构体
		fd_info *info;				//内存由外部申请
		int count;					//人脸个数
	} fd_result;
#endif

#ifndef __FD_PARAM__
#define __FD_PARAM__
	typedef struct fd_param
	{
		sy_command facial_fea_point_config;			//是否启动关键点检测
		sy_command pose_config;						//是否启动姿态角
		sy_command quality_config;					//是否启动质量检测
		sy_command score_config;					//是否启动人脸置信度
		// int log;									//日志
		// int mode;								//运行模式(DEVICE_GPU / DEVICE_CPU)
		int devId;									//指定显卡id
		float thresld;								//检测阈值 建议0.7
		
		int max_result_count;						//检测结果目标数上限
		// int max_batch_size_detect;				//检测批处理检测数量上限
		// int max_batch_size_ldmk;					//关键点批处理检测数量上限
		// int max_batch_size_pose;					//姿态角批处理检测数量上限
		// int max_batch_size_score;				//置信度批处理检测数量上限
		// int max_batch_size_blurglass;			//质量(模糊)批处理检测数量上限
		// //int max_batch_size_hat;					//质量(帽子)批处理检测数量上限
		// int max_batch_size_occlusion;			//质量(遮挡)批处理检测数量上限
		
		char * auth_license;
		char* det_modelNames;		 //人脸检测
		char* ldmk_modelNames;  	 //人脸关键点
		char* pose_modelNames;  	 //人脸姿态
		char* score_modelNames;		 //人脸置信度
		char* fuzzy_modelNames;  	 //人脸质量_模糊
		char* occlusion_modelNames;  //人脸质量_遮挡

		fd_param() : facial_fea_point_config(SY_CONFIG_OPEN), pose_config(SY_CONFIG_OPEN), \
			quality_config(SY_CONFIG_OPEN), score_config(SY_CONFIG_OPEN), thresld(0.6), devId(0), max_result_count(20), auth_license("") {};	//默认功能全部启动
	}fd_param;
#endif

	/*************************************************************************
	* function: fd_init
	* purpose: init resources
	* param:
	[in] handle 		- handle
	[in] param 			- init param
	* return: success(0) or error code(<0)
	* notes: null
	*************************************************************************/
	FACEDETECT_API int fd_init(void ** handle, fd_param param);


	/*************************************************************************
	* function: fd_release
	* purpose: release sources
	* param:
	[in] handle				- handle
	* return: null
	* notes: null
	*************************************************************************/
	FACEDETECT_API void fd_release(void ** handle);

	/*************************************************************************
	* function: fd_get_version
	* purpose: get sdk version
	* param: null
	* return: null
	* notes: null
	*************************************************************************/
	FACEDETECT_API const char *  fd_get_version();

	/*************************************************************************
	* function: fd_detect_batch
	* purpose: detect faces
	* param:
	[in] handle				- handle
	[in] img_data_array		- data array
	[in] format				- data format
	[in] batch_size			- batch size
	[in] result				- face detect result
	* return: success(0) or error code(<0)
	* notes: null
	*************************************************************************/
	//FACEDETECT_API int fd_detect_batch(void * handle, sy_img * img_data_array, sy_format format, int batch_size, fd_result *result);

	/*************************************************************************
	* function: fd_detect
	* purpose: detect faces
	* param:
	[in] handle				- handle
	[in] img_data_array		- data array
	[in] format				- data format
	[in] result				- face detect result
	* return: success(0) or error code(<0)
	* notes: null
	*************************************************************************/
	FACEDETECT_API int fd_detect(void * handle, sy_img img_data, sy_format format, fd_result *result);


	FACEDETECT_API int fd_detect_batch(void * handle, sy_img * img_data_array, sy_format format, int batch_size, fd_result *result);
#ifdef __cplusplus
};
#endif

#endif