import typing import ultralytics YOLO_V10_MODELS = { "nano": "jameslahm/yolov10n", "small": "jameslahm/yolov10s", "medium": "jameslahm/yolov10m", "base": "jameslahm/yolov10b", "large": "jameslahm/yolov10l", "xlarge": "jameslahm/yolov10x", } class YOLOv10Plugin: def __init__( self, yolo_model_name: ( str | typing.Literal[ "nano", "small", "medium", "base", "large", "xlarge", ] ) = "nano", verbose: bool = True, ): assert ( yolo_model_name in YOLO_V10_MODELS.keys() ), f"`yolo_model_name` should be either one of {list(YOLO_V10_MODELS.keys())}" self.yolo_model_name = yolo_model_name self.model = ultralytics.YOLOv10.from_pretrained( YOLO_V10_MODELS[yolo_model_name] ) self.verbose = verbose if self.verbose: print(f"YOLOv10Plugin::__init__::Model Name: {self.yolo_model_name}") def detect(self, image): results = self.model(image) results = results[0].summary() out = [] for result in results: out.append( { "name": result["name"], "class": result["class"], "confidence": result["confidence"], "box": [ int(result["box"]["x1"]), int(result["box"]["y1"]), int(result["box"]["x2"]), int(result["box"]["y2"]), ], } ) return out if __name__ == "__main__": yolo = YOLOv10Plugin() yolo.detect("https://ultralytics.com/images/zidane.jpg")