bskyvision$

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

코딩/python
@2020-01-17 17:24:59

[파이썬] 얼굴 검출 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)의 차이는? 

댓글

  1. @2020.06.16 18:59   댓글주소   수정/삭제   댓글쓰기

    비밀댓글입니다

    • BlogIcon bskyvision @2020.06.16 22:12 신고   댓글주소   수정/삭제

      반갑습니다 ㅎㅎ cvlib 라이브러리에서 제공하는 물체검출 모델은 cocodataset에서 훈련된 모델입니다^^ cocodataset에는 총 80개의 물체에 관한 이미지들이 약20만장 정도 있구요. 이 예제에서 저는 이미 훈련된 모델을 이용해서 테스트만 했을 뿐입니다 ㅎㅎ

  2. @2020.11.18 10:33   댓글주소   수정/삭제   댓글쓰기

    비밀댓글입니다

  3. 하늘느낌2 @2020.11.20 11:25   댓글주소   수정/삭제   댓글쓰기

    안녕하세요.
    좋은 글 공유해 주셔서 감사합니다.
    소스를 돌려보고 있는데 CPU가 너무나 많이 올라가는 상황이 있어서요. 혹시 CPU 잡는 법이 따로 있을까요? 혹시 CPU 잡는 법이 있으시다면 조언 부탁 드립니다. 즐거운 하루 보내시기 바랍니다. 감사합니다.

  4. 하늘느낌2 @2020.11.23 10:44   댓글주소   수정/삭제   댓글쓰기

    죄송하지만 하나만 더 여쭤보겠습니다.
    detect_common_objects 에 보면 40여가지 사물에 대한 학습이 되어 있는데 혹시 제가 원하는 사물만 빼서 모델을 만들수 있는지요?
    또한 다른 사물을 추가하여 학습을 시킬수 있는지도 궁금합니다. 계속 질문만 드려 죄송합니다. 많은 조언 부탁드립니다. 감사합니다.

    • BlogIcon bskyvision @2020.11.23 10:53 신고   댓글주소   수정/삭제

      전이학습 transfer learning 을 활용하시면 가능합니다. 전이학습은 이미 대규모 데이터셋에 훈련된 모델을 본인의 필요에 맞게 훈련시켜서 사용하는 기법입니다.

  5. BlogIcon 기생충 @2020.11.23 14:07   댓글주소   수정/삭제   댓글쓰기

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

    라고 하셨는데요 혹시 물체 분류와 이미지 검출에도 차이가 있을까요?

    • BlogIcon bskyvision @2020.11.23 15:23 신고   댓글주소   수정/삭제

      그렇게는 용어를 잘 사용하지 않는 걸로 알고 있습니다. 이미지 검출이라고 하면 텍스트, 이미지, 아이콘 등 여러 구성 요소가 있는 화면에서 이미지만을 검출하는 의미가 되어 그렇게 사용되는 경우도 있긴 합니다만..^^;

[1] [···] [104] [105] [106] [107] [108] [109] [110] [111]