인공지능 - YOLOv8을 활용한 이미지 객체 탐지 실습
YOLOv8을 활용한 이미지 객체 탐지 실습
1. 개요
AI에게 고양이와 강아지를 보여주면 알아볼 수 있을까요? 이 글에서는 Ultralytics에서 제공하는 YOLOv8 모델을 사용해 이미지 속 객체(고양이, 강아지 등)를 탐지하고 시각화하는 과정을 살펴봅니다.
YOLO(You Only Look Once)는 이미지 내 여러 객체를 빠르고 정확하게 탐지하는 대표적인 딥러닝 모델입니다. Ultralytics는 이를 Python 코드 한 줄로 쉽게 사용할 수 있도록 라이브러리를 제공합니다.
2. 필요한 환경 설정
2.1 라이브러리 설치
pip install ultralytics opencv-python python-dotenv
2.2 Hugging Face와 OpenAI 관련 모듈도 같이 포함된 이유
이 코드는 다양한 AI 실험을 위한 베이스 환경을 포함하고 있습니다. 하지만 YOLO만 사용할 경우 아래 부분은 삭제해도 무방합니다:
openai
,ChatOpenAI
,langchain_*
huggingface_hub
,transformers
,ImageCaptionLoader
,torch
,PromptTemplate
등
3. YOLOv8 객체 탐지 코드
import os
import warnings
from dotenv import load_dotenv
import cv2
from ultralytics import YOLO
# 경고 무시
warnings.filterwarnings("ignore")
os.environ["USER_AGENT"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) LangChainBot/1.0"
load_dotenv(dotenv_path='openapi_key.env') # openapi 키가 필요 없다면 생략 가능
# 1. YOLO 모델 로드 (yolov8n은 경량 모델, yolov8s는 조금 더 정확)
model = YOLO('yolov8n.pt')
# 2. 이미지 예측 수행
results = model.predict('image/catdog.jpg')
rst = results[0]
# 3. 이미지 불러오기 (OpenCV 사용)
image = cv2.imread('image/catdog.jpg')
# 4. 탐지된 객체 정보를 이용해 이미지에 박스 및 텍스트 표시
for box in rst.boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0]) # 좌표 정수화
conf = box.conf[0]
cls = int(box.cls[0])
label = model.names[cls] # 클래스명 추출
if conf > 0.5: # confidence가 50% 이상일 때만 시각화
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, f'{label}', (x1, y1),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
# 5. 결과 이미지 출력
cv2.imshow("yolo", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 설명: AI가 이미지를 이해하는 과정
-
YOLO 모델 로딩
YOLO('yolov8n.pt')
를 통해 사전 학습된 모델을 메모리에 불러옵니다. 이 모델은 다양한 객체(동물, 사람, 사물 등)를 미리 학습한 상태입니다. -
예측 수행
model.predict()
에 이미지를 입력하면, YOLO는 해당 이미지에서 객체를 찾고 각 객체의 위치(좌표), 클래스(예: cat, dog), 신뢰도(confidence)를 계산합니다. -
결과 시각화 OpenCV를 사용해 탐지된 객체 주변에 초록색 박스와 라벨을 그림으로써 사용자가 눈으로 쉽게 확인할 수 있게 만듭니다.
5. 결과 예시
실행하면 아래와 같은 결과를 확인할 수 있습니다:
- 고양이와 강아지를 인식한 후, 화면에 박스를 그려 보여줍니다.
- 각 객체의 이름과 함께 예측 정확도를 시각적으로 표시합니다.
6. 마무리
YOLOv8과 OpenCV만으로도 강력한 객체 탐지 시스템을 빠르게 구축할 수 있습니다. 추후에는 영상 처리, 웹 연동(Streamlit, Flask), 자동 분류 시스템 등에 활용해보세요.
댓글남기기