test: add test for gstanalytics utility

- IoU test

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8805>
This commit is contained in:
Daniel Morin 2025-04-09 16:19:54 -04:00 committed by GStreamer Marge Bot
parent e887b2e20e
commit 42e31ee5ef

View File

@ -1581,6 +1581,224 @@ GST_START_TEST (test_associate_segmentation_meta)
GST_END_TEST;
GST_START_TEST (test_iou_int)
{
gint bb1_x = 30, bb1_y = 30, bb1_w = 10, bb1_h = 10;
gint bb2_x = 35, bb2_y = 30, bb2_w = 10, bb2_h = 10;
gfloat iou;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_y = 35;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 175.0);
bb2_x = 40;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 0.0 / 200.0);
bb2_x = 30;
bb2_y = 35;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 25;
bb2_y = 35;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 175.0);
bb2_x = 25;
bb2_y = 30;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 25;
bb2_y = 25;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 175.0);
bb2_x = 30;
bb2_y = 25;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 30;
bb2_y = 25;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 30;
bb2_y = 30;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 100.0 / 100.0);
bb1_x = 0;
bb1_y = 0;
bb1_w = 10;
bb1_h = 10;
bb2_x = -5;
bb2_y = 0;
bb2_w = 10;
bb2_h = 10;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 100.0);
bb2_y = -5;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 100.0);
bb1_x = -5;
bb1_y = -5;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 25.0);
bb1_x = -5;
bb1_y = 0;
bb2_x = 0;
bb2_y = -5;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 75.0);
bb2_y = -10;
iou = gst_analytics_image_util_iou_int (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 0.0 / 100.0);
}
GST_END_TEST;
GST_START_TEST (test_iou_float)
{
gfloat bb1_x = 30.0, bb1_y = 30.0, bb1_w = 10.0, bb1_h = 10.0;
gfloat bb2_x = 35.0, bb2_y = 30.0, bb2_w = 10.0, bb2_h = 10.0;
gfloat iou;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_y = 35;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 175.0);
bb2_x = 40;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 0.0 / 200.0);
bb2_x = 30;
bb2_y = 35;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 25;
bb2_y = 35;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 175.0);
bb2_x = 25;
bb2_y = 30;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 25;
bb2_y = 25;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 175.0);
bb2_x = 30;
bb2_y = 25;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 30;
bb2_y = 25;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 150.0);
bb2_x = 30;
bb2_y = 30;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 100.0 / 100.0);
bb1_x = 0;
bb1_y = 0;
bb1_w = 10;
bb1_h = 10;
bb2_x = -5;
bb2_y = 0;
bb2_w = 10;
bb2_h = 10;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 50.0 / 100.0);
bb2_y = -5;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 100.0);
bb1_x = -5;
bb1_y = -5;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 25.0);
bb1_x = -5;
bb1_y = 0;
bb2_x = 0;
bb2_y = -5;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 25.0 / 75.0);
bb2_y = -10;
iou = gst_analytics_image_util_iou_float (bb1_x, bb1_y, bb1_w, bb1_h, bb2_x,
bb2_y, bb2_w, bb2_h);
fail_unless_equals_float (iou, 0.0 / 100.0);
}
GST_END_TEST;
static Suite *
analyticmeta_suite (void)
{
@ -1592,6 +1810,7 @@ analyticmeta_suite (void)
TCase *tc_chain_od_cls;
TCase *tc_chain_tracking;
TCase *tc_chain_segmentation;
TCase *tc_chain_util;
s = suite_create ("Analytic Meta Library");
@ -1637,6 +1856,11 @@ analyticmeta_suite (void)
tcase_add_test (tc_chain_segmentation, test_add_segmentation_meta);
tcase_add_test (tc_chain_segmentation, test_associate_segmentation_meta);
tc_chain_util = tcase_create ("Utility");
suite_add_tcase (s, tc_chain_util);
tcase_add_test (tc_chain_util, test_iou_int);
tcase_add_test (tc_chain_util, test_iou_float);
return s;
}