Python/Vision Code

[OpenCV] 파이썬 사물 인식(Object Detection) 실습 코드 예제

jimmy_AI 2022. 8. 11. 17:44
반응형

Python OpenCV object detection example

파이썬에서 OpenCV의 기능을 활용하여 이미지 내 사물 검출 결과를

쉽게 반환받을 수 있는 방법을 예시를 통해서 간략하게 정리해보도록 하겠습니다.

 

먼저, 이번 예제에서 사용할 이미지 파일을 불러와 출력해보도록 하겠습니다.

(이미지의 출처는 pixabay에서 가져왔습니다.)

from IPython.display import Image, display

path = "cat_dog.jpg" # 사진 파일의 디렉토리
display(Image(filename = path))

이제 강아지와 고양이가 여러 마리씩 있는 위의 이미지 파일에서

dog, cat 그림의 위치를 인식하여 해당 위치 부분에

직사각형 모양의 box를 label 이름과 함께 그려보는 실습을 진행해보겠습니다.

 

 

사물 인식 결과 얻기 : detect_common_objects

opencv와 tensorflow 기반으로 모델링 결과를 쉽게 알려주는 cvlib 모듈의

detect_common_objects 메소드를 활용하여 사물 검출의 결과를 쉽게 얻을 수 있습니다.

 

해당 함수의 input으로는 opencv로 불러온 이미지를 먼저 지정하고

confidence 인자에 사물을 인식할 역치값을(0~1 사이이며 클수록 더 확실한 부분만

가져오고 작을수록 다소 모호한 부분도 많이 가져오게 됩니다.),

model 인자에 예측 모델명("yolov3", "yolov3-tiny" 등 가능)을 차례로 적어주시면 됩니다.

import cv2
import cvlib as cv # cvlib 미설치 시 !pip install cvlib으로 설치 진행

img = cv2.imread(path) # 이미지 파일 불러오기
conf = 0.5 # 사물 인식을 진행할 confidence의 역치 값
model_name = "yolov3" # 사물을 인식할 모델 이름

result = cv.detect_common_objects(img, confidence=conf, model=model_name)

 

반응형

 

결과값을 받아 출력해보시면 튜플 내에

box 좌표(x1, y1, x2, y2 형태), 라벨 종류 그리고 confidence score 차례로

검출된 이미지들의 결과를 순서대로 리스트 형태로 묶어서 반환된 것을 알 수 있습니다.

 

 

인식 결과 box 그리기 : draw_bbox

이제 위에서 얻은 사물 인식 결과를 바탕으로 이미지 내에 사물 위치 box를 그려보겠습니다.

이는 cvlib 모듈 내 object_detection 소모듈의 draw_bbox 메소드로 쉽게 진행할 수 있습니다.

 

input으로는 처음에 사용했던 이미지가 저장된 변수

위에서 반환받은 result 값을 *로 unpacking하여 넣어주시면 됩니다.

output_path = "/cat_dog_detect.jpg" # 결과가 반영된 이미지 파일 저장 디렉토리

result_img = cv.object_detection.draw_bbox(img, *result) # result 결과를 이미지에 반영
cv2.imwrite(output_path, result_img) # 반영된 이미지 파일 저장
display(Image(filename = output_path)) # 이미지 출력

일부 잘못 인식되거나 인식에 실패한 부분들도 보이긴 하나

인식된 부분 위치에 box와 예측된 라벨 이름이 잘 그려진 모습을 확인할 수 있었습니다.

'Python > Vision Code' 카테고리의 다른 글

파이썬 이미지 데이터 증강 모듈 : imgaug  (0) 2022.08.02