참고 사이트 : https://docs.ultralytics.com/ko/models/yolo-world/

YOLOWorld의 method 활용을 위해 위 공식 documentation 사이트를 참고하세요.

###======================= 라이브러리 호출 부분 =======================
##  필요한 라이브러리를 추가로 호출하세요
###===================================================================
from ultralytics import YOLOWorld
import os
import random
import time

class DetectionNode(Node):
    def __init__(self): # 
        super().__init__('detection_node')

				###======================= 토픽 관련 세팅 =======================
				##  QoS 세팅, 토픽 정의 등을 알맞게 추가하세요
				###===================================================================

        
        self.bridge = """ fill in """
        self.get_logger().info("YOLOWorld Detection Node start...")

        ###======================= YOLOWorld config =======================
        self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")  # GPU or CPU
        self.get_logger().info(f"Using device: {self.device}")

        # 모델 load
        self.model = YOLOWorld("yolov8x-worldv2.pt") # pretrained weight은 yolov8{s,m,l,x}-worldv2 중 조절해보세요.
        self.get_logger().info("YOLOWorld model load success...")

        ###=============================================================

        # 캡쳐 이미지 저장용 디렉토리 config
        self.save_directory = """" fill in """
        """fill in""" # 저장 디렉토리가 없으면 생성
        self.frame_count = 0 # 캡쳐프레임 저장을 위한 카운터 초기화
        
        # 클래스별 색상 저장을 위한 딕셔너리
        self.label_colors = {}

        # For visualization (optional)
        cv2.namedWindow("YOLOWorld Object Detection", cv2.WINDOW_AUTOSIZE)

    def detect_callback(self, data):
        ###======================= 모델 추론 부분 =======================
        # ROS Image 메시지를 OpenCV 이미지로 변환
        cv_image = """ fill in """  
        results = """ fill in """  # 모델 추론 수행 # .predict() 활용

        ###======================= 결과 시각화 코드 =======================
        # YOLOWorld 결과에서 바운딩 박스, 클래스, 신뢰도 추출, 시각화
        
        # class_name 은 self.model.names 활용
        # self.label_colors 변수와 random.randint 를 활용해서 각 class_name 카테고리마다 bbox 등 색깔 구분을 다르게 해주기

        # Displaying the predictions
        cv2.imshow('YOLOWorld Object Detection', cv_image)

        ###======================= 캡처 관련 =======================
        key = cv2.waitKey(1) & 0xFF
        if key == ord('c'): # 캡쳐 버튼 'c'
				    self.frame_count += 1
				    file_path = os.path.join(self.save_directory, f"captured_{self.frame_count:04d}.jpg")
		        """ fill in """ # cv2.imwrite
		        self.get_logger().info("asfasdf") # 저장관련 로깅을 넣으세용

        
def main(args=None):
				###======================= main 함수 =======================
        ##  main 함수를 작성해보세요
        ###=============================================================

if __name__ == '__main__':
    main()