본문 바로가기

Develop

YOLOv8을 이용한 객체 감지와 MP4 파일로 저장하기

소개

객체 감지(Object Detection)는 컴퓨터 비전에서 매우 중요한 작업 중 하나입니다. YOLO(You Only Look Once)는 실시간 객체 감지를 위한 매우 강력한 모델로, 최근 YOLOv8 버전이 출시되었습니다. 이 튜토리얼에서는 YOLOv8을 사용하여 영상을 실시간으로 분석하고, 감지된 결과를 MP4 파일로 저장하는 방법을 다룹니다.

목차

  1. YOLOv8 소개
  2. YOLOv8 설치
  3. 영상 처리 및 객체 감지
  4. 감지 결과를 MP4 파일로 저장
  5. 결론

1. YOLOv8 소개

YOLOv8은 Ultralytics에서 개발한 최신 객체 감지 모델입니다. YOLOv8은 높은 정확도와 빠른 속도로 실시간 객체 감지 작업에 매우 적합합니다. 이 모델은 다양한 객체 감지 작업에서 뛰어난 성능을 보입니다.

2. YOLOv8 설치

먼저 YOLOv8을 설치해야 합니다. 다음 명령어를 사용하여 필요한 라이브러리를 설치합니다.

pip install ultralytics​

3. 영상 처리 및 객체 감지

YOLOv8을 사용하여 영상을 처리하고 객체 감지를 수행합니다. 아래 코드는 YOLOv8 모델을 사용하여 영상 파일에서 객체를 감지하는 예제입니다.

객체 감지 코드

import time
import cv2
from ultralytics import YOLO

# YOLOv8 모델 로드
model = YOLO('yolov8n.pt')

# 영상 파일 경로
video_path = 'dataset/seoul_traffic.webm'
# https://www.youtube.com/watch?v=Is6bZ2uVuiA

output_path = '%s_output.mp4' % video_path.split('.')[0]

# 영상 파일 열기
cap = cv2.VideoCapture(video_path)

# 원본 영상의 프레임 속도 가져오기
fps = cap.get(cv2.CAP_PROP_FPS)
frame_time = 1.0 / fps  # 초 단위로 변환
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# VideoWriter 객체 생성
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))

while cap.isOpened():
    start_time = time.time()

    ret, frame = cap.read()
    if not ret:
        break

    # 객체 감지
    results = model(frame)

    # 감지 결과 그리기
    for result in results:
        annotated_frame = result.plot()

    # 결과 프레임을 파일에 저장
    out.write(annotated_frame)

    # 결과 표시
    cv2.imshow('YOLOv8 Video Detection', annotated_frame)

    # 프레임 간 실제 지연 시간 계산
    elapsed_time = time.time() - start_time
    delay = max(int((frame_time - elapsed_time) * 1000), 1)

    if cv2.waitKey(delay) & 0xFF == ord('q'):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

4. 감지 결과를 MP4 파일로 저장

위 코드에서는 YOLOv8 모델을 사용하여 객체 감지를 수행하고, 감지된 결과를 MP4 파일로 저장하는 방법을 보여줍니다.

주요 단계

  1. YOLOv8 모델 로드: YOLO('yolov8n.pt')를 사용하여 YOLOv8 모델을 로드합니다.
  2. 영상 파일 열기: cv2.VideoCapture를 사용하여 영상 파일을 엽니다.
  3. 프레임 속도 및 크기 가져오기: cap.get(cv2.CAP_PROP_FPS), cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT)를 사용하여 프레임 속도와 크기를 가져옵니다.
  4. VideoWriter 객체 생성: cv2.VideoWriter를 사용하여 결과 영상을 저장할 VideoWriter 객체를 생성합니다.
  5. 객체 감지 및 결과 저장: 각 프레임에서 객체를 감지하고, 감지된 결과를 VideoWriter 객체에 저장합니다.
  6. 결과 표시: cv2.imshow를 사용하여 감지된 결과를 화면에 표시합니다.
  7. 자원 해제: cap.release(), out.release(), cv2.destroyAllWindows()를 사용하여 영상 파일과 VideoWriter 객체, OpenCV 창을 닫습니다.

5. 결론

이 튜토리얼에서는 YOLOv8을 사용하여 영상 파일에서 객체를 감지하고, 감지된 결과를 MP4 파일로 저장하는 방법을 배웠습니다. YOLOv8은 실시간 객체 감지에 매우 강력한 도구이며, 다양한 응용 프로그램에 적용할 수 있습니다. 이 과정을 통해 YOLOv8의 기본적인 사용법을 익히고, 실시간 객체 감지 시스템을 구축할 수 있습니다.

 

6. 3줄평

  • car, truck, bus 는 상당히 만족스럽게 탐지가 가능했습니다.
  • 60 여줄의 python 으로 재밌게 실험해 보았습니다.
  • 다양한 음식도 분석이 가능한지 좀더 찾아봐야겠습니다. 

 

예제

원본영상 https://www.youtube.com/watch?v=Is6bZ2uVuiA

 

 

작업영상 https://youtu.be/neooVwzB62U

반응형