본문 바로가기
AI/LLM

[LLM] 허깅페이스 Hugging Face로 이미지 속 객체를 탐지하기 🐱

by 데이터 벌집 2025. 1. 8.
반응형

객체 탐지: Hugging Face로 이미지 속 객체를 탐지하기

객체 탐지(Object Detection)는 이미지나 비디오에서 고양이 🐱, 개 🐶, 테이블 📄 등 특정 객체를 식별하고, 해당 객체의 위치를 경계 상자로 표시하는 머신러닝 분야입니다. Hugging Face 라이브러리를 활용하면 이러한 객체 탐지를 쉽고 효율적으로 수행할 수 있습니다. 아래에서 Python으로 단계별로 구현해 보겠습니다.

 

[LLM] 허깅페이스 Hugging Face로 이미지 속 객체를 탐지하기 🐱

 

1단계: 고양이 탐지하기 🐱

우선, Hugging Face의 객체 탐지 파이프라인을 사용해 제공된 이미지 속 고양이를 탐지해 보겠습니다.

 

출처: https://www.thesprucepets.com/cute-cat-breeds-5176271

 

from transformers import pipeline

# 객체 탐지 파이프라인 초기화
model = pipeline("object-detection")

# 이미지에서 객체 탐지
result = model("cat.jpg")  # 이미지 파일 경로 입력


print(result)

[{'score': 0.6867631077766418,
  'label': 'cat',
  'box': {'xmin': 62, 'ymin': 33, 'xmax': 3387, 'ymax': 2670}},
 {'score': 0.9861677289009094,
  'label': 'cat',
  'box': {'xmin': 63, 'ymin': 469, 'xmax': 3371, 'ymax': 2673}},
 {'score': 0.9965155124664307,
  'label': 'person',
  'box': {'xmin': 1243, 'ymin': 5, 'xmax': 3993, 'ymax': 2663}}]

 

출력 결과 설명:

  • Score(점수): 모델의 예측 신뢰도(예: 98.6%).
  • Label(라벨): 탐지된 객체의 클래스(예: "cat").
  • Box(박스): 탐지된 객체의 경계 상자 좌표.

2단계: 탐지 결과 시각화하기 🎨

탐지 결과를 기반으로 이미지에 경계 상자를 그려보겠습니다.

 

from PIL import Image, ImageDraw
from IPython.display import display # Import display

# 이미지 열기
image_path = "cat.jpg"  # 이미지 파일 경로
image = Image.open(image_path)

# 경계 상자 그리기
box = result[1]["box"]
draw = ImageDraw.Draw(image)
bounding_box = (box["xmin"], box["ymin"], box["xmax"], box["ymax"])
draw.rectangle(bounding_box, outline="red", width=3)

# 이미지 표시 using display
display(image)

 

이 코드를 실행하면 탐지된 고양이 객체 주위에 빨간색 경계 상자가 표시된 이미지를 확인할 수 있습니다.

 

2단계: 탐지 결과 시각화하기 🎨

3단계: DETR로 고급 객체 탐지 🚀

이번에는 DETR(Detection Transformer) 모델을 사용해 보다 정밀한 객체 탐지를 수행해 보겠습니다.

from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
from PIL import Image

# 이미지 열기
image = Image.open("cat.jpg")

# 프로세서와 모델 초기화
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")

# 이미지 전처리
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)

# 출력 후처리
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]

# 탐지 결과 출력
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
    box = [round(i, 2) for i in box.tolist()]
    print(
        f"{model.config.id2label[label.item()]} 탐지됨, 신뢰도: "
        f"{round(score.item(), 3)}, 위치: {box}"
    )

 

4단계: 이미지 내 여러 객체 시각화 📸

탐지된 모든 객체에 경계 상자와 라벨을 표시해 보겠습니다.

from PIL import ImageDraw

# 경계 상자와 라벨 그리기
draw = ImageDraw.Draw(image)

for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
    box = [round(i, 2) for i in box.tolist()]
    draw.rectangle(box, outline="red", width=2)
    draw.text((box[0], box[1] - 10), f"{model.config.id2label[label.item()]} {round(score.item(), 3)}", fill="red")

# 이미지 표시
display(image)

 

탐지된 모든 객체와 그 신뢰도를 시각적으로 확인할 수 있습니다.

4단계: 이미지 내 여러 객체 시각화 📸

결론

Hugging Face는 고양이 🐱와 같은 단순한 객체 탐지부터 PDF에서 테이블 📄을 추출하는 고급 작업까지 다양한 객체 탐지 도구를 제공합니다. 간단한 작업에서부터 복잡한 응용 프로그램에 이르기까지, 이러한 모델은 시각 데이터를 처리하는 데 있어 효율적이고 정확한 방법을 제공합니다.

 

코드 예제를 따라 실행해 보고 객체 탐지의 가능성을 직접 경험해 보세요! 🚀✨

반응형