inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

바운딩박스를 객체 판별 없이 사용할 수 있나요?

228

소소소

작성한 질문수 1

1

라즈베리파이와 아두이노를 활용한 프로젝트를 진행하고 있는데 정말 아무것도 모르는 초보라 이해해주시면 감사하겠습니다!

라즈베리파이 카메라모듈을 사용하여 카메라에 인식된 물체에 바운딩박스를 씌우고, 그 중심점 좌표와 크기만 얻으면 되는데, 바운딩박스에 대해 찾아보면 yolo를 활용하여 데이터 학습을 시키고 꼭 객체 판별을 하더라고요. 하지만 저는 객체가 개인지 새인지 판별하는 그런 것은 필요가 없어서 그저 카메라에 인식된 물체에 바운딩박스만 씌우고 좌표와 크기를 받아오는, 할 수 있으면 거리까지 측정할 수 있는 방법이 있을지 궁금합니다.

 

예제 코드도 같이 알려주시면 이해가 잘 될 것 같습니다!

바운딩박스 객체인식 라즈베리파이 python

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
소소소님, 라즈베리파이와 아두이노 프로젝트에서 바운딩박스를 사용하면서 객체 판별 없이 물체의 위치와 크기 등을 얻고 싶으신 경우, YOLO와 같은 객체 인식 모델을 사용하지 않고도 가능합니다. OpenCV라는 라이브러리를 통해 간단한 움직임 감지와 바운딩박스 처리가 가능합니다.

우선 OpenCV를 설치해야 하며, Python을 사용한다고 가정하고 예제 코드를 제공해드리겠습니다. 아래 코드는 움직임 감지를 통해 카메라에 비춰진 물체에 바운딩박스를 만드는 예제입니다.

import cv2

# 카메라 장치 열기
cap = cv2.VideoCapture(0) 

while True:
    # 프레임 읽기
    ret, frame = cap.read()
    
    # 그레이스케일 변환
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 블러 적용
    blur = cv2.GaussianBlur(gray, (21, 21), 0)
    
    # 첫 번째 프레임 저장
    if 'first_frame' not in globals():
        first_frame = blur
        continue
    
    # 첫 번째 프레임과 현재 프레임의 차이 계산
    delta_frame = cv2.absdiff(first_frame, blur)
    thresh_frame = cv2.threshold(delta_frame, 30, 255, cv2.THRESH_BINARY)[1]
    thresh_frame = cv2.dilate(thresh_frame, None, iterations=2)
    
    # 윤곽선 찾기
    contours, _ = cv2.findContours(thresh_frame.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    for contour in contours:
        if cv2.contourArea(contour) < 500: # 너무 작은 물체는 무시
            continue
        (x, y, w, h) = cv2.boundingRect(contour)
        # 바운딩박스 그리기
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 3)
        # 중심점 좌표 출력
        center_x, center_y = int(x + w/2), int(y + h/2)
        print(f"Center: {center_x}, {center_y}")
    
    # 화면에 프레임 보여주기
    cv2.imshow("Frame", frame)
    
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

위 코드는 webcam을 사용하여 물체를 감지하고, 그 물체에 바운딩박스를 그립니다. 또한 각 물체의 중심좌표를 콘솔에 출력합니다. 거리 측정의 경우, 카메라 기반일 때는 수학적 모델링이나 추가 센서가 필요할 수 있습니다. 초음파 센서나 적외선 거리 센서를 추가로 활용하여 거리를 측정하는 것도 방법입니다.

도움이 되셨으면 좋겠습니다! 추가 질문이 있다면 언제든지 문의해주세요.
출처: OpenCV: Motion Detector Example

26-1년도 이론문제 재탕

0

12

1

26-1년도 코드문제 재탕

0

6

0

계좌잔고 조회하기

0

6

0

안녕하세요 강사님

0

10

1

[시험 준비] AICE Associate 단기간 합격을 위한 모의고사 활용 방법 문의

1

12

1

이론재탕만 눈치챘어도

0

20

1

25-3년도 이론문제 재탕

0

14

1

25-3년도 코드문제 재탕

0

12

0

출력값 문의

0

13

2

인코딩을 다 꼭 해봐야하는지

0

10

1

LLM 시대에서 머신러닝 개념 이해 필요성 문의

0

15

0

25-2 분기커버리지

0

19

0

25-2 이론 재탕

0

25

1

25-1 이론 재탕

0

24

1

강의 잘보고 있습니다. 강의 파일을 어디서 찾아야 되는지 몰라서 여쭤 봅니다.

0

19

1

서브넷 마스크

0

32

1

모의고사 1회 계산문제 2개 맞았는데

0

51

2

기존 미국주식 자동매매 프로그램과 같은 AWS 서버에서 돌리려고 할때

1

37

1

안녕하세요? 강사님 질문있습니다.(인코딩관련)

0

51

2

강의자료 문의

0

44

1

업캐스팅 문제 예시 4번 부모 호출

0

43

1

강의자료 링크 열리지 않음.

0

42

2

이진분류에서 양성 클래스가 0일 때 평가 방법

0

44

2

모의고사 자료 해설이 너무 불친절하네요.

0

85

2