Перейти к содержимому

Подсчет объектов с помощью 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) RGB-цвет области подсчета.
count_txt_color tuple (0, 0, 0) RGB-цвет текста подсчета.
count_bg_color tuple (255, 255, 255) RGB-цвет фона текста подсчета.
line_thickness int 2 Толщина линий для ограничительных рамок.
track_thickness int 2 Толщина линий дорожки.
view_img bool False Флаг, контролирующий, отображать ли видеопоток.
view_in_counts bool True Флаг, управляющий тем, отображать ли в видеопотоке счетчики in.
view_out_counts bool True Флаг, управляющий тем, отображать ли в видеопотоке счетчики аутов.
draw_tracks bool False Флаг, контролирующий, рисовать ли треки объектов.
track_color tuple None RGB-цвет дорожек.
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 Метод отслеживания 'bytetrack' или 'botsort'
conf float 0.3 Порог доверия
iou float 0.5 Порог IOU
classes list None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]
verbose bool True Отображение результатов отслеживания объектов


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (14), IvorZhu331 (1), RizwanMunawar (6), AyushExel (1)

Комментарии