Skip to content

This application counts objects in a photo using OpenCV (opensource Computer Vision library for Python)

Notifications You must be signed in to change notification settings

FoOkySNick/objectCounterByPhoto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

objectCounterByPhoto

This application counts objects in a photo using OpenCV (opensource Computer Vision library for Python)

Пояснительная записка к проекту Computer Vision Object Detection.

Была поставлена задача написания программы, которая с помощью камеры смогла бы подсчитывать количество объектов - деталей, заготовок, собранных изделий и т.д. Для этого было решено применить подход контурного анализа объекта с помощью математических алгоритмов. Все использованные математические алгоритмы поставляются вместе с библиотекой для python – opencv-contrib.

В проекте я использовал:

  • алгоритм Гауссового размытия для того, чтобы повысить качество распознавания границ: для того чтобы убрать шумы на фотографии, поэтому, так же, этот алгоритм иногда называют фильтр Гаусса. Основан на функции Гаусса плотности нормального распределения,
  • алгоритм Canny непосредственно для распознавания границ объектов: алгоритм состоит из нескольких этапов:
  • сглаживание,
  • поиск градиентов,
  • подавление не-максимумов,
  • двойная пороговая фильтрация,
  • трассировка области неоднозначности.

Перед применением детектора Canny, преобразуем изображение в оттенки серого. Пикселями границы объявляются те, в которых достигается локальный максимум градиента в направлении вектора градиента), но после этого алгоритма, получаются лишь границы, а не контуры, потому что они не замкнуты (не закрыты).

Алгоритм морфологического закрытия границ нужен для того, чтобы получить закрытые контуры из границ, полученных на этапе применения алгоритма Canny. Комбинация базовых операций математической морфологии: замыкание, эрозия, наращивание, производит закрытие пробелов между границами с помощью данных базовых графических примитивов. Тем самым мы получили контуры изображения.

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

Контур – замкнутая фигура, поэтому мы можем посчитать ее площадь, как и площадь одного объекта (сфотографировав его одного на таком же расстоянии от объектива камеры, на котором собираемся подсчитывать их количество). Затем площадь контура делим на площадь объекта и получаем их количество в кадре.

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

About

This application counts objects in a photo using OpenCV (opensource Computer Vision library for Python)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages