Skip to Content

소프트웨어 아키텍처

기본 파이프라인

[카메라 입력] [전처리] [물체 감지] [위치 추적] [출력] │ │ │ │ │ Basler RGB 왜곡 보정 MediaPipe / 칼만 필터 좌표 데이터 + D455 Depth 노이즈 제거 YOLOv8 헝가리안 매칭 시각화 색상 보정 커스텀 모델 3D 좌표 변환 제어 신호

핵심 라이브러리

역할라이브러리비고
RGB 카메라 제어pypylonBasler 전용
깊이 카메라 제어pyrealsense2 / pyk4aRealSense / Orbbec
영상 처리OpenCV (cv2)범용
물체 감지MediaPipe / YOLOv8 (ultralytics)용도에 따라 선택
추적 알고리즘filterpy (칼만), scipy (헝가리안)다중 물체 추적

통합 코드 구조 예시

import cv2 import pyrealsense2 as rs import numpy as np class TableObjectTracker: def __init__(self): # 깊이 카메라 초기화 self.pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 30) config.enable_stream(rs.stream.color, 1920, 1080, rs.format.bgr8, 30) self.pipeline.start(config) def get_frames(self): frames = self.pipeline.wait_for_frames() depth = np.asanyarray(frames.get_depth_frame().get_data()) color = np.asanyarray(frames.get_color_frame().get_data()) return color, depth def detect_objects(self, color_frame): """RGB 기반 물체 감지 (MediaPipe 또는 YOLOv8)""" # 물체 바운딩박스 + 클래스 반환 pass def get_3d_position(self, pixel_x, pixel_y, depth_frame): """픽셀 좌표 + 깊이 → 3D 월드 좌표 변환""" depth_val = depth_frame[pixel_y, pixel_x] # 카메라 내부 파라미터 기반 변환 # x_3d = (pixel_x - cx) * depth_val / fx # y_3d = (pixel_y - cy) * depth_val / fy # z_3d = depth_val pass def track(self): """메인 추적 루프""" color, depth = self.get_frames() objects = self.detect_objects(color) for obj in objects: pos_3d = self.get_3d_position(obj.cx, obj.cy, depth) # 칼만 필터로 위치 스무딩 # 출력: 물체 ID, 3D 위치, 신뢰도

환경 설정

# Python 가상 환경 python -m venv vision_env source vision_env/bin/activate # 필수 패키지 pip install pypylon opencv-python mediapipe numpy pyrealsense2 # 선택 패키지 pip install ultralytics # YOLOv8 pip install filterpy # 칼만 필터 pip install pyk4a # Orbbec Femto Bolt (K4A 호환)