인프런 커뮤니티 질문&답변

소소소님의 프로필 이미지
소소소

작성한 질문수

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

작성

·

109

·

수정됨

1

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

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

 

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

답변 1

1

안녕하세요, 인프런 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

소소소님의 프로필 이미지
소소소

작성한 질문수

질문하기