너도 할 수 있는, 너도밤나무 코딩

[YOLO] Python과 OpenCV를 활용한 실시간 객체 탐지 프로젝트 본문

인공지능(AI, Artificial Intelligence)/비전 AI(Vision AI)

[YOLO] Python과 OpenCV를 활용한 실시간 객체 탐지 프로젝트

곡마일장 2025. 9. 5. 12:26
반응형

최근 AI와 컴퓨터 비전 기술이 발전하면서, **실시간 객체 탐지(Real-Time Object Detection)**는 자율주행, CCTV, 드론, 로봇 등 다양한 분야에서 필수 기술이 되었습니다.
이번 포스팅에서는 Python과 OpenCV를 활용해 웹캠 영상에서 YOLO 기반 객체 탐지를 실시간으로 구현하는 방법을 단계별로 소개합니다.


1. 프로젝트 개요

이번 프로젝트의 목표는 다음과 같습니다:

  • Python + OpenCV로 웹캠 영상 처리
  • YOLOv8 모델을 활용한 객체 탐지
  • 실시간으로 객체 위치와 클래스 표시

사용 기술 스택:

기술 용도
Python 프로그래밍 언어
OpenCV 영상 캡처 및 처리
YOLOv8 객체 탐지 모델
PyTorch YOLO 학습/추론 백엔드

SEO 키워드: Python 객체 탐지, OpenCV 실시간 영상 처리, YOLO 웹캠 실시간 객체 탐지


2. 환경 설정

Python 패키지 설치

 
pip install opencv-python torch ultralytics
  • opencv-python: 영상 처리 및 웹캠 연동
  • torch: YOLO 추론을 위한 딥러닝 백엔드
  • ultralytics: YOLOv8 모델 사용

3. YOLO 모델 준비

YOLOv8의 pretrained 모델을 사용하면 바로 객체 탐지가 가능합니다.

from ultralytics import YOLO
# YOLOv8 모델 로드 (pretrained)
model = YOLO('yolov8n.pt')
# 'yolov8n.pt'는 가장 작은 YOLOv8 모델
  • yolov8n.pt 외에도 yolov8s.pt, yolov8m.pt 등 다양한 모델 선택 가능
  • 작은 모델일수록 실시간 처리 속도↑, 정확도는 약간↓

SEO 키워드: YOLOv8 실시간 객체 탐지, Python YOLO 웹캠


4. OpenCV로 웹캠 영상 가져오기

import cv2
# 웹캠 연결
cap = cv2.VideoCapture(0)
# 0번 카메라 선택
while True: ret, frame = cap.read()
	if not ret: break
	# 영상 출력
	cv2.imshow('Webcam', frame)
	# q 키를 누르면 종료
	if cv2.waitKey(1) & 0xFF == ord('q'):
	break 
    cap.release()
cv2.destroyAllWindows()
  • cap.read()로 프레임 단위로 웹캠 영상 읽기
  • cv2.imshow()로 실시간 영상 출력

5. 실시간 객체 탐지 통합

 
 
while True: 
	ret, frame = cap.read() 
    if not ret: 
    	break 
        # YOLO 추론 
        results = model(frame) 
        # 결과 시각화 
        annotated_frame = results[0].plot() 
        # bbox와 클래스 표시 
        # 화면 출력 
        cv2.imshow('YOLO Object Detection', annotated_frame) 
        
if cv2.waitKey(1) & 0xFF == ord('q'): 
	break cap.release() 
    cv2.destroyAllWindows()
  • results[0].plot()로 탐지된 객체를 영상에 표시
  • YOLOv8 모델이 실시간으로 객체 위치, 클래스, confidence score를 그려줌

SEO 키워드: 실시간 YOLO 객체 탐지, Python OpenCV YOLOv8, 웹캠 객체 탐지 예제


6. 성능 개선 팁

  1. 작은 모델 사용: yolov8n.pt 또는 yolov8s.pt
  2. 영상 크기 축소: 프레임 크기 줄이면 FPS↑
  3. GPU 사용: CUDA 지원 환경에서 속도 대폭 향상
 
model = YOLO('yolov8n.pt', device='cuda:0') # GPU 사용

7. 프로젝트 확장 아이디어

  • 객체 추적: YOLO + OpenCV tracker 연동
  • 알람 시스템: 특정 객체 감지 시 알림 전송
  • 저장 기능: 탐지된 프레임을 이미지/영상으로 저장
  • 멀티 카메라: 여러 웹캠 연동, 멀티 스트림 실시간 탐지

8. 결론

이번 프로젝트에서는 Python과 OpenCV로 YOLOv8 객체 탐지를 웹캠 영상에 실시간 구현하는 방법을 다뤘습니다.

  • YOLO pretrained 모델을 활용하면 즉시 실시간 객체 탐지 가능
  • OpenCV를 통해 웹캠 영상 처리 및 시각화
  • GPU 활용과 작은 모델 사용으로 FPS 향상 가능

이 코드를 기반으로 실시간 모니터링, CCTV, 드론 영상 분석, 로봇 비전 등 다양한 프로젝트로 확장할 수 있습니다.

반응형