본문 바로가기

Computer Vision + Python/비전 프로그래밍 기초 (초급자)

Python으로 이미지에서 물품 크기/부피 자동 측정(Size Measurement) – 물류/창고 응용

Python으로 이미지에서 물품 크기/부피 자동 측정(Size Measurement) – 물류/창고 응용

물류와 창고 산업에서는 물품의 크기(Size)부피(Volume) 를 빠르고 정확하게 측정하는 것이 효율적인 운영의 핵심입니다.
과거에는 사람이 직접 자나 줄자를 사용해 측정했지만, 최근에는 컴퓨터 비전(Computer Vision) 기술을 이용한 자동 측정 시스템이 급속히 확산되고 있습니다.
이번 글에서는 Python과 OpenCV를 이용해 이미지로부터 물체의 크기와 부피를 자동으로 측정하는 방법을 살펴보고, 이를 물류 및 창고 관리 분야에 어떻게 적용할 수 있는지 설명합니다.


컴퓨터 비전 기반 크기 측정의 개념

이미지 기반 크기 측정은 카메라를 통해 촬영한 영상을 분석하여 물체의 실제 물리적 크기를 계산하는 기술입니다.
이때, 단순히 픽셀 단위를 세는 것이 아니라, 이미지 내 참조 기준(Reference Object) 을 사용해 픽셀과 실제 단위(mm, cm 등) 의 비율을 계산하는 방식으로 진행됩니다.

핵심 원리

  1. 참조 객체(Reference Object) 설정
    • 예: A4 용지, 동전, 또는 기준 스티커
    • 이미지 내에 이미 크기를 알고 있는 물체를 포함하여 비율 계산의 기준으로 사용합니다.
  2. 에지 검출(Edge Detection)
    • 물체의 외곽선을 찾아 경계선을 식별합니다.
  3. 거리 계산(Distance Calculation)
    • 픽셀 단위의 길이를 계산하고, 기준 비율을 곱하여 실제 크기를 추정합니다.

Python과 OpenCV로 물체 크기 측정 구현

Python에서는 OpenCV와 NumPy를 활용하여 이미지 내 물체의 크기를 손쉽게 계산할 수 있습니다.
다음은 참조 물체(A4 용지) 를 기준으로 사각형 물체의 실제 크기를 계산하는 예시입니다.

import cv2
import numpy as np

# 1. 이미지 불러오기
image = cv2.imread('box.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)

# 2. 에지 검출
edges = cv2.Canny(blurred, 50, 150)

# 3. 윤곽선 탐지
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 4. 기준 객체 크기 (예: A4 용지 폭 210mm)
KNOWN_WIDTH = 210.0

# 5. 가장 큰 윤곽선 선택 및 경계 상자 계산
for c in contours:
    if cv2.contourArea(c) < 1000:
        continue
    rect = cv2.minAreaRect(c)
    (x, y), (width, height), angle = rect

    # 픽셀 단위 비율 계산
    pixel_per_mm = width / KNOWN_WIDTH

    # 실제 크기 계산
    actual_width = width / pixel_per_mm
    actual_height = height / pixel_per_mm

    print(f"실제 크기: {actual_width:.1f}mm x {actual_height:.1f}mm")

이 코드는 단일 이미지에서 물체의 크기를 측정하는 간단한 예시로,
물체의 윤곽선을 찾고 기준 물체(A4 용지 등)를 통해 실제 크기를 계산합니다.


부피(Volume) 측정을 위한 확장

부피 계산은 물체의 3차원 구조를 분석해야 하므로, 여러 각도의 이미지 또는 깊이 센서(Depth Sensor) 가 필요합니다.
하지만 일반 2D 카메라로도 일정한 가정을 통해 근사치 계산이 가능합니다.

간단한 부피 계산 원리

  1. 평면 이미지에서 길이와 너비 계산
  2. 물체의 높이를 추정
    • 그림자나 투영 패턴을 활용하거나,
      스테레오 카메라 또는 LiDAR 데이터를 이용
  3. 부피 계산 공식 적용
    • 예: 부피 = 길이 × 너비 × 높이
length = 120.5  # mm
width = 80.3
height = 55.2
volume = length * width * height
print(f"추정 부피: {volume/1000:.2f} cm³")

정확한 부피 측정을 위해서는 3D Reconstruction(3D 복원) 기술과 결합하는 것이 이상적입니다.
예를 들어, 여러 방향에서 촬영한 이미지를 결합하여 3D 모델을 만든 뒤, 부피를 수학적으로 계산할 수 있습니다.


물류 및 창고 관리에서의 활용

이미지 기반 자동 크기 측정 시스템은 스마트 물류(Smart Logistics)창고 자동화(Warehouse Automation) 분야에서 핵심 역할을 하고 있습니다.

1. 자동 분류 시스템

카메라가 제품의 크기를 인식하고, 그에 따라 자동으로 분류 라인으로 전송합니다.
예를 들어, 소형, 중형, 대형 물품을 자동으로 구분할 수 있습니다.

2. 패키징 최적화

물품의 크기를 자동으로 측정하여 최적의 포장 상자를 추천하거나, 공간 낭비를 최소화하는 데 활용됩니다.

3. 재고 관리 및 창고 배치

부피 정보를 기반으로 창고 내 공간 최적화(Storage Optimization) 가 가능합니다.
또한, 제품의 크기별로 자동 정렬 시스템을 운영할 수 있습니다.

4. 물류비 절감

화물의 크기와 부피를 자동으로 인식해 운송 효율을 극대화하고,
무게 대비 부피 요금 계산에도 활용됩니다.


딥러닝을 활용한 정밀 크기 측정

최근에는 단순 픽셀 계산을 넘어 딥러닝 기반 객체 검출(Object Detection) 모델을 이용해 더욱 정밀한 크기 측정이 가능합니다.
예를 들어 YOLO, Faster R-CNN, Mask R-CNN 모델을 사용하여 물체를 정확히 분리하고,
그 경계 상자를 통해 물리적 크기를 추정합니다.

# 예시: YOLO를 이용한 물체 탐지 후 크기 계산
# 탐지된 bounding box의 좌표를 이용하여 픽셀 단위 길이 계산
x1, y1, x2, y2 = 100, 150, 400, 380
width_pixels = x2 - x1
height_pixels = y2 - y1

# 기준 비율 적용
real_width = width_pixels / pixel_per_mm
real_height = height_pixels / pixel_per_mm

딥러닝 모델은 불규칙한 형태의 물체나 배경이 복잡한 이미지에서도 높은 정확도를 제공합니다.
특히, 창고 자동화 시스템에서는 카메라와 AI가 협업하여 물품의 크기, 무게, 형태를 동시에 분석합니다.


결론

Python과 OpenCV를 이용한 이미지 기반 크기 및 부피 측정 기술은
물류, 유통, 창고 관리 분야에서 업무 효율을 극대화할 수 있는 핵심 기술입니다.
단순히 카메라 한 대로 물체의 크기를 실시간으로 측정하고 자동으로 기록할 수 있어,
비용 절감과 데이터 기반 관리가 가능합니다.

향후에는 3D 센서, 딥러닝 모델, 로보틱스 시스템과 결합하여
완전 자동화된 비전 기반 물류 측정 플랫폼이 구축될 것입니다.
Python을 활용한 이 기술은 중소 물류 업체부터 대형 스마트 창고까지 모두에게 실질적인 혁신을 가져올 수 있습니다.