Ultralytics YOLOv8 πμ μ¬μ©ν μλ μΆμ
μλ μΆμ μ΄λ 무μμΈκ°μ?
μλ μΆμ μ΄λ μ£Όμ΄μ§ μν©μμ 물체μ μ΄λ μλλ₯Ό κ³μ°νλ νλ‘μΈμ€λ‘, μ»΄ν¨ν° λΉμ μ ν리μΌμ΄μ μμ μμ£Ό μ¬μ©λ©λλ€. μ΄μ Ultralytics YOLOv8 μ μ¬μ©νλ©΄ 거리 λ° μκ° λ°μ΄ν°μ ν¨κ» 물체 μΆμ μ μ¬μ©νμ¬ λ¬Όμ²΄μ μλλ₯Ό κ³μ°ν μ μμΌλ©°, μ΄λ κ΅ν΅ λ° κ°μμ κ°μ μμ μ λ§€μ° μ€μν©λλ€. μλ μΆμ μ μ νμ±μ λ€μν μ ν리μΌμ΄μ μ ν¨μ¨μ±κ³Ό μ λ’°μ±μ μ§μ μ μΈ μν₯μ λ―ΈμΉλ―λ‘ μ§λ₯ν μμ€ν κ³Ό μ€μκ° μμ¬ κ²°μ νλ‘μΈμ€μ λ°μ μ ν΅μ¬μ μΈ μμμ λλ€.
Watch: λ€μμ μ¬μ©ν μλ μΆμ 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-05-08
μμ±μ: Burhan-Q (1), RizwanMunawar (2), κΈλ μ‘°μ² (2), μμ μ μμ (1)