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

ऑब्जेक्ट काउंटिंग का उपयोग कर Ultralytics YOLOv8 🚀

ऑब्जेक्ट काउंटिंग क्या है?

के साथ वस्तु की गिनती Ultralytics YOLOv8 वीडियो और कैमरा स्ट्रीम में विशिष्ट वस्तुओं की सटीक पहचान और गिनती शामिल है। YOLOv8 वास्तविक समय के अनुप्रयोगों में उत्कृष्टता, भीड़ विश्लेषण और निगरानी जैसे विभिन्न परिदृश्यों के लिए कुशल और सटीक वस्तु गणना प्रदान करता है, इसके अत्याधुनिक एल्गोरिदम और गहन सीखने की क्षमताओं के लिए धन्यवाद।


सतर्कता: ऑब्जेक्ट काउंटिंग का उपयोग कर Ultralytics YOLOv8

सतर्कता: Class-wise Object Counting using Ultralytics YOLOv8

वस्तु गणना के लाभ?

  • संसाधन अनुकूलन: ऑब्जेक्ट काउंटिंग सटीक गणना प्रदान करके और इन्वेंट्री प्रबंधन जैसे अनुप्रयोगों में संसाधन आवंटन को अनुकूलित करके कुशल संसाधन प्रबंधन की सुविधा प्रदान करती है।
  • बढ़ी हुई सुरक्षा: ऑब्जेक्ट काउंटिंग संस्थाओं को सटीक रूप से ट्रैक और गिनने से सुरक्षा और निगरानी को बढ़ाता है, जिससे सक्रिय खतरे का पता लगाने में सहायता मिलती है।
  • सूचित निर्णय लेना: ऑब्जेक्ट काउंटिंग निर्णय लेने, खुदरा में प्रक्रियाओं का अनुकूलन, यातायात प्रबंधन और विभिन्न अन्य डोमेन के लिए मूल्यवान अंतर्दृष्टि प्रदान करता है।

वास्तविक दुनिया अनुप्रयोग

लॉजिस्टिकस एक्वाकल्चर
कन्वेयर बेल्ट पैकेट का उपयोग कर गिनती Ultralytics YOLOv8 समुद्र में मछली की गिनती का उपयोग कर Ultralytics YOLOv8
कन्वेयर बेल्ट पैकेट का उपयोग कर गिनती Ultralytics YOLOv8 समुद्र में मछली की गिनती का उपयोग कर Ultralytics YOLOv8

ऑब्जेक्ट काउंटिंग का उपयोग कर YOLOv8 उदाहरण

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

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 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

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

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

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 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

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

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

# Define line points
line_points = [(20, 400), (1080, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

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 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

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

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

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, classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
क्षेत्र जंगम है

आप इसके किनारों पर क्लिक करके क्षेत्र को फ्रेम में कहीं भी स्थानांतरित कर सकते हैं

युक्ति ObjectCounter

यहाँ के साथ एक तालिका है ObjectCounter तर्क:

नाम प्रकार चूक या क़िस्‍म
classes_names dict None वर्ग के नामों का शब्दकोश।
reg_pts list [(20, 400), (1260, 400)] मतगणना क्षेत्र को परिभाषित करने वाले बिंदुओं की सूची।
count_reg_color tuple (255, 0, 255) गिनती क्षेत्र का आरजीबी रंग।
count_txt_color tuple (0, 0, 0) गिनती पाठ का RGB रंग।
count_bg_color tuple (255, 255, 255) गिनती पाठ पृष्ठभूमि के आरजीबी रंग.
line_thickness int 2 बाउंडिंग बॉक्स के लिए लाइन मोटाई।
track_thickness int 2 ट्रैक लाइनों की मोटाई।
view_img bool False वीडियो स्ट्रीम प्रदर्शित करने के लिए या नहीं नियंत्रित करने के लिए ध्वज.
view_in_counts bool True यह नियंत्रित करने के लिए ध्वजांकित करें कि वीडियो स्ट्रीम पर इन गणनाओं को प्रदर्शित करना है या नहीं।
view_out_counts bool True वीडियो स्ट्रीम पर आउट काउंट प्रदर्शित करने के लिए नियंत्रित करने के लिए ध्वजांकित करें।
draw_tracks bool False ऑब्जेक्ट ट्रैक आरेखित करने के लिए नियंत्रित करने के लिए ध्वजांकित करें.
track_color tuple None पटरियों का आरजीबी रंग।
region_thickness int 5 वस्तु गिनती क्षेत्र की मोटाई।
line_dist_thresh int 15 लाइन काउंटर के लिए यूक्लिडियन दूरी दहलीज।
cls_txtdisplay_gap int 50 प्रत्येक वर्ग गणना के बीच अंतर प्रदर्शित करें।

तर्क 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 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (14), IvorZhu331 (1), RizwanMunawar (6), AyushExel (1)

टिप्पणियाँ