सामग्री पर जाएं

विश्लेषिकी का उपयोग कर 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 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 For multiple lines, total points drawn on frame, before deleting initial points.
points_width int 15 Width of line points highlighter.

तर्क model.track

नाम प्रकार चूक या क़िस्‍म
source im0 None छवियों या वीडियो के लिए स्रोत निर्देशिका
persist bool False फ़्रेम के बीच लगातार ट्रैक
tracker str botsort.yaml ट्रैकिंग विधि 'बाइटट्रैक' या 'बॉटसॉर्ट'
conf float 0.3 कॉन्फिडेंस थ्रेशोल्ड
iou float 0.5 IOU थ्रेसहोल्ड
classes list None कक्षा द्वारा फ़िल्टर परिणाम, यानी कक्षाएं = 0, या कक्षाएं = [0,2,3]
verbose bool True ऑब्जेक्ट ट्रैकिंग परिणाम प्रदर्शित करें

समाप्ति

प्रभावी डेटा विश्लेषण के लिए विभिन्न प्रकार के विज़ुअलाइज़ेशन का उपयोग कब और कैसे करना है, यह समझना महत्वपूर्ण है। लाइन ग्राफ़, बार प्लॉट और पाई चार्ट मौलिक उपकरण हैं जो आपके डेटा की कहानी को अधिक स्पष्ट और प्रभावी ढंग से व्यक्त करने में आपकी सहायता कर सकते हैं।



Created 2024-05-23, Updated 2024-06-10
Authors: glenn-jocher (3), IvorZhu331 (1), RizwanMunawar (3)

टिप्पणियाँ