ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому

Аналитика с использованиСм Ultralytics YOLOv8

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ руководство содСрТит ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ‚Ρ€Π΅Ρ… основных Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…: Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ², гистограмм ΠΈ ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эти Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python.

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ Барная стойка ΠšΡ€ΡƒΠ³ΠΎΠ²Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°
Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ Барная стойка ΠšΡ€ΡƒΠ³ΠΎΠ²Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π²Π°ΠΆΠ½Ρ‹

  • Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ идСально подходят для отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π·Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ для сравнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Ρ€ΡƒΠΏΠΏ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄.
  • Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, столбчатыС Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ подходят для сравнСния количСств Π² Ρ€Π°Π·Π½Ρ‹Ρ… катСгориях ΠΈ дСмонстрации взаимосвязи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ΅ΠΉ ΠΈ Π΅Π΅ числовым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.
  • НаконСц, ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ эффСктивны для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ катСгориями ΠΈ дСмонстрации частСй Ρ†Π΅Π»ΠΎΠ³ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")

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))

out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(
    type="line",
    writer=out,
    im0_shape=(w, h),
    view_img=True,
)
total_counts = 0
frame_count = 0

while cap.isOpened():
    success, frame = cap.read()

    if success:
        frame_count += 1
        results = model.track(frame, persist=True, verbose=True)

        if results[0].boxes.id is not None:
            boxes = results[0].boxes.xyxy.cpu()
            for box in boxes:
                total_counts += 1

        analytics.update_line(frame_count, total_counts)

        total_counts = 0
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")

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))
out = cv2.VideoWriter("multiple_line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(
    type="line",
    writer=out,
    im0_shape=(w, h),
    view_img=True,
    max_points=200,
)

frame_count = 0
data = {}
labels = []

while cap.isOpened():
    success, frame = cap.read()

    if success:
        frame_count += 1

        results = model.track(frame, persist=True)

        if results[0].boxes.id is not None:
            boxes = results[0].boxes.xyxy.cpu()
            track_ids = results[0].boxes.id.int().cpu().tolist()
            clss = results[0].boxes.cls.cpu().tolist()

            for box, track_id, cls in zip(boxes, track_ids, clss):
                # Store each class label
                if model.names[int(cls)] not in labels:
                    labels.append(model.names[int(cls)])

                # Store each class count
                if model.names[int(cls)] in data:
                    data[model.names[int(cls)]] += 1
                else:
                    data[model.names[int(cls)]] = 0

        # update lines every frame
        analytics.update_multiple_lines(data, labels, frame_count)
        data = {}  # clear the data list for next frame
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")

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))

out = cv2.VideoWriter("pie_chart.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(
    type="pie",
    writer=out,
    im0_shape=(w, h),
    view_img=True,
)

clswise_count = {}

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True, verbose=True)
        if results[0].boxes.id is not None:
            boxes = results[0].boxes.xyxy.cpu()
            clss = results[0].boxes.cls.cpu().tolist()
            for box, cls in zip(boxes, clss):
                if model.names[int(cls)] in clswise_count:
                    clswise_count[model.names[int(cls)]] += 1
                else:
                    clswise_count[model.names[int(cls)]] = 1

            analytics.update_pie(clswise_count)
            clswise_count = {}

        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")

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))

out = cv2.VideoWriter("bar_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(
    type="bar",
    writer=out,
    im0_shape=(w, h),
    view_img=True,
)

clswise_count = {}

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True, verbose=True)
        if results[0].boxes.id is not None:
            boxes = results[0].boxes.xyxy.cpu()
            clss = results[0].boxes.cls.cpu().tolist()
            for box, cls in zip(boxes, clss):
                if model.names[int(cls)] in clswise_count:
                    clswise_count[model.names[int(cls)]] += 1
                else:
                    clswise_count[model.names[int(cls)]] = 1

            analytics.update_bar(clswise_count)
            clswise_count = {}

        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")

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))

out = cv2.VideoWriter("area_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(
    type="area",
    writer=out,
    im0_shape=(w, h),
    view_img=True,
)

clswise_count = {}
frame_count = 0

while cap.isOpened():
    success, frame = cap.read()
    if success:
        frame_count += 1
        results = model.track(frame, persist=True, verbose=True)

        if results[0].boxes.id is not None:
            boxes = results[0].boxes.xyxy.cpu()
            clss = results[0].boxes.cls.cpu().tolist()

            for box, cls in zip(boxes, clss):
                if model.names[int(cls)] in clswise_count:
                    clswise_count[model.names[int(cls)]] += 1
                else:
                    clswise_count[model.names[int(cls)]] = 1

        analytics.update_area(frame_count, clswise_count)
        clswise_count = {}
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

АргумСнт Analytics

Π’ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° с Analytics Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

Имя Π’ΠΈΠΏ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ОписаниС
type str None Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
im0_shape tuple None Π€ΠΎΡ€ΠΌΠ° исходного изобраТСния.
writer cv2.VideoWriter None ΠžΠ±ΡŠΠ΅ΠΊΡ‚ для записи Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ².
title str ultralytics НазваниС для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.
x_label str x НаклСйка для оси Ρ….
y_label str y НаклСйка для оси y.
bg_color str white Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚.
fg_color str black Π¦Π²Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°.
line_color str yellow Π¦Π²Π΅Ρ‚ Π»ΠΈΠ½ΠΈΠΉ.
line_width int 2 Π¨ΠΈΡ€ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΉ.
fontsize int 13 Π Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° для тСкста.
view_img bool False Π€Π»Π°Π³ для отобраТСния изобраТСния ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ.
save_img bool True ΠŸΠΎΡΡ‚Π°Π²ΡŒ Ρ„Π»Π°Π³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ.
max_points int 50 Для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π»ΠΈΠ½ΠΈΠΉ ΠΎΠ±Ρ‰Π΅Π΅ количСство Ρ‚ΠΎΡ‡Π΅ΠΊ, нарисованных Π½Π° Ρ€Π°ΠΌΠ΅, ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ.
points_width int 15 Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° подсвСтки Ρ‚ΠΎΡ‡Π΅ΠΊ Π»ΠΈΠ½ΠΈΠΈ.

АргумСнты model.track

Имя Π’ΠΈΠΏ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ОписаниС
source im0 None исходный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ
persist bool False Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Π΄Ρ€Π°ΠΌΠΈ
tracker str botsort.yaml ΠœΠ΅Ρ‚ΠΎΠ΄ отслСТивания 'bytetrack' ΠΈΠ»ΠΈ 'botsort'
conf float 0.3 ΠŸΠΎΡ€ΠΎΠ³ довСрия
iou float 0.5 ΠŸΠΎΡ€ΠΎΠ³ IOU
classes list None Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎ классам, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ classes=0, ΠΈΠ»ΠΈ classes=[0,2,3]
verbose bool True ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² отслСТивания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ для эффСктивного Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, гистограммы ΠΈ ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ - это основныС инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π΅Π±Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΈ эффСктивно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ‚Π²ΠΎΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠžΠŸΠ ΠžΠ‘Π« И ΠžΠ’Π’Π•Π’Π«

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ultralytics YOLOv8 Analytics?

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ultralytics YOLOv8 Analytics, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. Π—Π°Π³Ρ€ΡƒΠ·ΠΈ модСль YOLOv8 ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉ свой Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ».
  2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉ Analytics класс с Ρ‚ΠΈΠΏΠΎΠΌ "линия".
  3. Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡΡ ΠΏΠΎ ΠΊΠ°Π΄Ρ€Π°ΠΌ Π²ΠΈΠ΄Π΅ΠΎ, обновляя Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ количСством ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠ°Π΄Ρ€Π΅.
  4. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(type="line", writer=out, im0_shape=(w, h), view_img=True)

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True)
        total_counts = sum([1 for box in results[0].boxes.xyxy])
        analytics.update_line(frame_count, total_counts)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Analytics посСтитС Аналитика с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ultralytics YOLOv8 πŸ“Š. Π Π°Π·Π΄Π΅Π».

Π’ Ρ‡Π΅ΠΌ прСимущСства использования Ultralytics YOLOv8 для создания гистограмм?

ИспользованиС Ultralytics YOLOv8 для создания гистограмм Π΄Π°Π΅Ρ‚ нСсколько прСимущСств:

  1. Визуализация Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: Π‘Π΅ΡΡˆΠΎΠ²Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² гистограммы для динамичСского обновлСния.
  2. ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования: простой API ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³ΠΊΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.
  3. ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ: Настраивай Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, этикСтки, Ρ†Π²Π΅Ρ‚Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π² соотвСтствии с Ρ‚Π²ΠΎΠΈΠΌΠΈ спСцифичСскими трСбованиями.
  4. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ: Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ обновляй Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ гистограмму:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("bar_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(type="bar", writer=out, im0_shape=(w, h), view_img=True)

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True)
        clswise_count = {
            model.names[int(cls)]: boxes.size(0)
            for cls, boxes in zip(results[0].boxes.cls.tolist(), results[0].boxes.xyxy)
        }
        analytics.update_bar(clswise_count)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС, посСти Ρ€Π°Π·Π΄Π΅Π» " Bar Plot " Π² руководствС.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ultralytics YOLOv8 для создания ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΏΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…?

Ultralytics YOLOv8 это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ для создания ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ:

  1. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: НСпосрСдствСнно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сразу ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ.
  2. Π£Π΄ΠΎΠ±Π½Ρ‹ΠΉ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ API: ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π² настройкС ΠΈ использовании с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством ΠΊΠΎΠ΄Π°.
  3. НастраиваСмый: Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ настройки Ρ†Π²Π΅Ρ‚ΠΎΠ², Π½Π°ΠΊΠ»Π΅Π΅ΠΊ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ.
  4. ОбновлСния Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π²ΠΈΠ΄Π΅ΠΎΠ°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ.

Π’ΠΎΡ‚ быстрый ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("pie_chart.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(type="pie", writer=out, im0_shape=(w, h), view_img=True)

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True)
        clswise_count = {
            model.names[int(cls)]: boxes.size(0)
            for cls, boxes in zip(results[0].boxes.cls.tolist(), results[0].boxes.xyxy)
        }
        analytics.update_pie(clswise_count)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ обращайся ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ " ΠšΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ " Π² руководствС.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ultralytics YOLOv8 для отслСТивания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ динамичСского обновлСния Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ?

Π”Π°, Ultralytics YOLOv8 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для отслСТивания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ динамичСского обновлСния Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ отслСТиваниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, гистограммы ΠΈ ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… отслСТиваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ отслСТивания ΠΈ обновлСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

analytics = solutions.Analytics(type="line", writer=out, im0_shape=(w, h), view_img=True)

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True)
        total_counts = sum([1 for box in results[0].boxes.xyxy])
        analytics.update_line(frame_count, total_counts)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅, смотри Ρ€Π°Π·Π΄Π΅Π» " ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ".

Π§Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Ultralytics YOLOv8 ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ OpenCV ΠΈ TensorFlow?

Ultralytics YOLOv8 выдСляСтся Π½Π° Ρ„ΠΎΠ½Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ OpenCV ΠΈ TensorFlow , ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  1. БоврСмСнная Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ: YOLOv8 обСспСчиваСт ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ… обнаруТСния, сСгмСнтации ΠΈ классификации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
  2. ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования: Π£Π΄ΠΎΠ±Π½Ρ‹ΠΉ API позволяСт быстро Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ³ΠΎ кодирования.
  3. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для высокоскоростного Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  4. Π Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ прилоТСния: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ отслСТиваниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ экспорт Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ONNX, TensorRT ΠΈ CoreML.
  5. Π˜ΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π°Ρ докумСнтация: ΠžΠ±ΡˆΠΈΡ€Π½Π°Ρ докумСнтация ΠΈ рСсурсы Π±Π»ΠΎΠ³Π° ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ шаг.

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… сравнСний ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΈΠ·ΡƒΡ‡ΠΈ наш Π±Π»ΠΎΠ³Ultralytics .



Боздано 2024-05-23, ОбновлСно 2024-07-05
Авторы: glenn-jocher (4), IvorZhu331 (1), RizwanMunawar (3)

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ