[ubuntu+python] 웹캠 영상 실시간 물체 검출

컴퓨터비전/python|2020. 1. 17. 17:24

[파이썬] 얼굴 검출 https://bskyvision.com/675 

[파이썬] 얼굴 검출 후 성별 인식 https://bskyvision.com/677

[파이썬] 물체 검출 https://bskyvision.com/678

 

지난 번에 말씀드린대로 오늘은 웹캠으로 촬영되는 영상에서 실시간으로 물체 검출하는 방법에 대해 소개해드리도록 하겠습니다.

 

이것을 좀더 편하게 하기 위해 우분투를 윈도우10에 듀얼부팅 방식으로 설치했습니다. 기존에는 클라우드 통합개발환경을 이용해서 우분투 운영체제를 이용했었습니다. 

 

바로 실시간 물체 검출을 테스트한 영상을 보여드리도록 하겠습니다. (유튜브에 동영상은 처음 올려보네요.ㅋㅋ)

 

https://youtu.be/FqDaMtR3Smk

 

이 물체 검출 모델은 80개의 물체를 검출할 수 있도록 훈련되었습니다. 영상에서 볼 수 있듯이, 검출 성능이 그다지 나쁘지 않죠? ㅎㅎ 

 

(영상을 보시다보면 집 안에 웬 오토바이가 있지 하고 놀라실 수도 있는데, 제가 지금 거주하고 있는 중국에서는 전동 오토바이를 충전하기 위해 집에 들여다놓는 경우가 많답니다. ㅋㅋ)

 

이번에도 마찬가지로 opencv-python 라이브러리와 cvlib 라이브러리를 미리 설치해주셔야 합니다. cvlib 라이브러리에 있는 detect_common_objects 함수가 실질적으로 물체 검출을 해줍니다. 파이썬 코드는 다음과 같습니다. 

 

# import necessary packages
import cvlib as cv
from cvlib.object_detection import draw_bbox
import cv2

# open webcam (웹캠 열기)
webcam = cv2.VideoCapture(0)

if not webcam.isOpened():
    print("Could not open webcam")
    exit()
    

# loop through frames
while webcam.isOpened():

    # read frame from webcam 
    status, frame = webcam.read()

    if not status:
        break

    # apply object detection (물체 검출)
    bbox, label, conf = cv.detect_common_objects(frame)

    print(bbox, label, conf)

    # draw bounding box over detected objects (검출된 물체 가장자리에 바운딩 박스 그리기)
    out = draw_bbox(frame, bbox, label, conf, write_conf=True)

    # display output
    cv2.imshow("Real-time object detection", out)

    # press "Q" to stop
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
# release resources
webcam.release()
cv2.destroyAllWindows()   

 

항상 말씀드리는 것이지만, 코딩에 익숙치 않으신 분들은 코드에 겁먹지 마세요. 그냥 흐름만 아시면 됩니다. 너무 디테일에 처음부터 매달리다보면 큰 그림을 놓치기 쉽기 때문입니다.^^ 

 

오늘은 실시간 물체 검출에 대해 다뤄봤습니다. 이러한 물체 검출 기술이 존재하기 때문에, 자율 주행 자동차도 생겨날 수 있었던 것이겠죠? 즐거운 하루보내세요! 

 

아, 혹시 이미지 분류와 물체 검출의 개념이 헷갈리시는 분이 계시다면 아래 글을 참고하세요.^^ 

이미지 분류(image classification)와 물체 검출(object detection)의 차이는? 

댓글()