μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°

Ultralytics YOLOv8 πŸš€μ„ μ‚¬μš©ν•œ 속도 μΆ”μ •

속도 μΆ”μ •μ΄λž€ λ¬΄μ—‡μΈκ°€μš”?

속도 μΆ”μ •μ΄λž€ 주어진 μƒν™©μ—μ„œ 물체의 이동 속도λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ‘œ, 컴퓨터 λΉ„μ „ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€. 이제 Ultralytics YOLOv8 을 μ‚¬μš©ν•˜λ©΄ 거리 및 μ‹œκ°„ 데이터와 ν•¨κ»˜ 물체 좔적을 μ‚¬μš©ν•˜μ—¬ 물체의 속도λ₯Ό 계산할 수 있으며, μ΄λŠ” ꡐ톡 및 κ°μ‹œμ™€ 같은 μž‘μ—…μ— 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 속도 μΆ”μ •μ˜ 정확성은 λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νš¨μœ¨μ„±κ³Ό 신뒰성에 직접적인 영ν–₯을 λ―ΈμΉ˜λ―€λ‘œ 지λŠ₯ν˜• μ‹œμŠ€ν…œκ³Ό μ‹€μ‹œκ°„ μ˜μ‚¬ κ²°μ • ν”„λ‘œμ„ΈμŠ€μ˜ λ°œμ „μ— 핡심적인 μš”μ†Œμž…λ‹ˆλ‹€.



Watch: λ‹€μŒμ„ μ‚¬μš©ν•œ 속도 μΆ”μ • Ultralytics YOLOv8

λΈ”λ‘œκ·Έ 확인

속도 좔정에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό( Ultralytics YOLOv8 컴퓨터 λΉ„μ „ ν”„λ‘œμ νŠΈμ˜ 속도 μΆ”μ •)을 ν™•μΈν•˜μ„Έμš”.

속도 예츑의 μž₯점은?

  • 효율적인 ꡐ톡 ν†΅μ œ: μ •ν™•ν•œ 속도 μ˜ˆμΈ‘μ€ ꡐ톡 흐름을 κ΄€λ¦¬ν•˜κ³  μ•ˆμ „μ„ κ°•ν™”ν•˜λ©° λ„λ‘œμ˜ ν˜Όμž‘μ„ μ€„μ΄λŠ” 데 도움이 λ©λ‹ˆλ‹€.
  • μ •λ°€ν•œ μžμœ¨μ£Όν–‰ λ‚΄λΉ„κ²Œμ΄μ…˜: μžμœ¨μ£Όν–‰μ°¨μ™€ 같은 자율 μ£Όν–‰ μ‹œμŠ€ν…œμ—μ„œ μ‹ λ’°ν•  수 μžˆλŠ” 속도 μ˜ˆμΈ‘μ€ μ•ˆμ „ν•˜κ³  μ •ν™•ν•œ μ°¨λŸ‰ λ‚΄λΉ„κ²Œμ΄μ…˜μ„ 보μž₯ν•©λ‹ˆλ‹€.
  • κ°•ν™”λœ λ³΄μ•ˆ κ°μ‹œ: κ°μ‹œ λΆ„μ„μ˜ 속도 μΆ”μ • κΈ°λŠ₯은 비정상적인 ν–‰λ™μ΄λ‚˜ 잠재적 μœ„ν˜‘μ„ μ‹λ³„ν•˜μ—¬ λ³΄μ•ˆ 쑰치의 효과λ₯Ό κ°œμ„ ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜

κ΅ν†΅νŽΈ κ΅ν†΅νŽΈ
λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ λ„λ‘œμ—μ„œ 속도 μΆ”μ • Ultralytics YOLOv8 λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ λΈŒλ¦¬μ§€μ—μ„œ 속도 μΆ”μ • Ultralytics YOLOv8
λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ λ„λ‘œμ—μ„œ 속도 μΆ”μ • Ultralytics YOLOv8 λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ λΈŒλ¦¬μ§€μ—μ„œ 속도 μΆ”μ • Ultralytics YOLOv8

YOLOv8 예제λ₯Ό μ‚¬μš©ν•œ 속도 μΆ”μ •

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
names = model.model.names

cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("speed_estimation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

line_pts = [(0, 360), (1280, 360)]

# Init speed-estimation obj
speed_obj = solutions.SpeedEstimator(
    reg_pts=line_pts,
    names=names,
    view_img=True,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)

    im0 = speed_obj.estimate_speed(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
μ†λ„λŠ” μΆ”μ •μΉ˜μž…λ‹ˆλ‹€.

μ†λ„λŠ” μΆ”μ •μΉ˜μ΄λ©° μ™„μ „νžˆ μ •ν™•ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ GPU 속도에 따라 μΆ”μ •μΉ˜κ°€ λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

인수 SpeedEstimator

이름 μœ ν˜• κΈ°λ³Έκ°’ μ„€λͺ…
names dict None 클래슀 이름 사전.
reg_pts list [(20, 400), (1260, 400)] 속도 좔정을 μœ„ν•œ 지역 포인트 λͺ©λ‘μž…λ‹ˆλ‹€.
view_img bool False 주석과 ν•¨κ»˜ 이미지λ₯Ό ν‘œμ‹œν• μ§€ μ—¬λΆ€μž…λ‹ˆλ‹€.
line_thickness int 2 μƒμž 및 νŠΈλž™μ„ 그리기 μœ„ν•œ μ„ μ˜ λ‘κ»˜μž…λ‹ˆλ‹€.
region_thickness int 5 μ˜μ—­ μ„ μ˜ λ‘κ»˜μž…λ‹ˆλ‹€.
spdl_dist_thresh int 10 속도 계산을 μœ„ν•œ 거리 μž„κ³„κ°’μž…λ‹ˆλ‹€.

인수 model.track

이름 μœ ν˜• κΈ°λ³Έκ°’ μ„€λͺ…
source im0 None 이미지 λ˜λŠ” λΉ„λ””μ˜€μ˜ μ†ŒμŠ€ 디렉토리
persist bool False ν”„λ ˆμž„ κ°„ νŠΈλž™ 지속
tracker str botsort.yaml 좔적 방법 'λ°”μ΄νŠΈνŠΈλž™' λ˜λŠ” 'λ΄‡μ†ŒνŠΈ'
conf float 0.3 μ‹ λ’° μž„κ³„κ°’
iou float 0.5 IOU μž„κ³„κ°’
classes list None ν΄λž˜μŠ€λ³„λ‘œ κ²°κ³Όλ₯Ό ν•„ν„°λ§ν•©λ‹ˆλ‹€(예: classes=0 λ˜λŠ” classes=[0,2,3]).
verbose bool True 개체 좔적 κ²°κ³Ό ν‘œμ‹œ


Created 2024-01-05, Updated 2024-06-10
Authors: glenn-jocher (6), IvorZhu331 (1), RizwanMunawar (2), Burhan-Q (1), AyushExel (1)

λŒ“κΈ€