Обнаружение объектов без использования машинного обучения
Сегодня мы разберём как найти объекты на изображениях с камер видеонаблюдения, не прибегая к использованию больших вычислительных мощностей.
Наша основная задача - найти на изображениях с камер видеонаблюдения световые оповещатели - таблички с надписью «выход», расположенные над дверями в зданиях в любых местах, чтобы провести анализ нарушений светится табличка или нет, не прибегая к использованию больших вычислительных мощностей. Поэтому мы не будем использовать машинное обучение. Мы разберем один из вариантов, как решить данную задачу. Для этого будем использовать библиотеку Opencv-python. Она содержит методы обработки изображения и алгоритмы компьютерного зрения. Перейдем к краткому описанию подготовки данных и работе алгоритма, а также установке необходимых библиотек.
У нас есть папка с изображениями, где мы будем искать объекты. Во второй папке у нас есть изображения объектов - табличек с надписью «выход». Чтобы сделать алгоритм более универсальным, с помощью геометрических изменений мы подготовим объекты и поместим их также во вторую папку. Эти две папки передаются на вход. Далее берется одно изображение и с помощью цикла происходит сопоставление шаблонов со всеми объектами. Сопоставление шаблонов – метод поиска области изображения похожих на шаблон. Суть данного метода в том, чтобы найти идентичную область изображения, которая соответствует шаблону. В результате мы получим на каких изображениях были найдены таблички «выход» и папку с изображениями, на которых нужные объекты выделены рамкой.
Библиотеки, которые будут использоваться:
Numpy - библиотека для числовых операций.
Os для работы с операционной системой.
Opencv-python – библиотека компьютерного зрения
Перед использованием каждой библиотеки проверьте, что она установлена:
Главное соблюдать ограничения по работе, без них алгоритм может выполняться с ошибкой. Рассмотрим основные ограничения.
Основные ограничения по работе с исходным кодом в примерах:
· Фиксированная структура папок.
· Для корректной работы все блоки надо запускать последовательно.
· Прописывать пути к файлам и папкам, не трогать переменные, которые не заключены в кавычки.
Теперь можем приступить к работе с входными данными.
Описание подготовки входных данных
Импортируем библиотеки.
Перейдем к подготовке объектов для поиска.
Геометрические изменения
Подготовим объекты с помощью геометрических изменений. Если наш объект лежит под другим углом в отличии от объекта, расположенного на изображении поиска, то алгоритм его распознает. Для этого будем отображать объект по осям XYZ и использовать зеркальное отображение. Преобразованные объекты помещаем в одну папку с исходными табличками «Выход». Для этого в строке сохранения укажем путь к папке с объектами поиска.
На выходе получим папку с преобразованными объектами.
Теперь у нас готова вторая папка, где хранятся объекты. Мы закончили подготовку входных данных. Можем переходить к основной части алгоритма. Распознавание объектов.
Работа с алгоритмом распознавания объектов
Основная логика алгоритма строится на библиотеке оpencv-python. Используем метод matchTemplate для сопоставления шаблонов. Сначала прописываем пути к преобразованным изображениям. Далее читаем каждое изображение для работы. В алгоритме также используется пороговое значение, необходимое для точности определения области изображения.
Пример изображения с найденным объектом
На выходе мы получаем папку с изображениями, где были найдены необходимые объекты.
После всех преобразований мы получили изображения с найденными объектами и можем провести анализ нарушений светится табличка «Выход» или нет. В итоге у нас получился готовый алгоритм для распознавания объектов без применения машинного обучения. Алгоритм универсален, его можно использовать для поиска любых простых геометрических объектов и не требуется обучать модель машинного обучения, но при этом мы уступаем в скорости выполнения распознавания объектов. Данный алгоритм вы можете использовать, если не хотите тратить время на написание и обучение моделей машинного обучения, или если нет необходимых вычислительных мощностей.