Telegram bot that draws the outlines of drips on a photo !!! Warning!!! Before running, be sure to create the folders "exel", "new_file" and "save_docs" in the workspace where the python file is located !!!!
Project description
Droplet-Detector
Введение
Перед нашей командой стояла задача создать простой в использовании проект, который будет рисовать контуры капель. Также было необходимо написать код для подсчёта пикселей каждой капли и добавить возможность сохранять данные в виде таблицы. Эта работа позволила нам глубже изучить компьютерное зрение с помощью библиотек OpenCV2 в Python, научиться работать в команде и дала возможность создать собственного телеграмм-бота.
Работу выполнили студенты из группы 21932:
Обнаружение контуров
Для корректного обнаружения контуров капель мы использовали Canny Edge. Это алгоритм, состоящий из 4 основных шагов:
- Уменьшение шума с помощью гауссовского сглаживания.
- Вычисление градиента изображения с помощью фильтра Собеля.
- Применение Non-Max Suppression для простого подавления локальных минимумов.
- Применения пороговой обработки с Гистерезисом, которая создает 2 пороговых значения T_upper и T_lower, которые используются в функции Canny().
Для наглдяности покажем работу алгоритма на следующем изображении капель:
Расчёт площади
Для того, чтобы правильно считалась площадь, была необходима отрисовка замкнутых контуров капель. Это и была следующая проблема, с которой мы столкнулись. Для ее решения мы последовательлно применяли несколько функций:
- Уменьшение шума с помощью медианного сглаживания.
- Увелечение резкости изображения с помощью 2D фильтра
- Маска Собеля для выделения контуров.
- Размытие Гаусса для уменьшения шума.
- Обнаружение контуров с помощью Canny.
- Получение массива внешних контуров с помощью findContours.
- Закрашиваниие контуров с помощью fillPoly.
- Повторяем с шага 1 для получившейся маски.
- Сложение двух получившихся масок.
- Отрисовка контуров на картикне.
Для подсчета площади капли в пикселях использовалась функция contourArea, которая считает пиксели в замкнутом контуре.
В итоге, мы пришли к следующим результатам:
Отрисовка контуров на входном изображении
В конце программы у нас имеются входное изображение и маска с контурами этого изображения. С помощью функции bitwise_and(img, img, mask=mask) из библиотеки OpenCV2 мы рисуем маску прямо на входном изображении и выводим это как итог.
Телеграмм-бот
Для взаимодействия пользователя и телеграмм-бота мы использовали библиотеку Telebot. Бот запускается с помощью команды /start, после чего он нас приветствует и просит ввести команду Help. Далее мы можем увидеть список команд в определённой последовательности для корректной работы. Наш бот не очень разговорчивый, поэтому если вы попытаетесь поговорить с ним на отдалённые темы, у вас ничего не выйдет.
DockerHub
Команда для начала работы проекта
docker run nekrasovaanna/droplet-detector
Установка с Pypi и запуск
Установите библиотеку Droplet_Detector в рабочую область
pip install Droplet_Detector
Перед запуском создайте папки в рабочей области "exel", "new_file" and "save_docs"
mkdir exel,new_file,save_docs
Импортируйте модуль Bot.py в вашем файле .py
from Droplet_Detector import Bot
Запустите бота написав
Bot.start()
Cсылка на бота
https://t.me/Droplet_Detector_bot
Источники
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.