root@bskyvision: ~#
방명록
태그
RSS

<닫기>

3,585,391/3,798/595

프로필사진
수많은 소음 속에서 신호를 찾아가는 bskyvision입니다.


<닫기>

  • leon_choi이(가) 08.10에 작성한 댓글: 멋쟁이.
  • 꼬장이이(가) 07.25에 작성한 댓글: test.

<닫기>


[파이썬] 얼굴 검출 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에 작성한 댓글:
    • 비스카이비전이(가) 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 잡는 법이 있으시다면 조언 부탁 드립니다. 즐거운 하루 보내시기 바랍니다. 감사합니다.
      주소   수정/삭제   답글
    • 비스카이비전이(가) 2020.11.20 11:53 신고에 작성한 답글:
      그건 저도 잘 모르겠습니다 ㅎㅎ   주소   수정/삭제
    • 하늘느낌2이(가) 2020.11.20 13:18에 작성한 답글:
      빠른 댓글 너무나 감사드려요 ^^   주소   수정/삭제
    • 비스카이비전이(가) 2020.11.20 15:50 신고에 작성한 답글:
      댓글 남겨주셔서 감사합니다. ㅎㅎ   주소   수정/삭제
    • 기생충이(가) 2020.11.23 07:58에 작성한 답글:
      CPU가 너무 많이 올라가는 상황이 항상 반복되고 어디서 올라가는지 아시는건가요?

      혹시 모르신다면 아래 방법을 참조하셔서 먼저 확인하시는게 좋을 듯 합니다.

      블로그 주인장이 파이썬쟁이라서 파이썬 관련한것 찾아서 올려드려요

      소스코드 군데군데에 cpu 사용량을 체크하는 코드를 삽입하셔서 어디에서 가장 많이 CPU를 사용하는지 확인하는게 가장 빠른 방법일 듯 합니다^^

      psutil.cpu_percent

      https://psutil.readthedocs.io/en/latest/
      https://stackoverflow.com/questions/276052/how-to-get-current-cpu-and-ram-usage-in-python
        주소   수정/삭제
    • 비스카이비전이(가) 2020.11.23 08:54 신고에 작성한 답글:
      오 기생충님 감사합니다 ㅎㅎ   주소   수정/삭제
    • 하늘느낌2이(가) 2020.11.23 10:40에 작성한 답글:
      두분다 너무나 감사드립니다.^^   주소   수정/삭제
  4. 하늘느낌2이(가) 2020.11.23 10:44에 작성한 댓글:
    죄송하지만 하나만 더 여쭤보겠습니다.
    detect_common_objects 에 보면 40여가지 사물에 대한 학습이 되어 있는데 혹시 제가 원하는 사물만 빼서 모델을 만들수 있는지요?
    또한 다른 사물을 추가하여 학습을 시킬수 있는지도 궁금합니다. 계속 질문만 드려 죄송합니다. 많은 조언 부탁드립니다. 감사합니다.
      주소   수정/삭제   답글
    • 비스카이비전이(가) 2020.11.23 10:53 신고에 작성한 답글:
      전이학습 transfer learning 을 활용하시면 가능합니다. 전이학습은 이미 대규모 데이터셋에 훈련된 모델을 본인의 필요에 맞게 훈련시켜서 사용하는 기법입니다.   주소   수정/삭제
  5. 기생충이(가) 2020.11.23 14:07에 작성한 댓글:
    아, 혹시 이미지 분류와 물체 검출의 개념이 헷갈리시는 분이 계시다면 아래 글을 참고하세요.^^

    라고 하셨는데요 혹시 물체 분류와 이미지 검출에도 차이가 있을까요?
      주소   수정/삭제   답글
    • 비스카이비전이(가) 2020.11.23 15:23 신고에 작성한 답글:
      그렇게는 용어를 잘 사용하지 않는 걸로 알고 있습니다. 이미지 검출이라고 하면 텍스트, 이미지, 아이콘 등 여러 구성 요소가 있는 화면에서 이미지만을 검출하는 의미가 되어 그렇게 사용되는 경우도 있긴 합니다만..^^;   주소   수정/삭제
  6. f이(가) 2020.12.11 21:46에 작성한 댓글:
    line 172, in cvlib2video
    bbox, label, conf = cv.detect_common_objects(frame, enable_gpu=True)

    이렇게 오류가 나는데 어떤게 문제인가요?
      주소   수정/삭제   답글
  7. 왕굴호떡이(가) 2021.01.22 15:09에 작성한 댓글:
    안녕하세요! 항상 쉽게 잘 알려주셔서 감사합니다
    하다 막히는 부분이 생겼습니다..
    cvlib 또는 Yolo로 object detection할 때 다른 물체는 제외하고 사람만! 검출하려면 어떻게 해야할까요...??
      주소   수정/삭제   답글
    • 비스카이비전이(가) 2021.01.22 19:23 신고에 작성한 답글:
      이미 훈련된 모델을 사용하시는 경우에는 모든 물체를 일단은 검출해내기 때문에, 제 생각에는 사람에 대한 검출 내용만 바운딩 박스로 그려주도록 해주면 될 것 같습니다. 사람에 대한 라벨이 뭔지 확인하신 후에, 조건문으로 검출된 것의 라벨이 사람이면, 바운딩 박스를 그려주게 코드를 살짝 변경해주시면 될 것 같네요. ㅎㅎ   주소   수정/삭제
    • 왕굴호떡이(가) 2021.01.23 12:12에 작성한 답글:
      감사합니다!!!🙊
        주소   수정/삭제
    • 비스카이비전이(가) 2021.01.23 13:24 신고에 작성한 답글:
      다시 오셔서 답글 확인해주셔서 감사합니다!   주소   수정/삭제
  8. 익명이(가) 2021.04.20 01:16에 작성한 댓글:
    • 비스카이비전이(가) 2021.04.20 11:47 신고에 작성한 답글:
      수준 낮은 질문은 없습니다 ㅎㅎ 질문 해주셔서 감사합니다~ 추가로 검출하고 싶은 물체가 있다면 추가로 훈련을 시켜야합니다. 그런데 이게 쉽진 않아요 ㅎㅎ 그래도 tutorial 같은 거 보시면서 따라하시다보면 방법을 찾을 수 있으실 겁니다^^   주소   수정/삭제
    • 카임이(가) 2021.04.20 13:08에 작성한 답글:
      게시글들 너무 잘보고 있습니다. 그리고 좋은 말씀 해주셔서 감사합니다! 그런데 서치를 꽤 많이 해봤는데 맞는 model이랑 config 파일이 있어야 된다고만 봐서 실행시키기 좀 어려운 면이 있었는데 혹시 추천해주실 사이트나 블로그 있으시면 추천해주실 수 있을까요??   주소   수정/삭제
    • 비스카이비전이(가) 2021.04.21 21:59 신고에 작성한 답글:
      1. http://solarisailab.com/archives/2422

      2. https://coral.ai/docs/edgetpu/retrain-detection/#requirements

      위와 같은 링크들이 도움이 되실 것 같습니다.ㅎㅎ 그런데 object detection 모델들은 image classification 모델을 전이학습의 방법으로 훈련시키는 것보다는 좀 더 난이도가 있다는 것은 감안하셔야 합니다..^^
        주소   수정/삭제
    • 카임이(가) 2021.04.29 13:30에 작성한 답글:
      헉 너무 늦게 봐서 죄송합니다 좋은 사이트 인 것 같아요 참고하겠습니다 감사합니다!!   주소   수정/삭제
    • 비스카이비전이(가) 2021.04.29 13:42 신고에 작성한 답글:
      다시 찾아와서 답변 읽어주셔서 감사합니다.^^   주소   수정/삭제
  9. 카임이(가) 2021.05.18 13:56에 작성한 댓글:
    안녕하세요! 오랜만에 다시 왔습니다.ㅎㅎ 다름이 아니라 띄워진 화면을 4개의 영역으로 구분하고 싶은데 바운딩 박스의 4개의 값이 어떤 값을 의미하는건지를 잘모르겠어서 혹시 어떤 값인지 아시거나 4개의 영역으로 구분하는 방법을 아신다면 알고 싶습니다. 예를 들어 왼쪽 위에 컵이 있다면 컵의 위치를 출력하는 방식으로 하려고 하고 있습니다.   주소   수정/삭제   답글
    • 비스카이비전이(가) 2021.05.18 14:00 신고에 작성한 답글:
      일단 이미지를 4개로 분할한다음에 검출을 각각 진행한 후 결과이미지를 다시 원래대로 붙이는 방식으로 가야할것같습니다 ㅎㅎ   주소   수정/삭제
    • 카임이(가) 2021.05.18 14:56에 작성한 답글:
      와... 분할 방법이 많긴한데 전부 어려워 보이네요... 답변 감사드립니다!   주소   수정/삭제
    • 비스카이비전이(가) 2021.05.18 22:18 신고에 작성한 답글:
      이미지가 400 x 600 x 3인 컬러 이미지일 때 [0:200, 0:300, :], [0:200, 300:600, :], [200:400, 0:300, :], [200:400, 300:600, :] 이렇게 분할하시면 됩니다. ^^   주소   수정/삭제
    • 이(가) 2022.08.03 15:33에 작성한 답글:
      ㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉㅉ이런걸 물어보냐
        주소   수정/삭제
    • 비스카이비전이(가) 2022.08.04 00:21 신고에 작성한 답글:
      모르는 것에 대해 질문하는 것을 두고 너무 그러지 마세요^^; 질문을 하는 것 자체가 저는 용기가 필요한 일이라고 생각합니다. 잘 아는 사람들 입장에서는 너무 쉬운 것이고, 해보지도 않고 물어본다고 생각할 수 있지만, 또 잘 모르는 사람 입장에서는 동아줄을 붙잡는 심경일 수도 있으니까요.. ㅎㅎ 아무튼 ㅉ 님의 댓글도 감사드립니다!   주소   수정/삭제
  10. 날다람쥐이(가) 2021.10.16 03:09에 작성한 댓글:
    혹시 웹캠 말고 스마트폰 카메라로 설정할 수 있나요??   주소   수정/삭제   답글
이름
비밀번호
홈페이지
비밀여부