Введение

Обнаружение и отслеживание объектов в видео в реальном времени — важная область компьютерного зрения, имеющая многочисленные применения в различных областях, таких как наблюдение, автомобилестроение и робототехника.

Спрос на обнаружение и отслеживание объектов в режиме реального времени в видеокадрах растет с каждым днем ​​из-за потребности в автоматизированных системах, способных распознавать и отслеживать объекты, определять их положение и классифицировать их в режиме реального времени.

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

Как организованы 3 части этой серии блогов?

В этой серии мы создадим приложение для обнаружения и отслеживания объектов в реальном времени, используя YOLOv8 и Streamlit. Основная цель этого проекта — предоставить простую и эффективную реализацию обнаружения и отслеживания объектов в реальном времени, которую можно легко настроить и интегрировать в другие приложения.

Эта серия блогов разделена на следующие три (3) части.

Часть 1: Введение и настройка для YOLOV8 и Streamlit

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

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

К концу этой серии вы будете иметь навыки создания собственного приложения для обнаружения и отслеживания объектов в реальном времени и применения его к вашим собственным проблемам, связанным с предметной областью.

Итак, давайте погрузимся!

Демонстрация приложения для обнаружения и отслеживания объектов в реальном времени

Вот несколько демонстрационных изображений из проекта WebApp, которые мы собираемся создать и построить вместе. Эти изображения демонстрируют функциональные возможности нашего проекта.

  • Домашняя страница: стрелки показывают «Конфигурация модели ML», «Конфигурация изображения/видео» и «Изображения по умолчанию и обнаруженные изображения» на главной странице.

  • Обнаружение объектов: загрузите изображение в веб-приложение и покажите обнаруженные объекты.

  • Сегментация: загрузите изображение в веб-приложение и изобразите сегментацию.

  • Покадровое обнаружение объекта видео.

  • Покадровое обнаружение объекта любого видео Youtube.

  • Покадровое обнаружение объектов и отслеживание любого видео.

Обнаружение и отслеживание объектов

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

Эти методы работают вместе, чтобы извлекать ценную информацию из визуальных данных, позволяя машинам понимать и интерпретировать окружающий мир.

Обнаружение объекта

Обнаружение объектов — это процесс идентификации и локализации объектов на изображении или видеокадре.

Алгоритмы обнаружения объектов обычно используют модели глубокого обучения, такие как YOLO, Faster R-CNN и SSD, для обнаружения объектов на изображениях или видеокадрах. Эти модели используют сверточные нейронные сети (CNN) для извлечения функций из входных данных, а затем используют эти функции для классификации и локализации объектов.

Отслеживание объектов

Отслеживание объекта, с другой стороны, включает в себя оценку состояния объекта, такого как его положение, скорость и ориентация, с течением времени.

Это требует анализа временной информации видео и сопоставления обнаруженных объектов от кадра к кадру. Отслеживание объектов особенно важно в приложениях, связанных с движущимися объектами, например в системах наблюдения или автономных транспортных средствах.

Обнаружение и отслеживание объектов являются важными компонентами многих реальных приложений, которым требуются интеллектуальные системы для понимания и взаимодействия с окружающей средой.

Обнаружение в реальном времени в видеокадрах

Обнаружение и отслеживание объектов в реальном времени в видеокадрах является сложной задачей из-за необходимости высокой скорости обработки и точности.

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

Почему YOLOv8 — хороший выбор для обнаружения и отслеживания объектов

YOLOv8 (You Only Look Once, версия 8) — это модель обнаружения объектов, которая использует глубокие нейронные сети для обнаружения объектов на изображениях или видео. YOLOv8 — одна из последних версий серии YOLO, предлагающая повышенную точность и более высокую скорость обнаружения.

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

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

Ограничивающие рамки используются для локализации объекта на изображении, а показатели достоверности указывают на точность обнаружения. Вероятности класса определяют тип обнаруженного объекта, например, автомобиль или человек.

Почему Streamlit — хороший выбор для создания приложения реального времени

Streamlit упрощает создание пользовательских веб-интерфейсов для приложений машинного обучения, позволяя специалистам по обработке и анализу данных и разработчикам делиться своей работой с нетехническими заинтересованными сторонами.

Streamlit — это фреймворк с открытым исходным кодом, упрощающий процесс создания веб-приложений на Python.

В этом проекте Streamlit используется для создания веб-приложения, которое отображает обработанный видеопоток, позволяя пользователям настраивать различные параметры модели машинного обучения, такие как достоверность порога обнаружения и алгоритм отслеживания.

Настройка проекта: установка зависимостей и создание необходимых файлов и каталогов

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

Для проекта требуется Python 3.7 или выше и несколько пакетов Python, таких как NumPy, OpenCV, PyTorch и Streamlit. Мы можем установить эти пакеты с помощью pip в отдельную виртуальную среду.

Создание виртуальной среды

При работе над проектом Python важно отделять ваши зависимости от глобальной среды Python, чтобы предотвратить конфликты между разными проектами.

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

Это гарантирует бесперебойную и стабильную работу вашего проекта, даже если для разных проектов требуются разные версии одного и того же пакета.

В этом разделе мы рассмотрим шаги по созданию виртуальной среды для проекта Python в репозитории GitHub с использованием пакета virtualenv.

Шаги:

Установите пакет virtualenv, выполнив следующую команду в терминале:

pip install virtualenv

Создайте новую виртуальную среду, выполнив в терминале следующую команду:

virtualenv venv

Это создаст новую папку с именем «venv» в корневом каталоге вашего проекта. Эта папка будет содержать чистую и изолированную среду Python для вашего проекта.

Активируйте виртуальную среду, выполнив в терминале следующую команду:

source venv/bin/activate

Это активирует виртуальную среду, и вы увидите имя вашей виртуальной среды в командной строке терминала.

Установка Torch и Torchvision с поддержкой CUDA

Вот шаги для загрузки Torch и Torchvision с CUDA в вашей системе:

  • Во-первых, проверьте, есть ли у вас графический процессор с поддержкой CUDA. Вы можете сделать это, выполнив следующую команду в терминале:
nvcc --version

Если вы получаете номер версии, это означает, что у вас есть графический процессор с поддержкой CUDA.

  • Далее перейдите на официальный сайт PyTorch (https://pytorch.org/) и выберите подходящие варианты установки для вашей системы. Вам нужно будет выбрать соответствующую версию PyTorch, которая поддерживает CUDA.
  • После того, как вы выбрали соответствующие параметры, скопируйте команду установки, представленную на веб-сайте PyTorch.
  • Откройте окно терминала и вставьте скопированную команду для установки PyTorch. Что может выглядеть так:
pip install torch==1.7.0+cpu torchvision==0.8.1+cpu -f <https://download.pytorch.org/whl/cu102/torch_stable.html>
  • Это также автоматически установит Torchvision.
  • После установки убедитесь, что PyTorch и Torchvision работают, открыв интерпретатор Python и выполнив следующие команды:
import torch
import torchvision

print(torch.__version__)
# '1.13.0+cu117'

print(torch.cuda.is_available())
# True

print(torchvision.__version__)
# '0.14.0+cu117'

Если вы получаете номера версий и True для torch.cuda.is_available(), это означает, что PyTorch и Torchvision установлены и работают правильно.

Установка необходимых пакетов

После этого вы готовы установить пакеты yolov8 (Ultralytics), Streamlit и Pafy.

pip install ultralytics, streamlit, pafy

После того, как вы установили все необходимые зависимости, вы готовы приступить к созданию этого проекта!

Загрузка предварительно обученных весов Yolov8

Модель YOLOv8 — это глубокая нейронная сеть, обученная на большом наборе данных для обнаружения объектов на изображениях и видео. Чтобы использовать эту модель для обнаружения и отслеживания объектов, нам нужно загрузить предварительно обученные веса YOLOv8.

В этом разделе мы объясним, как загрузить предварительно обученные веса YOLOv8 и использовать их в нашем проекте.

Используйте эту ссылку для загрузки файла веса yolov8n.pt. Файл веса yolov8n — самый маленький из моделей YOLOv8, что делает его быстрее и эффективнее, чем другие варианты. Благодаря высокой точности и способности обнаруживать объекты в режиме реального времени эта модель стала популярным выбором для многих приложений компьютерного зрения.

Или Вы можете загрузить другую версию веса YOLOV8, выполнив следующие действия:

Шаг 1: Откройте репозиторий GitHub для модели YOLOv8.

Шаг 2: Перейдите к разделу «Обнаружение» в файле readme.

Шаг 3: Найдите таблицу моделей (показана выше) с информацией обо всех моделях. Выберите ссылку для нужного веса, и он начнет загружаться в вашу систему.

Шаг 4: После загрузки и сохранения файла yolov8n.weights (или желаемого веса yolov8) мы можем использовать его для загрузки модели YOLOv8 в наш проект.

Создание каталога веса

Создайте каталог с именем «вес» и сохраните загруженный вес Yolov8 в этом каталоге. Мы будем использовать этот файл веса для задачи обнаружения и отслеживания объектов. У вас может быть более одного файла веса здесь. Нам просто нужно добавить этот путь к файлу веса в наш файл settings.py.

Создание каталога видео

Создайте каталог с именем «videos» внутри папки вашего проекта, чтобы хранить здесь все видеофайлы. Мы выберем эти видеоролики для задач обнаружения и отслеживания объектов.

Создание каталога изображений

Создайте еще один каталог с именем «images» для хранения всех изображений, на которых вы хотите обнаруживать объекты.

Создание необходимых файлов Python

Мы создадим следующие файлы Python для нашего проекта:

settings.py

Этот файл содержит все константы и параметры конфигурации, необходимые для проекта. Он определяет путь к модели YOLOv8, доверительный порог, немаксимальный порог подавления и имена объектов для обнаружения. Он также содержит настройки, связанные с приложением Streamlit, такие как URL-адреса изображений и видео по умолчанию.

app.py

Это основной файл проекта, который содержит приложение Streamlit. Он определяет макет приложения, которое включает в себя загрузчик файлов, видеоплеер, ползунок порога достоверности и раскрывающийся список выбора объектов. Он также определяет логику приложения, которая включает в себя загрузку модели YOLOv8, обнаружение объектов в загруженном изображении или видеокадрах и отображение обнаруженных объектов.

helper.py

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

Папка вашего проекта должна выглядеть так.

Привет, мир в Streamlit

Откройте файл app.py в вашем любимом редакторе кода и импортируйте библиотеку Streamlit:

import streamlit as st

Теперь вы можете использовать функцию st.write() для отображения вашего «Hello World!». сообщение. Вот полный код:

import streamlit as st

st.write("Hello, World!")

Запустите код, открыв терминал и перейдя в каталог, в котором вы сохранили app.py. Затем выполните следующую команду:

streamlit run app.py

Это запустит сервер Streamlit и откроет в веб-браузере страницу Streamlit по умолчанию. Вы должны увидеть свой «Hello, World!» сообщение, отображаемое на странице.

Поздравляем! Вы только что создали свое первое приложение Streamlit. Отсюда мы изучим многие функции Streamlit и создадим наше веб-приложение во Части 2.

После настройки нашей среды и создания всех необходимых каталогов и файлов Python мы готовы приступить к написанию кода для нашего проекта «Приложение для обнаружения и отслеживания объектов в реальном времени с YOLOv8 и Streamlit».

Репозиторий GitHub

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

Заключение

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

Во Части 2 мы сосредоточимся на реализации обнаружения и отслеживания объектов в видеокадрах с использованием YOLOv8 и OpenCV. Мы объясним концепцию обнаружения и отслеживания объектов и проведем вас через процесс настройки среды компьютерного зрения и интеграции YOLOv8 с OpenCV.

Проверьте Часть 2 этой серии и не стесняйтесь обращаться к нам, если у вас есть какие-либо вопросы или отзывы. Давайте продолжим создавать это замечательное приложение вместе!

Привет👋! Если вы нашли этот урок полезным, не стесняйтесь выразить свою признательность, похлопав в ладоши! Помните, что вы можете хлопать несколько раз, если вам это действительно понравилось.

Если вам интересно узнать больше о Python, подписывайтесь на меня, RS Punia, на Medium. Как страстный программист с любовью к компьютерному зрению, искусственному интеллекту и машинному обучению, я всегда ищу новые задачи в области кодирования и делюсь своими знаниями с другими. Следуйте за мной сейчас, и давайте продолжать учиться и расти вместе!