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

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

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

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

속도 예츑의 μž₯점은?

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

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

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

YOLOv8 을 μ‚¬μš©ν•œ 속도 예츑 μ˜ˆμ‹œ

from ultralytics import YOLO
from ultralytics.solutions import speed_estimation
import cv2

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 = speed_estimation.SpeedEstimator()
speed_obj.set_args(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 속도에 따라 μΆ”μ •μΉ˜κ°€ λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

선택적 인수 set_args

이름 μœ ν˜• κΈ°λ³Έκ°’ μ„€λͺ…
reg_pts list [(20, 400), (1260, 400)] 지역 μ˜μ—­μ„ μ •μ˜ν•˜λŠ” 포인트
names dict None 클래슀 이름
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 개체 좔적 κ²°κ³Ό ν‘œμ‹œ


생성 2024-01-05, μ—…λ°μ΄νŠΈ 2024-01-15
μž‘μ„±μž: glenn-jocher (2), AyushExel (1), chr043416@gmail.com (1)

λŒ“κΈ€