correction heuristic algorithm
authorKwang Son <k.son@samsung.com>
Tue, 22 Sep 2020 01:01:59 +0000 (10:01 +0900)
committerKwang Son <k.son@samsung.com>
Tue, 22 Sep 2020 01:01:59 +0000 (10:01 +0900)
Change-Id: I259bddb9525075d377b1992b9fc3f1523d21a6cf

test/testsuites/stream_infer/stream_infer.c

index f4d9b58335d59c41e427f513320a9a7868ff7fa0..f09ad118dc82658e1d123aea2d25a2ee04a8b9db 100644 (file)
@@ -611,11 +611,15 @@ draw_overlay_pose (GstElement * overlay, cairo_t * cr, guint64 timestamp,
        snprintf(tmpText[2], 1024, "Count: %2d", hpPoseCount);
 
 
+
        cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.7);
        cairo_move_to(cr, 400.0, 30.0);
        cairo_show_text(cr, howToText[0]);
        cairo_move_to(cr, 420.0, 45.0);
        cairo_show_text(cr, howToText[1]);
+
+
+       //accept
        if (hpPoseScore >= thPoseScore) {
                if (hpPoseHoldTime > thResetCount)
                        cairo_set_source_rgba(cr, 0.0, 0.1, 0.9, 0.7);
@@ -628,8 +632,10 @@ draw_overlay_pose (GstElement * overlay, cairo_t * cr, guint64 timestamp,
                cairo_show_text(cr, tmpText[1]);
                cairo_move_to(cr, 420.0, 90.0);
                cairo_show_text(cr, tmpText[2]);
+       
 
-       } else {
+
+       } else { // wrong
                cairo_set_source_rgba(cr, 0.9, 0.1, 0.0, 0.7);
                cairo_move_to(cr, 420.0, 60.0);
                cairo_show_text(cr, tmpText[0]);
@@ -637,6 +643,66 @@ draw_overlay_pose (GstElement * overlay, cairo_t * cr, guint64 timestamp,
                cairo_show_text(cr, tmpText[1]);
                cairo_move_to(cr, 420.0, 90.0);
                cairo_show_text(cr, tmpText[2]);
+
+               // can not find body
+               for(int ilb=0;ilb < 6; ilb++)
+               {
+                   if(humanSkeleton.scores[ilb+10] < 0.2)
+                   {
+                       cairo_set_font_size(cr,30);
+                       cairo_move_to(cr, 150.0, 200.0);
+                       cairo_show_text(cr, "Can not find your lower body");
+                       cairo_move_to(cr, 150.0, 250.0);
+                       cairo_show_text(cr, "get into camera view");
+                       return;
+                   }
+               }
+
+               //correction
+               float tx = humanSkeleton.prevPose[10].x;
+               float ty = humanSkeleton.prevPose[10].y;
+               float lx = humanSkeleton.prevPose[12].x;
+               float ly = humanSkeleton.prevPose[12].y;
+               float rx = humanSkeleton.prevPose[15].x;
+               float ry = humanSkeleton.prevPose[15].y;
+               char CorrectionText[1024];
+               float leg_len = sqrt(((tx-lx)*(tx-lx))+((ty-ly)*(ty-ly)));
+               float step_wide = sqrt(((lx-rx)*(lx-rx))+((ly-ry)*(ly-ry)));;
+
+               cairo_set_source_rgba(cr, 0.5, 0.5, 0.0, 0.5);
+               cairo_set_line_width(cr, 10.0);
+               if(step_wide < leg_len * 0.7) // step wider
+               {
+                       float x1 = humanSkeleton.prevPose[12].x;
+                       float x2 = humanSkeleton.prevPose[15].x;
+                       float y1 = humanSkeleton.prevPose[12].y;
+                       float y2 = humanSkeleton.prevPose[15].y;
+
+                       cairo_move_to(cr, x1-15, y1);
+                       cairo_line_to(cr, x2+15 ,y2);
+                       cairo_stroke(cr);
+                       snprintf(CorrectionText, 1024, "Step wider");
+
+               }
+               else
+               {
+                       cairo_set_source_rgba(cr, 0.5, 0.5, 0.0, 0.5);
+                       cairo_set_line_width(cr, 10.0);
+                       float x1 = humanSkeleton.prevPose[10].x;
+                       float x2 = humanSkeleton.prevPose[11].x;
+                       float y1 = humanSkeleton.prevPose[10].y;
+                       float y2 = humanSkeleton.prevPose[11].y;
+                       float gdistance_square = ((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1));
+                       float move = sqrt(gdistance_square / 2.44);
+
+                       cairo_move_to(cr, x1, y1);
+                       cairo_line_to(cr, x1 - 1.2*move, y1 + move);
+                       cairo_stroke(cr);
+                       snprintf(CorrectionText, 1024, "Pretend sit down to fit line");
+               }
+               cairo_set_font_size(cr,30);
+               cairo_move_to(cr, 150.0, 200.0);
+               cairo_show_text(cr, CorrectionText);
        }
 }
 
@@ -1550,8 +1616,8 @@ static int app_create(void *data)
 
 
        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);
 
                mv_pose_create(&hpPoser);
                mv_pose_set_from_file(hpPoser,
@@ -1728,7 +1794,7 @@ static int app_create(void *data)
        g_signal_connect (coverlay, "caps-changed", G_CALLBACK (prepare_overlay), overlay_state);
 
        if (!ad->filename) {
-               g_object_set(G_OBJECT(source), "device", "/dev/video8", NULL); // 252
+               g_object_set(G_OBJECT(source), "device", "/dev/video252", NULL); // 252
        } else {
                g_object_set(G_OBJECT(source), "location", ad->filename, NULL);
        }