float score = 0.0f;
int cnt = 0;
for (int n = 0; n < number_of_pose_estimation; ++n) {
- humanSkeleton.pose[n].x = locations->landmarks[n].point.x;
- humanSkeleton.pose[n].y = locations->landmarks[n].point.y;
+
+ //humanSkeleton.pose[n].x = (int)(640.f*(float)(locations->landmarks[n].point.x + poseRoi.point.x)/192.f);
+ //humanSkeleton.pose[n].y = (int)(480.f*(float)(locations->landmarks[n].point.y + poseRoi.point.y)/192.f);
+
+
+ humanSkeleton.pose[n].x = (int)(640.f*(float)(locations->landmarks[n].point.x)/192.f);
+ humanSkeleton.pose[n].y = (int)(480.f*(float)(locations->landmarks[n].point.y)/192.f);
humanSkeleton.scores[n] = locations->landmarks[n].score;
+ /*
if (score >= 0.0 ) {
score += humanSkeleton.scores[n];
cnt++;
}
+ */
//printf("(%d,%d): %f\n", humanSkeleton.pose[n].x, humanSkeleton.pose[n].y, confidences[n]);
//printf("(%d,%d)\n", humanSkeleton.pose[n].x, humanSkeleton.pose[n].y);
}
- score /= (float)cnt;
+ humanSkeleton.IsDetected = true;
+ //score /= (float)cnt;
+ /*
if (score >= 0.5) {
humanSkeleton.IsDetected = true;
} else {
humanSkeleton.IsDetected = false;
humanSkeleton.label = -1;
}
+ */
}
static gboolean
clock_gettime(CLOCK_MONOTONIC, &s_tspec);
- mv_inference_pose_landmark_detect(mv_src_p, hp_mv_infer, NULL, _human_pose_cb, NULL);
+ mv_inference_pose_landmark_detect(mv_src_p, hp_mv_infer, &poseRoi, _human_pose_cb, NULL);
clock_gettime(CLOCK_MONOTONIC, &e_tspec);
struct timespec diffspec = diff(s_tspec, e_tspec);
cairo_set_line_width(cr, 2.0);
+ float poseWeight = 0.7f;
+ float prevPoseWeight = 0.3f;
if (!humanSkeleton.IsDetected)
return;
+ /*
//
if (humanSkeleton.isPrevPose == false) {
humanSkeleton.prevPose[1] = humanSkeleton.pose[1];
}
}
}
+*/
+ for (int k = 0; k < 16; ++k) {
+ if (humanSkeleton.isPrevPose == false) {
+ humanSkeleton.prevPose[k] = humanSkeleton.pose[k];
+ } else {
+ humanSkeleton.prevPose[k].x = (poseWeight * humanSkeleton.pose[k].x +
+ prevPoseWeight * humanSkeleton.prevPose[k].x);
+ humanSkeleton.prevPose[k].y = (poseWeight * humanSkeleton.pose[k].y +
+ prevPoseWeight * humanSkeleton.prevPose[k].y);
+ }
+ }
+
+ for (int k = 0; k < 16; ++k) {
+ if (humanSkeleton.scores[k] > 0.0f) {
+ cairo_arc(cr, humanSkeleton.prevPose[k].x, humanSkeleton.prevPose[k].y, 3,0, 2*M_PI);
+ cairo_stroke(cr);
+ }
+ }
+/*
//
//draw..
// head - neck
}
}
cairo_stroke(cr);
+ */
}
static void
MV_INFERENCE_MODEL_WEIGHT_FILE_PATH,
PE_TFLITE_CPM_WEIGHT_PATH);
+ mv_engine_config_set_string_attribute(
+ mv_engine_cfg,
+ MV_INFERENCE_MODEL_USER_FILE_PATH,
+ PE_POSE_LABEL_PATH);
+
mv_engine_config_set_int_attribute(mv_engine_cfg,
MV_INFERENCE_INPUT_DATA_TYPE,
MV_INFERENCE_DATA_FLOAT32);
if (ad->modelType == MODEL_TYPE_POSE_CPM) {
- //err = perform_armnn_human_pose_cpm_configure(hp_mv_engine_cfg);
- err = perform_tflite_human_pose_cpm_configure(hp_mv_engine_cfg);
+ err = perform_armnn_human_pose_cpm_configure(hp_mv_engine_cfg);
+ //err = perform_tflite_human_pose_cpm_configure(hp_mv_engine_cfg);
} else if (ad->modelType == MODEL_TYPE_POSE_HAND_AICLite) {
outputTensorData = (void*)calloc(56*56*21, sizeof(float));
err = perform_tflite_hand_detection_AIC(hp_mv_engine_cfg);
g_object_set(G_OBJECT(vrsink), "signal-handoffs", TRUE, NULL);
if (ad->modelType == MODEL_TYPE_POSE_CPM) {
- handler_p = g_signal_connect (vrsink, "handoff", G_CALLBACK(_pose_est_handoff), outputTensorData);
+ handler_p = g_signal_connect (vrsink, "handoff", G_CALLBACK(_pose_est_handoff), NULL);
} else {
handler_p = g_signal_connect (vrsink, "handoff", G_CALLBACK(_hand_est_handoff), outputTensorData);
}
thValArm = (float)atoi(argv[3])/100.f;
thValLeg = (float)atoi(argv[4])/100.f;
- poseRoi.point.x = 0;
+ poseRoi.point.x = 50;
poseRoi.point.y = 0;
- poseRoi.width = 0;
- poseRoi.height = 0;
+ poseRoi.width = 100;
+ poseRoi.height = 192;
} else {
if (argc > 2) {
ad.filename2 = g_strdup(argv[2]);