С использованием OpenCV

Вступление

Обработка изображений и машинное обучение, два горячих пирога мира высоких технологий. Знаете ли вы, что мы - наиболее документированное поколение в истории человечества. Каждую минуту в сети производится вопиющее 1,78 миллиона ГБ данных !!!. Это много данных, и большая их часть - изображения и видео. Здесь на помощь приходит автоматическая обработка изображений и машинное обучение.
Никогда не было более прекрасного времени, чтобы быть компьютерным фанатом. Множество возможностей открывается для тех, кто обладает навыками машинного обучения в целом и обработки изображений в частности.

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

Предпосылки

Этот мой пост - скромная попытка заинтересовать людей этой областью и на простом примере продемонстрировать, насколько легко начать работу. Все, что нам нужно, - это практические знания Python и небольшой опыт работы с OpenCV.

  • Python - Хотя в Интернете доступно несколько учебных пособий, лично я обнаружил, что dataquest .io - прекрасная платформа для обучения Python, как для начинающих, так и для опытных.
  • OpenCV - как и python, OpenCV также имеет множество онлайн-руководств. Один сайт, на который я снова и снова ссылаюсь, - это официальная документация.
  • Каскады HaaR - OpenCV предоставляет специальные методы для обучения наших собственных алгоритмов обнаружению любого интересующего объекта во входном изображении. Каскад HaaR - это те файлы, которые содержат эту обученную модель.

Я понимаю, что многие люди, возможно, уже хорошо знакомы с Python, но, возможно, только начинают работать с OpenCV. Поэтому для полноты картины я включил следующий раздел с небольшими сведениями о файлах OpenCV и HaaR Cascade. При необходимости пропустите его.

Первым делом, что быть, OpenCV и Haar Cascade?

OpenCV или Open Source Computer Vision Library - это библиотека компьютерного зрения и машинного обучения с открытым исходным кодом. Хотя он наиболее популярен среди Python, он довольно хорошо взаимодействует с C ++, Java и MATLAB. OpenCV изначально написан на C ++ и широко используется с приложениями, связанными с компьютерным зрением, работающими в различных системах, таких как Windows, Linux, Android, Mac OS и т. Д. Эта поддержка нескольких языков / ОС особенно полезна в различных приложениях IoT.

OpenCV использует каскадные файлы HaaR для обнаружения объектов. Каскадные файлы HaaR - это не что иное, как модели, обученные OpenCV для обнаружения интересующего объекта во входных изображениях. Вы можете создать каскадный файл HaaR для любого объекта реального мира. Все, что вам понадобится, это множество положительных образцов изображений, содержащих объект, и множество отрицательных образцов изображений, содержащих все, кроме объекта. Затем, используя методы, предоставляемые OpenCV, мы можем запустить цикл обучения для создания нашего собственного классификатора HaaR или файла HaaR Cascade. Однако в этом руководстве мы будем использовать один из классификаторов, публично доступных в OpenCV. Этот классификатор специализируется на обнаружении человека на изображении. В будущих уроках мы кратко коснемся того, как создать свой собственный классификатор, а затем запустить обнаружение объектов с его помощью.

Шаги

Загрузить код

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

git clone https://github.com/akshaysin/pedestrian_detect

Установить OpenCV

Установите OpenCV на свой компьютер, следуя инструкциям, перечисленным на следующей странице OpenCV.

Выбор тестового изображения

Хотя корень клонированного проекта уже содержит тестовое изображение с именем peds.jpeg, я бы порекомендовал вам загрузить собственное изображение из Интернета, чтобы сделать его более интересным. Обязательно выберите изображение с кучей людей на нем, потому что это то, что мы ищем. И сохраните его в корне каталога.

Просмотр кода

Приведенный ниже код был взят из документации OpenCV, общедоступной здесь

Откройте `pedestrian.py` из корневого каталога рабочего пространства в вашем любимом редакторе.

Давайте посмотрим на некоторые важные разделы кода один за другим:

  • Чтение изображения: приведенный ниже код считывает изображение, переданное в качестве аргумента программе, и преобразует его в оттенки серого. Также мы бы инициализировали каскадную модель HaaR для обнаружения пешеходов, используя также XML-файл каскада HaaR.
  • Обнаружение людей на изображении: используя каскадную модель HaaR, инициализированную на последнем шаге, мы запускаем обнаружение на входном изображении и определяем количество обнаруженных объектов.
  • Создание ограничивающего прямоугольника: наконец, мы создадим ограничивающий прямоугольник вокруг объектов, обнаруженных на предыдущих шагах, и напишем новое выходное изображение с именем peds_saved.jpg

Выполнение и вывод

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

python pedestrian.py peds.jpeg

Не забудьте заменить peds.jpeg именем изображения, загруженного на предыдущем шаге

Для его запуска требуется несколько секунд, но вы должны ожидать увидеть следующий вывод, если работаете с peds.jpeg

$ python pedestrian.py peds.jpeg
Found 31 pedestrian!
Image written to file-system :  True
[ INFO:0] Initialize OpenCL runtime...

Момент истины

Давайте теперь визуально проверим результаты нашего прогноза до и после.

До

После

Как видно, наш скрипт обнаружил около 31 пешехода на входном изображении. Что неплохо, но, обучая наши собственные классификаторы, мы можем делать прогнозы намного лучше.

Это оно. Удачного кодирования.