참고 사이트 : 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()