Ultralytics YOLO26을 사용한 거리 계산#
거리 계산이란 무엇인가요?#
거리 계산은 이미지 또는 비디오 프레임 내에서 감지된 두 객체 사이의 공간을 측정하는 과정입니다. Ultralytics YOLO26의 경우, 사용자가 강조 표시한 바운딩 박스의 바운딩 박스 중심점을 사용하여 바운딩 박스 간 거리를 계산합니다.
Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀
시각 자료#
| Ultralytics YOLO26을 사용한 거리 계산 |
|---|
![]() |
거리 계산의 장점#
- 위치 정밀도: 컴퓨터 비전 작업에서 정확한 공간 위치 파악을 향상합니다.
- 크기 추정: 더 나은 맥락 이해를 위해 객체 크기를 추정할 수 있습니다.
- 장면 이해: 자율주행 차량 및 감시 시스템과 같은 애플리케이션에서 더 나은 의사 결정을 내릴 수 있도록 3D 장면 이해도를 향상합니다.
- 충돌 회피: 움직이는 객체 간 거리를 모니터링하여 잠재적인 충돌을 감지할 수 있습니다.
- 공간 분석: 모니터링 환경 내 객체의 관계와 상호작용을 분석할 수 있습니다.
거리 계산
- 거리를 계산하려면 마우스 왼쪽 버튼으로 두 바운딩 박스를 클릭합니다.
- 그려진 모든 포인트를 삭제하려면 마우스 오른쪽 버튼을 사용합니다.
거리는 추정값입니다
거리는 추정치이며 깊이 정보가 부족한 2차원 데이터를 사용하여 계산되므로 완전히 정확하지 않을 수 있습니다.
YOLO26으로 거리 계산하기#
DistanceCalculation 솔루션은 프레임 전체에서 객체를 추적하고, 마우스로 선택한 두 바운딩 박스의 중심점 간 유클리드 거리를 픽셀 단위로 측정합니다. 아래 예제를 실행한 다음 두 객체를 왼쪽 클릭하여 연결선을 그리고 거리를 확인합니다. 선택을 지우려면 오른쪽 클릭합니다.
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Video writer
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))
# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(
model="yolo26n.pt", # path to the YOLO26 model file.
show=True, # display the output
)
# Process video
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) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windowsDistanceCalculation() 인수#
다음은 DistanceCalculation 인수 표입니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 모델 파일의 경로입니다. |
line_width | int | 2 | 솔루션이 그리는 박스, 키포인트 및 카운트의 선 두께입니다. |
verbose | bool | True | 입력 형태, 클래스별 개수 및 처리 속도의 프레임별 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다. |
DistanceCalculation 솔루션에서 다양한 track 인수를 사용할 수도 있습니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
tracker | str | 'botsort.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) 쌍입니다. 형태는 모델 스트라이드에 맞게 조정됩니다. |
max_det | int | 300 | 추적 전 프레임당 유지되는 최대 검출 수로, 솔루션이 밀집된 장면에서 처리하는 객체를 제한합니다. |
quantize | int or str | None | 추론 정밀도: PyTorch 및 TorchScript 모델의 경우 16(FP16) 또는 32/설정 안 함(FP32); 기타 형식은 아티팩트와 런타임이 선택하는 정밀도로 계산됩니다. 더 이상 사용되지 않는 half 플래그를 대체합니다. |
또한 다음과 같은 시각화 인수를 사용할 수 있습니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
show | bool | False | True인 경우 annotation이 추가된 이미지 또는 비디오를 window에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 제공하는 데 유용합니다. |
show_conf | bool | True | 각 detection의 confidence score를 label과 함께 표시합니다. 각 detection에 대한 모델의 확신 정도를 파악할 수 있습니다. |
show_labels | bool | True | visual output에 각 detection의 label을 표시합니다. 검출된 객체를 즉시 파악할 수 있습니다. |
구현 세부 정보#
DistanceCalculation 클래스는 비디오 프레임 전체에서 객체를 추적하고 선택한 바운딩 박스의 중심점 간 유클리드 거리를 계산합니다. 두 객체를 클릭하면 솔루션은 다음을 수행합니다.
- 선택한 바운딩 박스의 중심점(중앙 포인트)을 추출합니다.
- 이러한 중심점 간 유클리드 거리를 픽셀 단위로 계산합니다.
- 객체 사이에 연결선을 표시하고 프레임에 거리를 표시합니다.
이 구현에서는 mouse_event_for_distance 메서드를 사용하여 마우스 상호작용을 처리하므로, 필요에 따라 객체를 선택하고 선택을 해제할 수 있습니다. process 메서드는 프레임별 처리, 객체 추적 및 거리 계산을 담당합니다.
응용 분야#
YOLO26을 사용한 거리 계산은 다양한 실제 애플리케이션에 활용할 수 있습니다.
- 소매 분석: 고객과 제품 간의 근접성을 측정하고 매장 레이아웃의 효율성을 분석합니다.
- 산업 안전: 작업자와 기계 사이의 안전거리를 모니터링합니다.
- 교통 관리: 차량 간 간격을 분석하고 앞차와의 안전거리 미확보를 감지합니다.
- 스포츠 분석: 선수, 공 및 경기장의 주요 위치 간 거리를 계산합니다.
- 의료: 대기 구역에서 적절한 거리를 유지하고 환자의 움직임을 모니터링합니다.
- 로보틱스: 로봇이 장애물 및 사람과 적절한 거리를 유지하도록 합니다.
FAQ#
Ultralytics YOLO26을 사용하여 객체 간 거리를 계산하려면 감지된 객체의 바운딩 박스 중심점을 식별해야 합니다. 이 과정에는 Ultralytics의
solutions모듈에서DistanceCalculation클래스를 초기화하고 모델의 추적 출력을 사용하여 거리를 계산하는 작업이 포함됩니다.예, Ultralytics YOLO26을 사용하여 실시간 비디오 스트림에서 거리 계산을 수행할 수 있습니다. 이 과정에는 OpenCV를 사용하여 비디오 프레임을 캡처하고, YOLO26 객체 감지를 실행하며,
DistanceCalculation클래스를 사용하여 연속 프레임의 객체 간 거리를 계산하는 작업이 포함됩니다. 자세한 구현 방법은 비디오 스트림 예제를 참조하세요.Ultralytics YOLO26으로 거리 계산을 수행하는 중 그려진 포인트를 삭제하려면 마우스 오른쪽 버튼을 클릭하면 됩니다. 이 작업을 수행하면 그린 모든 포인트가 지워집니다. 자세한 내용은 거리 계산 예제의 참고 섹션을 참조하세요.
Ultralytics YOLO26에서
DistanceCalculation클래스를 초기화할 때 사용하는 주요 인수는 다음과 같습니다.model: YOLO26 모델 파일의 경로입니다.tracker: 사용할 추적 알고리즘입니다(솔루션의 기본값은botsort.yaml입니다).conf: 감지를 위한 신뢰도 임계값입니다.show: 출력을 표시하기 위한 플래그입니다.
전체 목록과 기본값은 DistanceCalculation의 인수를 참조하세요.
