| import os
|
| import folder_paths
|
| from . import subcore
|
| from . import utils
|
| import logging
|
|
|
|
|
| def update_model_paths(model_path):
|
| utils.add_folder_path_and_extensions("ultralytics_bbox", [os.path.join(model_path, "ultralytics", "bbox")], folder_paths.supported_pt_extensions)
|
| utils.add_folder_path_and_extensions("ultralytics_segm", [os.path.join(model_path, "ultralytics", "segm")], folder_paths.supported_pt_extensions)
|
| utils.add_folder_path_and_extensions("ultralytics", [os.path.join(model_path, "ultralytics")], folder_paths.supported_pt_extensions)
|
| logging.info(f'[Impact Subpack] ultralytics_bbox: {", ".join(folder_paths.folder_names_and_paths["ultralytics_bbox"][0])}')
|
| logging.info(f'[Impact Subpack] ultralytics_segm: {", ".join(folder_paths.folder_names_and_paths["ultralytics_segm"][0])}')
|
|
|
| update_model_paths(folder_paths.models_dir)
|
| if 'download_model_base' in folder_paths.folder_names_and_paths:
|
| update_model_paths(folder_paths.get_folder_paths('download_model_base')[0])
|
|
|
|
|
| class UltralyticsDetectorProvider:
|
| @classmethod
|
| def INPUT_TYPES(s):
|
| bboxs = ["bbox/"+x for x in folder_paths.get_filename_list("ultralytics_bbox")]
|
| segms = ["segm/"+x for x in folder_paths.get_filename_list("ultralytics_segm")]
|
| return {"required": {"model_name": (bboxs + segms, )}}
|
| RETURN_TYPES = ("BBOX_DETECTOR", "SEGM_DETECTOR")
|
| FUNCTION = "doit"
|
|
|
| CATEGORY = "ImpactPack"
|
|
|
| def doit(self, model_name):
|
| model_path = folder_paths.get_full_path("ultralytics", model_name)
|
|
|
| if model_path is None:
|
| if model_name.startswith('bbox/'):
|
| model_path = folder_paths.get_full_path("ultralytics_bbox", model_name[5:])
|
| elif model_name.startswith('segm/'):
|
| model_path = folder_paths.get_full_path("ultralytics_segm", model_name[5:])
|
|
|
| if model_path is None:
|
| logging.error(f"[Impact Subpack] model file '{model_name}' is not found in one of the following directories:")
|
|
|
| cands = []
|
| cands.extend(folder_paths.get_folder_paths("ultralytics"))
|
| if model_name.startswith('bbox/'):
|
| cands.extend(folder_paths.get_folder_paths("ultralytics_bbox"))
|
| elif model_name.startswith('segm/'):
|
| cands.extend(folder_paths.get_folder_paths("ultralytics_segm"))
|
|
|
| formatted_cands = "\n\t".join(cands)
|
| logging.error(f'\t{formatted_cands}\n')
|
|
|
| raise ValueError(f"[Impact Subpack] model file '{model_name}' is not found.")
|
|
|
| model = subcore.load_yolo(model_path)
|
|
|
| if model_name.startswith("bbox"):
|
| return subcore.UltraBBoxDetector(model), subcore.NO_SEGM_DETECTOR()
|
| else:
|
| return subcore.UltraBBoxDetector(model), subcore.UltraSegmDetector(model)
|
|
|
|
|
| NODE_CLASS_MAPPINGS = {
|
| "UltralyticsDetectorProvider": UltralyticsDetectorProvider
|
| }
|
|
|
|
|
| NODE_DISPLAY_NAME_MAPPINGS = {
|
|
|
| }
|
|
|