Создание собственного приложения для обнаружения объектов в реальном времени: Roboflow (YOLOv8) и Streamlit

Введение

Чтобы следовать этому руководству, вам понадобится Raspberry Pi 4. Вам потребуется запустить 64-разрядную операционную систему Raspberry Pi OS (версия Bullseye).

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

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

В этом руководстве мы рассмотрим, как развернуть модель компьютерного зрения на Raspberry Pi. Мы будем развертывать модель, построенную на Roboflow, которую мы развернем в локальном контейнере Docker. К концу руководства у нас будет рабочая модель компьютерного зрения, готовая к использованию на нашем Pi.

Без лишних слов, давайте начнем!

Мы собираемся закончить в Части 2 из этой серии, где мы успешно обучили нашу модель. Когда в вашем коде появилась вышеупомянутая функция deploy(), веса были загружены в Roboflow, и модель была развернута, готовая к использованию.

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

Если вы собираетесь фотографировать, посмотрите Часть 4 из этой серии, чтобы узнать, как использовать камеру в Raspberry Pi.

Загрузите контейнер Docker Roboflow на Pi

Пока мы ждем обучения нашей модели, мы можем настроить все на нашем Raspberry Pi. Чтобы запустить нашу модель на Pi, мы будем использовать контейнер Docker сервера вывода Roboflow. Этот контейнер содержит службу, которую вы можете использовать для развертывания вашей модели на вашем Pi.

Чтобы использовать модель, которую мы построили на Pi, мы сначала установим Docker:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

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

sudo docker pull roboflow/inference-server:cpu

API вывода доступен в виде контейнера Docker, оптимизированного и настроенного для Raspberry Pi. Вы можете установить и запустить сервер логических выводов с помощью следующей команды:

sudo docker run -it --rm -p 9001:9001 roboflow/roboflow-inference-server-arm-cpu

Теперь вы можете использовать свой Pi в качестве замены Hosted Inference API (см. эти документы, например, фрагменты кода на нескольких языках программирования).

Затем установите пакет Python Roboflow с pip install roboflow.

Запустить вывод

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

from roboflow import Roboflow

rf = Roboflow(api_key="xxxxxxxxxxxxxxxxxxxx")
project = rf.workspace().project("xxxxxxxx")
model = project.version(1).model

model.predict("your_image.jpg", confidence=40, overlap=30).save("prediction.jpg")

prediction = model.predict("example.jpg")
print(prediction.json())

prediction.save("output.png")

Этот код сообщает нашему пакету Python, что вы хотите выполнить вывод, используя локальный сервер, а не API Roboflow. При первом запуске этого кода вам потребуется подключение к Интернету. Это связано с тем, что пакету Python потребуется загрузить вашу модель для использования в контейнере Docker сервера логических выводов.

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

Теперь давайте сделаем прогноз по изображению!

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

Наша модель работает! Мы можем сохранить изображение, которое показывает наши аннотированные прогнозы, если мы откроем файл, мы увидим следующие результаты:

Сейчас наша модель работает с файлами изображений, которые мы сохранили локально. Но это не обязательно так. Вы можете использовать пакет Roboflow Python с таким инструментом, как камера Raspberry Pi, чтобы делать снимки каждые несколько секунд или минут и получать прогнозы. Или вы можете использовать камеру Pi для запуска вашей модели в прямом эфире.

Заключение

Raspberry Pi — это небольшое универсальное устройство, на котором вы можете развернуть свои модели компьютерного зрения. С контейнером Roboflow Docker вы можете использовать самые современные модели YOLOv8 на своем Raspberry Pi.

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

Теперь у вас есть знания, необходимые для развертывания моделей на Raspberry Pi. Удачного строительства!