YOLOv8 을 이용하여 간단하게 RGB Webcam의 Realtime Segmentation을 수행해보았습니다.
기존의 boundary box를 쳐주는 YOLO 는 많이 익숙하실 것이라 생각이 듭니다.
Segmentation은 그에 더해 인식된 Object가 실제로 존재하는 영역에 대해서 구분하게 됩니다.

일단 물체의 경계를 구분한다는 것 자체가 굉장히 의미가 있는 것 같습니다.
물체와 배경의 차이를 모델이 정확히 인지한다는 것입니다.
속도는 GeForce RTX 2080 Ti 에서 yolov8n-seg.pt 모델을 사용한 결과
약 150fps 정도의 추론 속도가 나왔습니다.
Segmentation인데도 속도가 어마어마한 것 같습니다.
저는 예전에 가상환경을 만들어두었기에
해당 가상환경에서 yolov8을 구동시켰습니다.
환경 구성이 필요하시면 아래 글을 참조하시기 바랍니다.
Intel RealSense 카메라 + YOLOv8 을 이용한 object 거리 추출
Python OpenCV를 이용해서 YOLOv8과 함께 묶어, Intel RealSense L515와 D435를 통해 특정 오브젝트가 감지되었을 때, 해당 object의 깊이 정보를 받아오는 과정을 수행해보겠습니다. YOLO가 필요없으신 분들은
cobang.tistory.com
작성한 코드입니다.
from ultralytics import YOLO | |
import cv2 | |
import numpy as np | |
import random | |
model = YOLO("yolov8n-seg.pt") # Load Model | |
conf = 0.5 # confidence | |
# Assign random color to each class | |
yolo_classes = list(model.names.values()) | |
classes_ids = [yolo_classes.index(clas) for clas in yolo_classes] | |
colors = {cls_id: random.choices(range(256), k=3) for cls_id in classes_ids} | |
# Check camera | |
cap = cv2.VideoCapture(0) | |
if not cap.isOpened(): | |
print("Can't open camera") | |
exit() | |
# Realtime segmentation | |
while True: | |
# Bring the frame | |
ret, frame = cap.read() | |
if not ret: | |
break | |
# Analyzing | |
results = model.predict(frame, conf=conf) | |
# Rendering | |
for result in results: | |
# Case : Nothing detected | |
if result.masks is None or result.boxes is None: | |
continue | |
for mask, box in zip(result.masks.xy, result.boxes): | |
points = np.int32([mask]) | |
color_number = int(box.cls[0]) | |
overlay = frame.copy() # 투명도 적용을 위해 복사본 생성 | |
cv2.fillPoly(overlay, points, colors[color_number]) # 복사본에 mask 적용 | |
alpha = 0.4 # 투명도 (0: 완전 투명, 1: 완전 불투명) | |
frame = cv2.addWeighted(overlay, alpha, frame, 1 - alpha, 0) # 복사본과 원본 결합 | |
# Result | |
cv2.imshow("YOLOv8 Segmentation", frame) | |
# End the loop when press 'q' or ESC key | |
key = cv2.waitKey(1) | |
if key & 0xFF == ord('q') or key == 27: | |
cv2.destroyAllWindows() | |
break | |
# Free Camera | |
cap.release() |
실행 결과입니다.

이제 다음 글에서 Depth Camera에 이를 적용시키고
물체의 각 pixel 에 대해 Depth 를 계산하여 평균을 도출해보겠습니다.
Reference
How to segment Objects with YOLOv8
Introduction
medium.com
GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite - GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
github.com
'Research & Algorithm > Computer Vision' 카테고리의 다른 글
이미지로부터 실제 좌표를 얻기 위한 Camera Transformation 수행 (1) | 2024.02.13 |
---|---|
Intel RealSense 를 활용한 YOLOv8 RealTime Object Segmentation (0) | 2024.01.29 |
BundleSDF (3D Pose Estimation & Reconstruction) Example 수행 (7) | 2024.01.24 |
[논문 리뷰] BundleSDF: Neural 6-DoF Tracking and 3D Reconstruction of Unknown Objects (1) | 2024.01.24 |
Python3 에서 Intel RealSense Camera Intrinsic Matrix 얻기 (0) | 2024.01.22 |