Ultralytics YOLO26을 사용한 거리 계산#
거리 계산이란 무엇인가요?#
거리 계산은 이미지 또는 비디오 프레임에서 감지된 두 객체 사이의 간격을 측정하는 과정입니다. Ultralytics YOLO26의 경우, 사용자가 지정한 바운딩 박스의 중심점을 사용해 바운딩 박스 사이의 거리를 계산합니다.
시청: Ultralytics YOLO로 감지된 객체 간 거리를 픽셀 단위로 추정하는 방법 🚀
시각 자료#
| Ultralytics YOLO26을 사용한 거리 계산 |
|---|
![]() |
거리 계산의 장점#
- 위치 정밀도: 컴퓨터 비전 작업에서 정확한 공간 위치 파악을 개선합니다.
- 크기 추정: 객체 크기를 추정하여 맥락을 더 잘 파악할 수 있습니다.
- 장면 이해: 자율주행 차량 및 감시 시스템과 같은 애플리케이션에서 더 나은 의사 결정을 내릴 수 있도록 3D 장면 이해도를 높입니다.
- 충돌 방지: 움직이는 객체 사이의 거리를 모니터링하여 잠재적인 충돌을 감지할 수 있습니다.
- 공간 분석: 모니터링 환경 내 객체 간의 관계와 상호작용을 분석할 수 있습니다.
거리 계산
- 마우스 왼쪽 버튼으로 바운딩 박스 두 개를 클릭하면 거리를 계산합니다.
- 마우스 오른쪽 버튼을 눌러 그린 점을 모두 삭제합니다.
거리는 추정값입니다
거리는 추정값이며, 깊이 정보가 없는 2D 데이터를 사용해 계산하므로 완전히 정확하지 않을 수 있습니다.
YOLO26으로 거리 계산하기#
DistanceCalculation 솔루션은 프레임 간 객체를 추적하고, 마우스로 선택한 바운딩 박스 두 개의 중심점 사이 유클리드 거리를 픽셀 단위로 측정합니다. 아래 예제를 실행한 다음 객체 두 개를 마우스 왼쪽 버튼으로 클릭하면 두 객체를 잇는 선이 그려지고 거리가 표시됩니다. 마우스 오른쪽 버튼을 누르면 선택 항목이 지워집니다.
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# 비디오 작성기
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# 거리 계산 객체 초기화
distancecalculator = solutions.DistanceCalculation(
model="yolo26n.pt", # YOLO26 모델 파일의 경로입니다.
show=True, # 출력을 표시합니다.
)
# 비디오 처리
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = distancecalculator(im0)
print(results) # 출력에 액세스합니다
video_writer.write(results.plot_im) # 처리된 프레임을 저장합니다.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # 열려 있는 모든 창 닫기DistanceCalculation() 인수#
다음은 DistanceCalculation 인수 표입니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 모델 파일의 경로입니다. |
line_width | int | 2 | Solution에서 그리는 상자, 키포인트 및 개수 표시의 선 두께입니다. |
verbose | bool | True | 프레임별 입력 형태, 클래스 개수 및 처리 속도 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다. |
DistanceCalculation 솔루션에서 다양한 track 인수를 사용할 수도 있습니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | 사용할 추적 알고리즘을 지정합니다. 기본 제공 옵션: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | 탐지에 대한 신뢰도 임계값을 설정합니다. 값을 낮추면 추적할 수 있는 객체가 늘어나지만 오탐이 포함될 수 있습니다. |
iou | float | 0.7 | 중복 탐지를 필터링하기 위한 교집합 대비 합집합 (IoU) 임계값을 설정합니다. |
classes | list | None | 클래스 인덱스로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3]은 지정된 클래스만 추적합니다. |
device | str | None | 추론에 사용할 장치를 지정합니다(예: cpu, cuda:0 또는 0). 사용자는 모델 실행에 사용할 CPU, 특정 GPU 또는 기타 연산 장치를 선택할 수 있습니다. |
imgsz | int or tuple | 640 | 추론 대상 이미지 크기입니다. 정사각형을 나타내는 정수 또는 (height, width) 쌍을 지정합니다. 모델 stride에 맞춰 형태가 조정됩니다. |
max_det | int | 300 | 추적 전에 프레임별로 유지할 최대 탐지 수를 지정하여 밀집된 장면에서 솔루션이 처리하는 객체 수를 제한합니다. |
quantize | int or str | None | 추론 정밀도입니다. PyTorch 및 TorchScript 모델의 경우 16 (FP16) 또는 32/미설정(FP32)을 사용합니다. 다른 형식은 아티팩트와 런타임에서 선택한 정밀도로 계산합니다. 더 이상 사용되지 않는 half 플래그를 대체합니다. |
또한 다음 시각화 인수를 사용할 수 있습니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
show | bool | False | True이면 주석이 추가된 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 얻는 데 유용합니다. |
show_conf | bool | True | 각 감지 결과의 레이블 옆에 신뢰도 점수를 표시합니다. 각 감지 결과에 대한 모델의 확신도를 파악할 수 있습니다. |
show_labels | bool | True | 시각화 출력에 각 감지 결과의 레이블을 표시합니다. 감지된 객체를 즉시 파악할 수 있습니다. |
구현 세부 정보#
DistanceCalculation 클래스는 비디오 프레임 간 객체를 추적하고 선택된 바운딩 박스의 중심점 사이 유클리드 거리를 계산합니다. 객체 두 개를 클릭하면 솔루션은 다음 작업을 수행합니다:
- 선택한 바운딩 박스의 중심점(중앙 지점)을 추출합니다
- 이 중심점 사이의 유클리드 거리를 픽셀 단위로 계산합니다
- 객체 사이를 잇는 선과 함께 프레임에 거리를 표시합니다
이 구현은 마우스 상호작용을 처리하기 위해 mouse_event_for_distance 메서드를 사용하며, 사용자가 필요에 따라 객체를 선택하고 선택 항목을 지울 수 있도록 합니다. process 메서드는 프레임별 처리, 객체 추적 및 거리 계산을 담당합니다.
응용 분야#
YOLO26을 사용한 거리 계산은 다양한 실제 애플리케이션에 활용할 수 있습니다:
- 리테일 분석: 고객과 제품 사이의 거리를 측정하고 매장 레이아웃의 효과를 분석합니다
- 산업 안전: 작업자와 기계 사이의 안전 거리를 모니터링합니다
- 교통 관리: 차량 간격을 분석하고 안전거리 미확보를 감지합니다
- 스포츠 분석: 선수, 공 및 경기장의 주요 위치 사이 거리를 계산합니다
- 헬스케어: 대기 공간에서 적절한 거리를 유지하고 환자의 이동을 모니터링합니다
- 로보틱스: 로봇이 장애물 및 사람과 적절한 거리를 유지하도록 합니다
자주 묻는 질문#
Ultralytics YOLO26을 사용해 객체 사이의 거리를 계산하려면 감지된 객체의 바운딩 박스 중심점을 찾아야 합니다. 이 과정에서는 Ultralytics의
solutions모듈에서DistanceCalculation클래스를 초기화하고, 모델의 추적 출력을 사용해 거리를 계산합니다.예, Ultralytics YOLO26으로 실시간 비디오 스트림에서 거리를 계산할 수 있습니다. 이 과정에서는 OpenCV를 사용해 비디오 프레임을 캡처하고, YOLO26 객체 감지를 실행한 다음,
DistanceCalculation클래스를 사용해 연속된 프레임의 객체 사이 거리를 계산합니다. 자세한 구현 방법은 비디오 스트림 예제를 참조하세요.Ultralytics YOLO26으로 거리 계산 중에 그린 점을 삭제하려면 마우스 오른쪽 버튼을 클릭하면 됩니다. 이 동작으로 그린 점이 모두 지워집니다. 자세한 내용은 거리 계산 예제의 참고 섹션을 참조하세요.
Ultralytics YOLO26에서
DistanceCalculation클래스를 초기화하는 데 필요한 주요 인수는 다음과 같습니다:model: YOLO26 모델 파일의 경로입니다.tracker: 사용할 추적 알고리즘입니다(솔루션의 기본값은tracktrack.yaml입니다).conf: 감지 신뢰도 임계값입니다.show: 출력을 표시할지 지정하는 플래그입니다.
전체 인수 목록과 기본값은 DistanceCalculation 인수를 참조하세요.
