소개
객체 감지(Object Detection)는 컴퓨터 비전에서 매우 중요한 작업 중 하나입니다. YOLO(You Only Look Once)는 실시간 객체 감지를 위한 매우 강력한 모델로, 최근 YOLOv8 버전이 출시되었습니다. 이 튜토리얼에서는 YOLOv8을 사용하여 영상을 실시간으로 분석하고, 감지된 결과를 MP4 파일로 저장하는 방법을 다룹니다.
목차
- YOLOv8 소개
- YOLOv8 설치
- 영상 처리 및 객체 감지
- 감지 결과를 MP4 파일로 저장
- 결론
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 파일로 저장하는 방법을 보여줍니다.
주요 단계
- YOLOv8 모델 로드: YOLO('yolov8n.pt')를 사용하여 YOLOv8 모델을 로드합니다.
- 영상 파일 열기: cv2.VideoCapture를 사용하여 영상 파일을 엽니다.
- 프레임 속도 및 크기 가져오기: cap.get(cv2.CAP_PROP_FPS), cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT)를 사용하여 프레임 속도와 크기를 가져옵니다.
- VideoWriter 객체 생성: cv2.VideoWriter를 사용하여 결과 영상을 저장할 VideoWriter 객체를 생성합니다.
- 객체 감지 및 결과 저장: 각 프레임에서 객체를 감지하고, 감지된 결과를 VideoWriter 객체에 저장합니다.
- 결과 표시: cv2.imshow를 사용하여 감지된 결과를 화면에 표시합니다.
- 자원 해제: 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
'Develop' 카테고리의 다른 글
Selenium과 Scrapy를 이용해 네이버 쇼핑 크롤링하기 (5) | 2024.07.04 |
---|---|
쿠팡 웹사이트 크롤링하기 - 제품명, 가격, 및 링크 추출하기 (2) | 2024.07.03 |
부산광역시 아파트 매매 현황 - 데이터 통찰과 시각화 (0) | 2024.06.30 |
OpenAI API 사용법: 사용자가 작성한 질문을 curl로 질의하기 (0) | 2024.06.30 |
첫 코딩 모임 후기: 작은 시작, 큰 기대 (0) | 2024.06.30 |