Введение
Обнаружение и отслеживание объектов в видео в реальном времени — важная область компьютерного зрения, имеющая многочисленные применения в различных областях, таких как наблюдение, автомобилестроение и робототехника.
Спрос на обнаружение и отслеживание объектов в режиме реального времени в видеокадрах растет с каждым днем из-за потребности в автоматизированных системах, способных распознавать и отслеживать объекты, определять их положение и классифицировать их в режиме реального времени.
В этом проекте мы разработали приложение, использующее алгоритм обнаружения и отслеживания объектов YOLOv8 для обнаружения и отслеживания объектов в видеопотоках в реальном времени. Приложение построено с использованием фреймворка Streamlit, который предоставляет конечным пользователям интуитивно понятный и интерактивный пользовательский интерфейс для взаимодействия с системой.
Как организованы 3 части этой серии блогов?
В этой серии мы создадим приложение для обнаружения и отслеживания объектов в реальном времени, используя YOLOv8 и Streamlit. Основная цель этого проекта — предоставить простую и эффективную реализацию обнаружения и отслеживания объектов в реальном времени, которую можно легко настроить и интегрировать в другие приложения.
Эта серия блогов разделена на следующие три (3) части.
- Часть 1: Введение и настройка для YOLOV8 и Streamlit
- Часть 2: Изучение модели YOLOv8 и обнаружение объектов
- Часть 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. Как страстный программист с любовью к компьютерному зрению, искусственному интеллекту и машинному обучению, я всегда ищу новые задачи в области кодирования и делюсь своими знаниями с другими. Следуйте за мной сейчас, и давайте продолжать учиться и расти вместе!