Оглавление:
- Шаг 1: Углубление: как можно обнаружить движение объекта в потоке изображений?
- Шаг 2: бинаризация
- Шаг 3. Расширить
- Шаг 4: поиск контуров (и их центроидов)
- Шаг 5: движение центоридов и подсчет объектов
Видео: Подсчет объектов Raspberry Pi: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Компьютерное зрение, несомненно, фантастическая вещь! Используя это, компьютер получает возможность «видеть» и лучше чувствовать окружающую среду, что позволяет разрабатывать сложные, полезные и интересные приложения. Такие приложения, как обнаружение и распознавание лиц, отслеживание объектов и обнаружение объектов, все больше и больше присутствуют в нашей повседневной деятельности благодаря достижениям компьютерного зрения.
Учитывая, насколько продвинутыми и доступными являются фреймворки и инструменты компьютерного зрения, приложение, описанное в этой статье, хорошо подходит: использование простого Raspberry PI и бесплатного фреймворка с открытым исходным кодом под названием OpenCV для подсчета движущихся объектов, точнее, сколько объекты входят и выходят из определенной зоны наблюдения.
Шаг 1: Углубление: как можно обнаружить движение объекта в потоке изображений?
Пришло время углубиться в обработку изображений:
как получить изображения с веб-камеры и обнаружить, что туда что-то переместилось
Он состоит из пяти шагов:
Шаг 1. Чтобы выделить движущийся объект
Согласно определению классической физики, ссылка необходима, чтобы сделать вывод о том, что что-то движется или стоит на месте. Здесь, чтобы определить, что что-то переместилось, это почти то же самое: каждый отдельный кадр, захваченный потоком веб-камеры, будет сравниваться с опорным кадром. Если что-то другое, что-то было перемещено. Это просто, как кажется.
Эта система отсчета должна быть снята в самых идеальных условиях (например, без движения). В мире обработки изображений это сравнение между захваченным кадром и опорным кадром заключается в технике, называемой вычитанием фона. Вычитание фона состоит из буквального вычитания цветовой информации от пикселя к пикселю из захваченного кадра и опорного кадра. Таким образом, изображение, полученное в результате этого процесса, выделит / покажет с более подробной информацией только то, что отличается между этими двумя кадрами (или то, что было перемещено / получило движение), а все остальное будет черным на изображении (цвет нулевого значения на сером -масштабный пиксель). Важно: условия освещения и качество снимаемого изображения веб-камерой (из-за качества датчиков захвата) могут незначительно отличаться от кадра к кадру. Это означает, что «равные части» из опорного кадра и другого кадра не будут полностью черными после вычитания фона. Несмотря на такое поведение, на следующих этапах обработки изображений в этом проекте нет серьезных последствий.
Чтобы минимизировать время обработки изображения, перед выполнением вычитания фона захваченный кадр и опорный кадр преобразуются в изображение в градациях серого. Но почему? Это проблема вычислительной эффективности: изображение, представляющее несколько цветов (цветное изображение), имеет три информации на пиксель: компоненты красного, синего и зеленого цветов (старый, но золотой стандарт RGB). Таким образом, математически каждый пиксель может быть определен как массив из трех значений, каждое из которых представляет компонент цвета. Таким образом, если распространить его на все изображение, окончательное изображение будет фактически смесью трех компонентов изображения: красного, синего и зеленого компонентов изображения.
Чтобы его обработать, требуется много работы! Однако в полутоновых изображениях каждый пиксель имеет только одну информацию о цвете. Таким образом, обработка цветного изображения происходит в три раза медленнее, чем в случае полутонового изображения (как минимум в три раза, в зависимости от того, какой метод используется). И еще кое-что: для некоторых целей (например, в этом проекте) обработка всех цветов не нужна или не важна. Таким образом, мы пришли к выводу: использование полутоновых изображений для обработки изображений настоятельно рекомендуется. После вычитания фона необходимо применить фильтр Gaussian Blur.
Фильтр «Размытие по Гауссу», применяемый к изображению с вычтенным фоном, сглаживает все контуры движущегося обнаруженного объекта. Конечно, это поможет на следующих этапах обработки изображений.
Шаг 2: бинаризация
В большинстве случаев обработки изображений бинаризация является почти обязательным шагом после выделения объектов / характеристик на изображении. Причина: в двоичном изображении каждый цвет пикселя может принимать только два значения: 0x00 (черный) или 0xFF (белый). Это очень помогает обработке изображений, так как для применения методов обработки изображений на следующих этапах требуется еще меньше «вычислительной мощности». Бинаризацию можно выполнить, сравнивая цвет каждого пикселя полутонового изображения с определенным порогом. Если значение цвета пикселя больше порогового значения, этот цвет пикселя будет принимать значение белого (0xFF), а если значение цвета пикселя ниже порогового значения, этот цвет пикселя будет принимать значение черного (0x00). К сожалению, выбрать пороговое значение не так-то просто. Это зависит от факторов окружающей среды, например от условий освещения. Неправильный выбор порогового значения может испортить все дальнейшие шаги. Поэтому я настоятельно рекомендую вам вручную настроить порог в проекте для вашего случая, прежде чем какие-либо дальнейшие действия. Это пороговое значение должно гарантировать, что движущийся объект отображается в двоичном изображении. В моем случае после адекватного выбора порога получается то, что вы видите на рисунке 5.
Рисунок 5 - двоичное изображение
Шаг 3. Расширить
До сих пор можно было обнаруживать движущиеся объекты, выделять их и применять бинаризацию, в результате чего получалось довольно четкое изображение движущегося объекта (= довольно четкое изображение объекта для обработки изображений). Подготовка к подсчету объектов ПОЧТИ завершена. "ПОЧТИ" здесь означает, что нужно сделать некоторые тонкие настройки, прежде чем двигаться дальше. На данный момент существует реальная вероятность наличия «дыр» в объектах (черные массы пикселей в белом выделенном объекте). Эти отверстия могут быть любыми, от определенных условий освещения до какой-либо части формы объекта. Как только дыры могут «производить» ложные объекты внутри реальных объектов (в зависимости от того, насколько они велики и где они расположены), последствия наличия дыр на изображении могут быть катастрофическими для подсчета объектов. Способ устранения этих дыр - использование техники обработки изображений под названием Dilate. Используйте это, и дыры исчезнут.
Шаг 4: поиск контуров (и их центроидов)
На данный момент у нас есть выделенные объекты, внутри нет дыр, и мы готовы к следующему: поиску контуров (и их центроидов). В OpenCV есть ресурсы для автоматического обнаружения контуров, но обнаруженные счетчики должны быть выбраны с умом (чтобы выбрать только реальный объект или объекты). Итак, критерием определения контуров является площадь объекта, измеренная в пикселях². Если контур имеет большую площадь, чем предел (настроенный в программном обеспечении), он должен рассматриваться как реальный объект для подсчета. Выбор этого предела / критерия площади очень важен, и неправильный выбор здесь означает неправильный подсчет. Вы должны попробовать некоторые значения пределов значений площади и проверить, что лучше подходит для вашего использования. Не волнуйтесь, эти ограничения не так уж и сложно найти / отрегулировать. После того, как все объекты на изображении выбраны, следующим шагом будет рисование на нем ретугла (внутри этого многоугольника должен находиться весь обнаруженный объект). А центр этого прямоугольника…. центроид объекта! Вы, возможно, думаете: «Что такого особенного в этом центроиде?», Верно? Вот ваш ответ: неважно, насколько большой или какой формы объект, его движение такое же, как у центроида. Другими словами: эта простая точка, называемая центроидом, представляет все движение объекта. Теперь это делает подсчет очень простым, не так ли? См. Изображение ниже (рис. 6), где центр тяжести объекта представлен в виде черной точки.
Шаг 5: движение центоридов и подсчет объектов
Главный финал: сравните координаты центроида объекта с координатами входной и выходной линий и примените алгоритм подсчета, описанный ранее. И будет подсчет движущихся объектов!
Окончательный результат Как показано в самом начале этого поста, вот проект в действии:
Рекомендуемые:
Автоматический подсчет очков в гольф-игре Executive Par 3: 12 шагов (с изображениями)
Автоматический подсчет очков в гольф-игре Executive Par 3: недавно я опубликовал инструкции по созданию увлекательной портативной игры в жанре «паттинг», в которую можно играть как внутри, так и снаружи. Это называется «Игра в гольф для руководителей, Пар 3». Я разработал копию счетной карточки, чтобы записывать счет каждого игрока за 9 «лунок». Как в
Подсчет от 0 до 9999 с 8051 с использованием 7-сегментного дисплея: 5 шагов
Подсчет от 0 до 9999 с помощью 8051 с использованием 7-сегментного дисплея: Всем привет! В этом руководстве мы расскажем вам о том, как считать от 0 до 9999 с помощью четырех 7-сегментного дисплея, используя только один порт и 4 цифровых контакта
Электронный подсчет очков в бейсбольном матче с подбрасыванием фасоли: 8 шагов (с изображениями)
Электронный подсчет очков в бейсбольной игре Bean Bag Toss: в этой инструкции объясняется, как автоматически вести электронный подсчет очков в бейсбольной игре Bean Bag Toss. Я не буду показывать подробную конструкцию деревянной игры, эти планы можно найти на веб-сайте Аны Уайт: https: // www
Автоматический подсчет очков в небольшой игре в ски-бол: 10 шагов (с изображениями)
Автоматический подсчет очков в небольшой игре в ски-бол: самодельные игры в ски-болл могут быть большим развлечением для всей семьи, но их недостатком всегда было отсутствие автоматического подсчета очков. Я ранее сконструировал машину Skee-Ball, которая перенаправляла игровые шары в отдельные каналы на основе sc
Роботизированный электрический подсчет очков Цифровая мишень «демоническая карусель»: 9 шагов
Роботизированный электрический подсчет очков Цифровая мишень «демоническая карусель»: Всем привет. С приобретением 3D-принтера это позволило мне выйти на новый уровень в моих разработках в области робототехники для детей. На данный момент я разработал прототип мишени. Что я назвал демонической каруселью. Идея заключалась в том, чтобы