| | |
| | | //size_t buffSize;
|
| | | //size_t buffSizeMax;
|
| | | MB_Frame lastFrame;
|
| | | PipeMaterial pmList[2];
|
| | | SensetimeFaceTrackConfig config;
|
| | | st_ff_vect_t faceFeatures;
|
| | |
|
| | | bool payError;
|
| | |
|
| | |
| | |
|
| | | PL_SensetimeFaceTrack_Internal() :
|
| | | //buffSize(0), buffSizeMax(sizeof(buffer)),
|
| | | lastFrame(), config(), payError(true), |
| | | lastFrame(), pmList(), config(), faceFeatures(), payError(true), |
| | | handle_track(nullptr)
|
| | | {
|
| | | }
|
| | |
| | |
|
| | | MB_Frame _lastFrame;
|
| | | lastFrame = _lastFrame;
|
| | | |
| | | PipeMaterial _pm;
|
| | | pmList[0] = _pm;
|
| | | pmList[1] = _pm;
|
| | | |
| | | SensetimeFaceTrackConfig _config;
|
| | | config = _config;
|
| | |
|
| | |
| | | cv::Mat yMat(cv::Size(width,height), CV_8UC1, buffer);
|
| | | for (int i = 0; i < face_count; i++)
|
| | | {
|
| | | SensetimeFaceFeature faceFeature;
|
| | | faceFeature.rect.leftTop.x = p_face[i].rect.left;
|
| | | faceFeature.rect.leftTop.y = p_face[i].rect.top;
|
| | | faceFeature.rect.rightBottom.x = p_face[i].rect.right;
|
| | | faceFeature.rect.rightBottom.y = p_face[i].rect.bottom;
|
| | | faceFeature.id = p_face[i].ID;
|
| | | faceFeature.yaw = p_face[i].yaw;
|
| | | faceFeature.pitch = p_face[i].pitch;
|
| | | faceFeature.roll = p_face[i].roll;
|
| | | faceFeature.eyeDistance = p_face[i].eye_dist;
|
| | | |
| | | LOGP(DEBUG, "face: %d-----[%d, %d, %d, %d]-----id: %d", i,
|
| | | p_face[i].rect.left, p_face[i].rect.top,
|
| | | p_face[i].rect.right, p_face[i].rect.bottom, p_face[i].ID);
|
| | |
| | |
|
| | | for (int j = 0; j < p_face[i].points_count; j++)
|
| | | {
|
| | | |
| | | FacePoint featurePoint;
|
| | | featurePoint.x = p_face[i].points_array[j].x;
|
| | | featurePoint.y = p_face[i].points_array[j].y;
|
| | | faceFeature.featurePoints.push_back(featurePoint);
|
| | |
|
| | | if (in->config.draw_face_feature_point)
|
| | | {
|
| | |
| | | p_face[i].points_array[j].y), 1, cv::Scalar(255, 255, 255));
|
| | | }
|
| | | }
|
| | | |
| | | if (in->config.generate_face_feature)
|
| | | in->faceFeatures.push_back(faceFeature);
|
| | | }
|
| | |
|
| | | //if (face_count > 0)
|
| | |
| | | return false;
|
| | | }
|
| | |
|
| | | in->faceFeatures.clear();
|
| | | int face_count = doFaceTrack(
|
| | | in, (uint8_t*)frame->buffer, frame->width, frame->height, frame->width, CV_PIX_FMT_YUV420P);
|
| | | if (face_count < 0)
|
| | |
| | | {
|
| | | PL_SensetimeFaceTrack_Internal* in = (PL_SensetimeFaceTrack_Internal*)internal;
|
| | |
|
| | | if (!in->payError)
|
| | | if (in->payError)
|
| | | {
|
| | | pm.former = this;
|
| | | return false;
|
| | | }
|
| | |
|
| | | if (!in->config.generate_face_feature)
|
| | | {
|
| | | pm.type = PipeMaterial::PMT_FRAME;
|
| | | pm.buffer = &(in->lastFrame);
|
| | | pm.buffSize = 0;
|
| | | pm.former = this;
|
| | | }
|
| | | else
|
| | | {
|
| | | in->pmList[0].type = PipeMaterial::PMT_FRAME;
|
| | | in->pmList[0].buffer = &(in->lastFrame);
|
| | | in->pmList[0].buffSize = 0;
|
| | | in->pmList[0].former = this;
|
| | | |
| | | in->pmList[1].type = PipeMaterial::PMT_BYTES;
|
| | | in->pmList[1].buffer = &(in->faceFeatures);
|
| | | in->pmList[1].buffSize = 0;
|
| | | in->pmList[1].former = this;
|
| | | |
| | | pm.type = PipeMaterial::PMT_PM_LIST;
|
| | | pm.buffer = in->pmList;
|
| | | pm.buffSize = sizeof(in->pmList) / sizeof(PipeMaterial);
|
| | | }
|
| | | |
| | | pm.former = this;
|
| | | return !in->payError;
|
| | | return true;
|
| | | }
|