Подсчет объектов с использованием Ultralytics YOLO11
Что такое подсчет объектов?
Подсчет объектов с помощью Ultralytics YOLO11 включает в себя точную идентификацию и подсчет конкретных объектов в видео и потоках с камер. 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 |
Устанавливает порог Intersection over Union (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 , ширина линии автоматически регулируется в зависимости от размера изображения. Обеспечивает визуальную настройку для большей четкости. |
show_conf |
bool |
True |
Отображает оценку достоверности для каждого обнаружения рядом с меткой. Дает представление об уверенности модели для каждого обнаружения. |
show_labels |
bool |
True |
Отображает метки для каждого обнаружения в визуальном выводе. Обеспечивает немедленное понимание обнаруженных объектов. |
Часто задаваемые вопросы
Как подсчитать объекты в видео с использованием Ultralytics YOLO11?
Чтобы подсчитать объекты в видео с помощью Ultralytics YOLO11, вы можете выполнить следующие действия:
- Импортируйте необходимые библиотеки (
cv2
,ultralytics
). - Определите область подсчета (например, полигон, линия и т. д.).
- Настройте захват видео и инициализируйте счетчик объектов.
- Обработайте каждый кадр для отслеживания объектов и их подсчета в пределах определенной области.
Вот простой пример подсчета в регионе:
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 для подсчета объектов предлагает несколько преимуществ:
- Оптимизация ресурсов: Это облегчает эффективное управление ресурсами, предоставляя точные подсчеты, помогая оптимизировать распределение ресурсов в таких отраслях, как управление запасами.
- Повышенная безопасность: Повышает безопасность и видеонаблюдение за счет точного отслеживания и подсчета объектов, помогая в заблаговременном обнаружении угроз и системах безопасности.
- Обоснованное принятие решений: Предоставляет ценную информацию для принятия решений, оптимизируя процессы в таких областях, как розничная торговля, управление дорожным движением и многое другое.
- Обработка в реальном времени: Архитектура 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:
- Скорость и эффективность: YOLO11 предлагает возможности обработки в реальном времени, что делает его идеальным для приложений, требующих высокой скорости инференса, таких как наблюдение и автономное вождение.
- Точность: Обеспечивает современную точность для задач обнаружения и отслеживания объектов, снижая количество ложных срабатываний и повышая общую надежность системы.
- Простота интеграции: YOLO11 предлагает простую интеграцию с различными платформами и устройствами, включая мобильные и периферийные устройства, что имеет решающее значение для современных приложений ИИ.
- Гибкость: Поддерживает различные задачи, такие как обнаружение объектов, сегментация и отслеживание, с настраиваемыми моделями для удовлетворения конкретных требований варианта использования.
Ознакомьтесь с документацией Ultralytics YOLO11 для более глубокого изучения ее функций и сравнения производительности.
Могу ли я использовать YOLO11 для продвинутых приложений, таких как анализ толпы и управление трафиком?
Да, Ultralytics YOLO11 идеально подходит для расширенных приложений, таких как анализ толпы и управление трафиком, благодаря своим возможностям обнаружения в реальном времени, масштабируемости и гибкости интеграции. Его расширенные функции позволяют с высокой точностью отслеживать, подсчитывать и классифицировать объекты в динамических средах. Примеры вариантов использования включают:
- Анализ толпы: Отслеживайте и управляйте большими собраниями, обеспечивая безопасность и оптимизируя поток людей с помощью подсчета на основе регионов.
- Управление дорожным движением: Отслеживайте и подсчитывайте транспортные средства, анализируйте структуру движения и управляйте заторами в режиме реального времени с помощью возможностей оценки скорости.
- Розничная аналитика: Анализ моделей перемещения клиентов и взаимодействия с продуктами для оптимизации планировки магазина и улучшения качества обслуживания клиентов.
- Промышленная автоматизация: Подсчет продукции на конвейерных лентах и мониторинг производственных линий для контроля качества и повышения эффективности.
Для более специализированных приложений изучите Ultralytics Solutions, чтобы получить полный набор инструментов, разработанных для решения реальных задач компьютерного зрения.