diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..6252cb04 Binary files /dev/null and b/.DS_Store differ diff --git a/modules/.DS_Store b/modules/.DS_Store new file mode 100644 index 00000000..1f2a1991 Binary files /dev/null and b/modules/.DS_Store differ diff --git a/modules/common b/modules/common index c7ab98a7..a256a497 160000 --- a/modules/common +++ b/modules/common @@ -1 +1 @@ -Subproject commit c7ab98a75be0f78c2c17084d30c7fce5708897ff +Subproject commit a256a49778d1154e03683c3b5e2fe6cb215d00e7 diff --git a/modules/detect_target/detect_target_factory.py b/modules/detect_target/detect_target_factory.py index ed292db3..c52f4618 100644 --- a/modules/detect_target/detect_target_factory.py +++ b/modules/detect_target/detect_target_factory.py @@ -29,7 +29,10 @@ def create_detect_target( save_name: str, ) -> tuple[bool, base_detect_target.BaseDetectTarget | None]: """ - Construct detect target class at runtime. + Factory function to create a detection target object. + + Return: + Success, detect target object. """ match detect_target_option: case DetectTargetOption.ML_ULTRALYTICS: diff --git a/modules/detect_target/detect_target_ultralytics.py b/modules/detect_target/detect_target_ultralytics.py index 4f9bddc1..61b85dce 100644 --- a/modules/detect_target/detect_target_ultralytics.py +++ b/modules/detect_target/detect_target_ultralytics.py @@ -5,6 +5,7 @@ import time import cv2 +import torch import ultralytics from . import base_detect_target @@ -37,7 +38,7 @@ def __init__( self.__device = device self.__model = ultralytics.YOLO(model_path) self.__counter = 0 - self.__enable_half_precision = not self.__device == "cpu" + self.__enable_half_precision = self.__device != "cpu" self.__local_logger = local_logger self.__show_annotations = show_annotations if override_full: @@ -46,6 +47,10 @@ def __init__( if save_name != "": self.__filename_prefix = save_name + "_" + str(int(time.time())) + "_" + if self.__device != "cpu" and not torch.cuda.is_available(): + self.__local_logger.warning("CUDA not available. Falling back to CPU.") + self.__device = "cpu" + def run( self, data: image_and_time.ImageAndTime ) -> "tuple[bool, detections_and_time.DetectionsAndTime | None]": @@ -111,6 +116,11 @@ def run( self.__counter += 1 if self.__show_annotations: - cv2.imshow("Annotated", image_annotated) # type: ignore + if image_annotated is not None: + # Display the annotated image in a named window + cv2.imshow("Annotated", image_annotated) + cv2.waitKey(1) # Short delay to process GUI events + else: + self.__local_logger.warning("Annotated image is invalid.") return True, detections