diff --git a/changelog.d/20240510_095000_boris_fixed_analytics_for_skeletons.md b/changelog.d/20240510_095000_boris_fixed_analytics_for_skeletons.md new file mode 100644 index 00000000000..195fbb45e3d --- /dev/null +++ b/changelog.d/20240510_095000_boris_fixed_analytics_for_skeletons.md @@ -0,0 +1,4 @@ +### Fixed + +- Analytic reports incorrect count of objects for a skeleton track/shape + () diff --git a/changelog.d/20240510_095034_boris_fixed_analytics_for_skeletons.md b/changelog.d/20240510_095034_boris_fixed_analytics_for_skeletons.md new file mode 100644 index 00000000000..23de54ca9d0 --- /dev/null +++ b/changelog.d/20240510_095034_boris_fixed_analytics_for_skeletons.md @@ -0,0 +1,4 @@ +### Fixed + +- Analytic reports incorrect number of objects for a track (always less by 1) + () diff --git a/cvat/apps/analytics_report/report/primary_metrics/annotation_speed.py b/cvat/apps/analytics_report/report/primary_metrics/annotation_speed.py index b8fee146594..a3a0d3afbd9 100644 --- a/cvat/apps/analytics_report/report/primary_metrics/annotation_speed.py +++ b/cvat/apps/analytics_report/report/primary_metrics/annotation_speed.py @@ -18,7 +18,7 @@ PrimaryMetricBase, ) from cvat.apps.dataset_manager.task import merge_table_rows -from cvat.apps.engine.models import SourceType +from cvat.apps.engine.models import ShapeType, SourceType class JobAnnotationSpeedExtractor(DataExtractorBase): @@ -75,20 +75,21 @@ def get_tags_count(): def get_shapes_count(): return ( - self._db_obj.labeledshape_set.filter(parent=None) - .exclude(source=SourceType.FILE) + self._db_obj.labeledshape_set.exclude(source=SourceType.FILE) + .exclude( + type=ShapeType.SKELETON + ) # skeleton's points are already counted as objects .count() ) def get_track_count(): db_tracks = ( - self._db_obj.labeledtrack_set.filter(parent=None) - .exclude(source=SourceType.FILE) + self._db_obj.labeledtrack_set.exclude(source=SourceType.FILE) .values( "id", - "source", "trackedshape__id", "trackedshape__frame", + "trackedshape__type", "trackedshape__outside", ) .order_by("id", "trackedshape__frame") @@ -101,6 +102,7 @@ def get_track_count(): "shapes": [ "trackedshape__id", "trackedshape__frame", + "trackedshape__type", "trackedshape__outside", ], }, @@ -109,12 +111,16 @@ def get_track_count(): count = 0 for track in db_tracks: + if track["shapes"] and track["shapes"][0]["type"] == ShapeType.SKELETON: + # skeleton's points are already counted as objects + continue + if len(track["shapes"]) == 1: count += self._db_obj.segment.stop_frame - track["shapes"][0]["frame"] + 1 for prev_shape, cur_shape in zip(track["shapes"], track["shapes"][1:]): - if prev_shape["outside"] is not True: - count += cur_shape["frame"] - prev_shape["frame"] + if not prev_shape["outside"]: + count += cur_shape["frame"] - prev_shape["frame"] + 1 return count