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

Подсчет объектов с помощью Ultralytics YOLOv8 🚀.

Что такое подсчет объектов?

Подсчет объектов с помощью Ultralytics YOLOv8 включает в себя точную идентификацию и подсчет конкретных объектов в видео и потоках с камер. YOLOv8 отлично подходит для приложений реального времени, обеспечивая эффективный и точный подсчет объектов для различных сценариев, таких как анализ толпы и наблюдение, благодаря своим современным алгоритмам и возможностям глубокого обучения.



Смотри: Подсчет объектов с помощью Ultralytics YOLOv8

Преимущества подсчета объектов?

  • Оптимизация ресурсов: Подсчет объектов способствует эффективному управлению ресурсами, обеспечивая точный подсчет и оптимизируя распределение ресурсов в таких приложениях, как управление запасами.
  • Повышенная безопасность: Подсчет объектов повышает уровень безопасности и наблюдения, поскольку позволяет точно отслеживать и подсчитывать объекты, что способствует проактивному обнаружению угроз.
  • Принятие обоснованных решений: Подсчет объектов дает ценные знания для принятия решений, оптимизации процессов в розничной торговле, управлении трафиком и различных других сферах.

Применение в реальном мире

Логистика Аквакультура
Подсчет пакетов на конвейерной ленте с помощью Ultralytics YOLOv8 Подсчет рыбы в море с помощью Ultralytics YOLOv8
Подсчет пакетов на конвейерной ленте с помощью Ultralytics YOLOv8 Подсчет рыбы в море с помощью Ultralytics YOLOv8

Подсчет объектов с помощью примера YOLOv8

from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(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()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(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()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(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()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(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()
Регион подвижен

Ты можешь переместить регион в любую точку кадра, щелкнув по его краям

Необязательные аргументы set_args

Имя Тип По умолчанию Описание
view_img bool False Отображение кадров с подсчетами
view_in_counts bool True Отображайте счетчики только на видеокадре
view_out_counts bool True Отображайте выходы только на видеокадре
line_thickness int 2 Увеличьте ограничительные рамки и подсчитайте толщину текста
reg_pts list [(20, 400), (1260, 400)] Точки, определяющие область региона
classes_names dict model.model.names Словарь названий классов
count_reg_color RGB Color (255, 0, 255) Цвет области подсчета объектов или линии
track_thickness int 2 Толщина линий трекинга
draw_tracks bool False Включить рисование линий трека
track_color RGB Color (0, 255, 0) Цвет для каждой линии трека
line_dist_thresh int 15 Порог евклидова расстояния для счетчика линий
count_txt_color RGB Color (255, 255, 255) Цвет переднего плана для текста подсчета объектов
region_thickness int 5 Толщина для области счетчика объектов или линии
count_bg_color RGB Color (255, 255, 255) Подсчитай цвет хайлайтера

Аргументы 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 Отображение результатов отслеживания объектов


Создано 2023-12-02, Обновлено 2024-04-18
Авторы: glenn-jocher (9), RizwanMunawar (1), AyushExel (1)

Комментарии