New file |
| | |
| | | #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 |