Добро пожаловать! Я написал этот обзор моего проекта компьютерного зрения, чтобы обнаружить школьный автобус, проезжающий мимо моего дома. Это для человека, который хочет начать играть с компьютерным зрением и хочет увидеть проект от начала до конца. В этой статье я начну с объяснения проблемы, которую я пытаюсь решить, упомяну выбранную мной камеру, покажу краткое руководство по opencv, создам изображения и расскажу о различных пакетах Python, которые я использую. Репозиторий проекта на github находится здесь. Этот проект будет представлен в виде серии из нескольких сообщений в блоге, чтобы объяснить остальную часть проекта, так что ждите следующей статьи! Следующая статья будет гостевым блогом на Roboflow, и я обязательно размещу ссылку на нее здесь.

В этой статье мы рассмотрим:

  • Что я решаю
  • Библиотеки, которые я использую
  • Настройка камеры
  • Создание изображений
  • Процесс сбора данных

Проблема:

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

Библиотеки:

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

Настройка камеры:

Я хотел рассказать о самой камере, которую использовал, потому что поиск подходящей камеры не был слишком интуитивным. Я знал, что мне понадобится дружественный API, который будет работать с opencv в python, и было небольшое исследование, прежде чем я был уверен, что камера будет работать для моих целей. Я выбрал IP-камеру видеонаблюдения ANNKE C500 5MP PoE с револьверной головкой, она стоила 60 долларов.

opencv может подключаться к RTSP-совместимой камере безопасности (RTSP означает протокол потоковой передачи в реальном времени. Реальное время — это то, что нам нужно, детка!). Как только у нас будет эта настройка, мы начнем думать о сборе наших данных, а затем аннотировать эти данные с помощью Roboflow.

Инструкции по настройке этой конкретной камеры были довольно простыми, я просто следовал инструкциям по началу работы с камерой.

Затем введите свой RTSP-адрес с камеры в качестве сетевого URL-адреса.

Держите этот URL под рукой, вы будете использовать его в нескольких местах в этом проекте.

Самый первый шаг, который я сделал после настройки камеры, — это просто посмотреть пример кода в документации opencv (cv2), чтобы убедиться, что все работает. Так что в основном мы собираемся использовать VLC, чтобы увидеть себя в камере и просто проверить, что все это действительно работает. Это взято непосредственно из документации opencv, и я изменил только первую строку кода, чтобы она использовала мой URL-адрес RTSP. У меня нет следующего кода в репозитории, потому что это просто тестирование, а не часть проекта.

После того, как я увидел себя на камеру, следующее, что я сделал, это настроил обработку учетных данных. Это было просто для того, чтобы сохранить мои учетные данные вне контроля версий, сохранив их в файле .camera_credentials, который исключен из контроля версий с помощью .gitignore. Этот скрипт берет мои учетные данные и создает из них URL-адрес RTSP. Когда вы вызываете «обнаружение» в yolov5, вы делаете это, давая ему URL-адрес RTSP, поэтому я определяю здесь функцию, называемую get_rtsp_url().

Далее идет connection_to_camera.py. В цикле while мы запрашиваем следующий кадр с камеры, а затем сохраняем его в каталоге изображений. У меня также есть создание нового каталога на каждый день и каждый час. Это облегчило мне поиск и отслеживание изображений. Это адаптировано из документации opencv.

Сохраненные изображения дают нам знать, что мы работаем.

Сбор данных:

Эти изображения отлично подойдут, потому что на них изображен реальный пейзаж и объект, которые я хочу обнаружить. Сначала я снял на телефон видео, как школьный автобус проезжает мимо моего дома. Затем я использовал короткий скрипт на R, чтобы превратить это видео в изображения. Живи и учись, кадры с реальной камеры гораздо эффективнее. В процессе сбора данных я узнал и многое другое. Это действительно мой первый раз, когда я работаю с данными изображения. Я пытался использовать фотографии автобусов из Интернета, но это вводило ориентацию, цвета и другие вещи, которые мне не нужны. Мой передний двор всегда будет выглядеть одинаково (за исключением снега и темнее зимой), поэтому автобусы из интернета не имели смысла для проекта. Если бы мне нужно было расширить этот проект на другие варианты использования, я, безусловно, мог бы подумать об использовании изображений из Интернета или использовании дополнительных дополнений к данным. Я позаботился о том, чтобы включить множество частичных автобусов и изображений автобуса, идущего в обоих направлениях мимо моего дома.

Хотел бы я с самого начала подумать о том, как я планировал организовывать свои изображения. Между использованием видео с моего телефона и использованием изображений из Интернета, для разных алгоритмов требуются разные форматы файлов (я начал с yolov3, а затем попробовал алгоритм классификации, прежде чем перейти к yolov5, все они требовали разных форматов файлов и структуры), я закончил с большим количеством разных папок с данными, с которыми я плохо справлялся. Затем, когда я отложил проект на лето, потому что школа закончилась, когда я вернулся осенью, я был действительно озадачен тем, где были мои последние изображения. Именно тогда я решил, что собираюсь настроить Артефакт кометы, чтобы помочь управлять своими данными, но мы поговорим об этом подробнее в следующей статье.

Замечательный! Мы поговорили о моих соображениях при получении изображений, и, надеюсь, ваша камера теперь работает. Следующим шагом является аннотирование изображений. Я лично создал бесплатную учетную запись в Roboflow, пользовательский интерфейс был очень интуитивным (как вы можете видеть ниже), и я смог очень быстро аннотировать свои изображения. Вы просто нажимаете на большую кнопку + Создать новый проект, даете проекту имя и выбираете обнаружение объекта в меню Тип продукта, на следующей странице выбираете загрузить из левой навигации, а затем вы можете загрузить ваши изображения.

Краткое содержание:

В этой статье мы настроились на то, чтобы начать проект компьютерного зрения. Хотя я хотел бы продолжить эту статью, я собираюсь разбить этот проект на удобоваримые куски. Мы рассмотрели различные библиотеки, которые будем использовать в проекте, настроили камеру, создали изображения и настроили себя для аннотирования всех этих изображений. Далее поговорим о получении данных из Roboflow, создании артефакта данных в Комете и обучении модели yolov5. Поскольку я говорю о Roboflow, следующая статья будет гостевым блогом на сайте Roboflow. Я позабочусь о том, чтобы все статьи было легко найти и найти. После этого мы выберем лучшую модель из тренировочных прогонов, просмотрев различные эксперименты в Комете, и используем ее для обнаружения автобуса в реальном времени, наблюдая за выходом в реальном времени. Наконец, мы настроим отправку текстовых оповещений с помощью AWS. В этом проекте много интересного. Звучит много, но я надеюсь, что это похоже на проект, который вы сможете сделать самостоятельно! Оставайтесь с нами для остальной части серии.

Первоначально опубликовано на https://datamovesme.com 10 октября 2022 г.