#include "detector.h"
|
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <string.h>
|
|
#include "THFaceImage_i.h"
|
|
#include "csdk_struct.h"
|
|
namespace csdk_wrap
|
{
|
int init_face_detector(const int tm, const int gi, const int minFaces, const int rollAngle,
|
VecFunc &vec){
|
int ret = 0;
|
if (gi < 0) {
|
THFI_Param *param = new THFI_Param[tm];
|
ret = THFI_Create(tm, param);
|
delete[] param;
|
} else {
|
THFI_Param_Ex *param = new THFI_Param_Ex[tm];
|
THFI_Param detParam;
|
detParam.nMinFaceSize = minFaces;
|
detParam.nRollAngle = rollAngle;
|
for (int i = 0; i < tm; i++) {
|
param[i].tp = detParam;
|
param[i].nDeviceID = gi;
|
}
|
ret = THFI_Create_Ex(tm, param);
|
delete[] param;
|
}
|
if(ret != tm){
|
printf("create face detector failed!\n");
|
}else{
|
vec.emplace_back([]{THFI_Release();});
|
}
|
|
return ret;
|
}
|
|
cFacePos* face_detect(int *faceCount, const cIMAGE *img, const int channel){
|
if(channel < 0 || !img){
|
return NULL;
|
}
|
cFacePos *fpos = NULL;
|
::THFI_FacePos facesPos[30];
|
int faceNum = THFI_DetectFace(channel, (BYTE*)(img->data), 24, img->width, img->height, facesPos, 30);
|
|
if (faceNum > 0) {
|
fpos = (cFacePos*)malloc(faceNum * sizeof(cFacePos));
|
*faceCount = faceNum;
|
memcpy(fpos, facesPos, sizeof(THFI_FacePos) * faceNum);
|
|
}else{
|
// printf ("no face detected\n");
|
}
|
return fpos;
|
}
|
|
} // csdk_wrap
|