Оглавление:

Подсчет объектов Raspberry Pi: 5 шагов
Подсчет объектов Raspberry Pi: 5 шагов

Видео: Подсчет объектов Raspberry Pi: 5 шагов

Видео: Подсчет объектов Raspberry Pi: 5 шагов
Видео: Система распознавания объектов на Raspberry Pi — Машинное зрение урок 1 2024, Июль
Anonim
Подсчет объектов Raspberry Pi
Подсчет объектов Raspberry Pi

Компьютерное зрение, несомненно, фантастическая вещь! Используя это, компьютер получает возможность «видеть» и лучше чувствовать окружающую среду, что позволяет разрабатывать сложные, полезные и интересные приложения. Такие приложения, как обнаружение и распознавание лиц, отслеживание объектов и обнаружение объектов, все больше и больше присутствуют в нашей повседневной деятельности благодаря достижениям компьютерного зрения.

Учитывая, насколько продвинутыми и доступными являются фреймворки и инструменты компьютерного зрения, приложение, описанное в этой статье, хорошо подходит: использование простого Raspberry PI и бесплатного фреймворка с открытым исходным кодом под названием OpenCV для подсчета движущихся объектов, точнее, сколько объекты входят и выходят из определенной зоны наблюдения.

Шаг 1: Углубление: как можно обнаружить движение объекта в потоке изображений?

Заглянем глубже: как можно обнаружить движение объекта в потоке изображений?
Заглянем глубже: как можно обнаружить движение объекта в потоке изображений?

Пришло время углубиться в обработку изображений:

как получить изображения с веб-камеры и обнаружить, что туда что-то переместилось

Он состоит из пяти шагов:

Шаг 1. Чтобы выделить движущийся объект

Согласно определению классической физики, ссылка необходима, чтобы сделать вывод о том, что что-то движется или стоит на месте. Здесь, чтобы определить, что что-то переместилось, это почти то же самое: каждый отдельный кадр, захваченный потоком веб-камеры, будет сравниваться с опорным кадром. Если что-то другое, что-то было перемещено. Это просто, как кажется.

Эта система отсчета должна быть снята в самых идеальных условиях (например, без движения). В мире обработки изображений это сравнение между захваченным кадром и опорным кадром заключается в технике, называемой вычитанием фона. Вычитание фона состоит из буквального вычитания цветовой информации от пикселя к пикселю из захваченного кадра и опорного кадра. Таким образом, изображение, полученное в результате этого процесса, выделит / покажет с более подробной информацией только то, что отличается между этими двумя кадрами (или то, что было перемещено / получило движение), а все остальное будет черным на изображении (цвет нулевого значения на сером -масштабный пиксель). Важно: условия освещения и качество снимаемого изображения веб-камерой (из-за качества датчиков захвата) могут незначительно отличаться от кадра к кадру. Это означает, что «равные части» из опорного кадра и другого кадра не будут полностью черными после вычитания фона. Несмотря на такое поведение, на следующих этапах обработки изображений в этом проекте нет серьезных последствий.

Чтобы минимизировать время обработки изображения, перед выполнением вычитания фона захваченный кадр и опорный кадр преобразуются в изображение в градациях серого. Но почему? Это проблема вычислительной эффективности: изображение, представляющее несколько цветов (цветное изображение), имеет три информации на пиксель: компоненты красного, синего и зеленого цветов (старый, но золотой стандарт RGB). Таким образом, математически каждый пиксель может быть определен как массив из трех значений, каждое из которых представляет компонент цвета. Таким образом, если распространить его на все изображение, окончательное изображение будет фактически смесью трех компонентов изображения: красного, синего и зеленого компонентов изображения.

Чтобы его обработать, требуется много работы! Однако в полутоновых изображениях каждый пиксель имеет только одну информацию о цвете. Таким образом, обработка цветного изображения происходит в три раза медленнее, чем в случае полутонового изображения (как минимум в три раза, в зависимости от того, какой метод используется). И еще кое-что: для некоторых целей (например, в этом проекте) обработка всех цветов не нужна или не важна. Таким образом, мы пришли к выводу: использование полутоновых изображений для обработки изображений настоятельно рекомендуется. После вычитания фона необходимо применить фильтр Gaussian Blur.

Фильтр «Размытие по Гауссу», применяемый к изображению с вычтенным фоном, сглаживает все контуры движущегося обнаруженного объекта. Конечно, это поможет на следующих этапах обработки изображений.

Шаг 2: бинаризация

Бинаризация
Бинаризация

В большинстве случаев обработки изображений бинаризация является почти обязательным шагом после выделения объектов / характеристик на изображении. Причина: в двоичном изображении каждый цвет пикселя может принимать только два значения: 0x00 (черный) или 0xFF (белый). Это очень помогает обработке изображений, так как для применения методов обработки изображений на следующих этапах требуется еще меньше «вычислительной мощности». Бинаризацию можно выполнить, сравнивая цвет каждого пикселя полутонового изображения с определенным порогом. Если значение цвета пикселя больше порогового значения, этот цвет пикселя будет принимать значение белого (0xFF), а если значение цвета пикселя ниже порогового значения, этот цвет пикселя будет принимать значение черного (0x00). К сожалению, выбрать пороговое значение не так-то просто. Это зависит от факторов окружающей среды, например от условий освещения. Неправильный выбор порогового значения может испортить все дальнейшие шаги. Поэтому я настоятельно рекомендую вам вручную настроить порог в проекте для вашего случая, прежде чем какие-либо дальнейшие действия. Это пороговое значение должно гарантировать, что движущийся объект отображается в двоичном изображении. В моем случае после адекватного выбора порога получается то, что вы видите на рисунке 5.

Рисунок 5 - двоичное изображение

Шаг 3. Расширить

До сих пор можно было обнаруживать движущиеся объекты, выделять их и применять бинаризацию, в результате чего получалось довольно четкое изображение движущегося объекта (= довольно четкое изображение объекта для обработки изображений). Подготовка к подсчету объектов ПОЧТИ завершена. "ПОЧТИ" здесь означает, что нужно сделать некоторые тонкие настройки, прежде чем двигаться дальше. На данный момент существует реальная вероятность наличия «дыр» в объектах (черные массы пикселей в белом выделенном объекте). Эти отверстия могут быть любыми, от определенных условий освещения до какой-либо части формы объекта. Как только дыры могут «производить» ложные объекты внутри реальных объектов (в зависимости от того, насколько они велики и где они расположены), последствия наличия дыр на изображении могут быть катастрофическими для подсчета объектов. Способ устранения этих дыр - использование техники обработки изображений под названием Dilate. Используйте это, и дыры исчезнут.

Шаг 4: поиск контуров (и их центроидов)

Поиск контуров (и их центроидов)
Поиск контуров (и их центроидов)

На данный момент у нас есть выделенные объекты, внутри нет дыр, и мы готовы к следующему: поиску контуров (и их центроидов). В OpenCV есть ресурсы для автоматического обнаружения контуров, но обнаруженные счетчики должны быть выбраны с умом (чтобы выбрать только реальный объект или объекты). Итак, критерием определения контуров является площадь объекта, измеренная в пикселях². Если контур имеет большую площадь, чем предел (настроенный в программном обеспечении), он должен рассматриваться как реальный объект для подсчета. Выбор этого предела / критерия площади очень важен, и неправильный выбор здесь означает неправильный подсчет. Вы должны попробовать некоторые значения пределов значений площади и проверить, что лучше подходит для вашего использования. Не волнуйтесь, эти ограничения не так уж и сложно найти / отрегулировать. После того, как все объекты на изображении выбраны, следующим шагом будет рисование на нем ретугла (внутри этого многоугольника должен находиться весь обнаруженный объект). А центр этого прямоугольника…. центроид объекта! Вы, возможно, думаете: «Что такого особенного в этом центроиде?», Верно? Вот ваш ответ: неважно, насколько большой или какой формы объект, его движение такое же, как у центроида. Другими словами: эта простая точка, называемая центроидом, представляет все движение объекта. Теперь это делает подсчет очень простым, не так ли? См. Изображение ниже (рис. 6), где центр тяжести объекта представлен в виде черной точки.

Шаг 5: движение центоридов и подсчет объектов

Главный финал: сравните координаты центроида объекта с координатами входной и выходной линий и примените алгоритм подсчета, описанный ранее. И будет подсчет движущихся объектов!

Окончательный результат Как показано в самом начале этого поста, вот проект в действии:

Рекомендуемые: