Перейти к содержанию

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

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

Открытый подсчет объектов в Colab

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



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

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

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

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

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

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

# Run a counting example
yolo solutions count show=True

# Pass a source video
yolo solutions count source="path/to/video.mp4"

# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# region_points = [(20, 400), (1080, 400)]                                      # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]  # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]   # polygon region

# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Initialize object counter object
counter = solutions.ObjectCounter(
    show=True,  # display the output
    region=region_points,  # pass region points
    model="yolo11n.pt",  # model="yolo11n-obb.pt" for object counting with OBB model.
    # classes=[0, 2],  # count specific classes i.e. person and car with COCO pretrained model.
    # tracker="botsort.yaml",  # choose trackers i.e "bytetrack.yaml"
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or processing is complete.")
        break

    results = counter(im0)

    # print(results)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

ObjectCounter Аргументы

Вот таблица с данными ObjectCounter аргументы:

Аргумент Тип По умолчанию Описание
model str None Путь к файлу модели Ultralytics YOLO .
show_in bool True Флаг для управления отображением количества входящих в видеопоток.
show_out bool True Флаг для контроля отображения количества выходов в видеопотоке.
region list [(20, 400), (1260, 400)] Список точек, определяющих область подсчета.

Сайт ObjectCounter Решение позволяет использовать несколько track аргументы:

Аргумент Тип По умолчанию Описание
tracker str 'botsort.yaml' Указывает используемый алгоритм отслеживания, например, bytetrack.yaml или botsort.yaml.
conf float 0.3 Устанавливает порог доверия для обнаружений; более низкие значения позволяют отслеживать больше объектов, но могут включать ложные срабатывания.
iou float 0.5 Устанавливает порог пересечения над объединением (IoU) для фильтрации перекрывающихся обнаружений.
classes list None Фильтрует результаты по индексу класса. Например, classes=[0, 2, 3] отслеживает только указанные классы.
verbose bool True Управляет отображением результатов отслеживания, обеспечивая визуальный вывод отслеживаемых объектов.
device str None Указывает устройство для вывода (например, cpu, cuda:0 или 0). Позволяет пользователям выбирать между CPU, конкретным GPU или другими вычислительными устройствами для выполнения модели.

Кроме того, поддерживаются перечисленные ниже аргументы визуализации:

Аргумент Тип По умолчанию Описание
show bool False Если Trueотображает аннотированные изображения или видео в окне. Полезно для немедленной визуальной обратной связи во время разработки или тестирования.
line_width None or int None Определяет ширину линии ограничительных рамок. Если NoneШирина линии автоматически регулируется в зависимости от размера изображения. Обеспечивает визуальную настройку для наглядности.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Как подсчитать объекты в видео с помощью Ultralytics YOLO11 ?

Чтобы подсчитать объекты на видео с помощью Ultralytics YOLO11 , выполните следующие действия:

  1. Импортируйте необходимые библиотеки (cv2, ultralytics).
  2. Определите область подсчета (например, многоугольник, линия и т.д.).
  3. Настройте захват видео и инициализируйте счетчик объектов.
  4. Обработка каждого кадра для отслеживания объектов и их подсчета в заданной области.

Вот простой пример для подсчета в регионе:

import cv2

from ultralytics import solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    cap = cv2.VideoCapture(video_path)
    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))
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
    counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

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


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")

Для более продвинутых конфигураций и опций обратите внимание на решение RegionCounter для подсчета объектов в нескольких регионах одновременно.

В чем преимущества использования Ultralytics YOLO11 для подсчета объектов?

Использование сайта Ultralytics YOLO11 для подсчета объектов имеет ряд преимуществ:

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

В качестве примеров реализации и практического применения изучите решение TrackZone для отслеживания объектов в определенных зонах.

Как подсчитать определенные классы объектов с помощью Ultralytics YOLO11 ?

Чтобы подсчитать определенные классы объектов с помощью Ultralytics YOLO11 , необходимо указать интересующие вас классы на этапе отслеживания. Ниже приведен пример Python :

import cv2

from ultralytics import solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    cap = cv2.VideoCapture(video_path)
    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))
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    line_points = [(20, 400), (1080, 400)]
    counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

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


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])

В данном примере, classes_to_count=[0, 2] означает, что он подсчитывает объекты класса 0 и 2 (например, человек и автомобиль в наборе данных COCO). Более подробную информацию об индексах классов вы можете найти в разделе Документация по набору данных COCO.

Почему для приложений реального времени следует использовать YOLO11 , а не другие модели обнаружения объектов?

Ultralytics YOLO11 обладает рядом преимуществ по сравнению с другими моделями обнаружения объектов, такими как Faster R-CNN, SSD и предыдущими версиями YOLO :

  1. Скорость и эффективность: YOLO11 предлагает возможности обработки данных в режиме реального времени, что делает его идеальным для приложений, требующих высокоскоростных выводов, таких как видеонаблюдение и автономное вождение.
  2. Точность: Обеспечивает высочайшую точность при решении задач обнаружения и отслеживания объектов, снижая количество ложных срабатываний и повышая общую надежность системы.
  3. Простота интеграции: YOLO11 предлагает бесшовную интеграцию с различными платформами и устройствами, включая мобильные и пограничные устройства, что крайне важно для современных приложений искусственного интеллекта.
  4. Гибкость: Поддержка различных задач, таких как обнаружение, сегментация и отслеживание объектов, с настраиваемыми моделями для удовлетворения конкретных требований к использованию.

Ознакомьтесь сдокументацией Ultralytics YOLO11 для более глубокого изучения его возможностей и сравнения производительности.

Можно ли использовать YOLO11 для таких продвинутых приложений, как анализ толпы и управление дорожным движением?

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

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

Для более специализированных приложений изучите решенияUltralytics Solutions - это полный набор инструментов, предназначенных для решения реальных задач компьютерного зрения.

📅 Создано 1 год назад ✏️ Обновлено 5 дней назад

Комментарии