| | |
| | | // |
| | | |
| | | #include "FaceTrackingWrapper.h" |
| | | #include "Debug.h" |
| | | |
| | | #include <FaceDetectServer/rpc/FaceServer.h> |
| | | #include <opencv2/opencv.hpp> |
| | | |
| | | static FaceTrackingWrapper g_faceTrackingWrapper; |
| | | static std::map<std::string, int> g_channelCache; |
| | | |
| | | static ::FaceDetect::Faces faceTrackingFunc(int channel, cv::Mat &image) { |
| | | FaceDetect::Faces faces; |
| | | int channel = 0; |
| | | BasicFace::FaceImage faceImage{image.cols, image.rows, image.step, image.data}; |
| | | |
| | | THFT_FaceInfo facePos[MAX_DETECT_FACE]; |
| | | int faceNum = THFT_FaceTracking(channel, image.data, facePos); |
| | | |
| | | if (faceNum > 0) { |
| | | for (int i = 0; i < faceNum; i++) { |
| | | FaceDetect::FacePos face; |
| | | auto &pos = facesPos[i]; |
| | | memcpy(&face, &pos, sizeof(pos) - sizeof(pos.pFacialData) - sizeof(pos.nFaceID)); |
| | | face.pFacialData.resize(sizeof(pos.pFacialData)); |
| | | memcpy(face.pFacialData.data(), pos.pFacialData, sizeof(pos.pFacialData)); |
| | | face.pfaceId = pos.nFaceID; |
| | | // DBG(face.fAngle.confidence); |
| | | faces.push_back(face); |
| | | } |
| | | } else { |
| | | DBG("Face num is 0"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | FaceTrackingWrapper::FaceTrackingWrapper() { |