Skip to main content

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

droplet


Build Status


Введение

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

Работу выполнили студенты из группы 21932:

Обнаружение контуров

Для корректного обнаружения контуров капель мы использовали Canny Edge. Это алгоритм, состоящий из 4 основных шагов:

  1. Уменьшение шума с помощью гауссовского сглаживания.
  2. Вычисление градиента изображения с помощью фильтра Собеля.
  3. Применение Non-Max Suppression для простого подавления локальных минимумов.
  4. Применения пороговой обработки с Гистерезисом, которая создает 2 пороговых значения T_upper и T_lower, которые используются в функции Canny().

Для наглдяности покажем работу алгоритма на следующем изображении капель:

разг

Расчёт площади

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

  1. Уменьшение шума с помощью медианного сглаживания.
  2. Увелечение резкости изображения с помощью 2D фильтра
  3. Маска Собеля для выделения контуров.
  4. Размытие Гаусса для уменьшения шума.
  5. Обнаружение контуров с помощью Canny.
  6. Получение массива внешних контуров с помощью findContours.
  7. Закрашиваниие контуров с помощью fillPoly.
  8. Повторяем с шага 1 для получившейся маски.
  9. Сложение двух получившихся масок.
  10. Отрисовка контуров на картикне.

Для подсчета площади капли в пикселях использовалась функция contourArea, которая считает пиксели в замкнутом контуре.

В итоге, мы пришли к следующим результатам:

разг2

Отрисовка контуров на входном изображении

В конце программы у нас имеются входное изображение и маска с контурами этого изображения. С помощью функции 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Droplet_Detector-0.1.2.tar.gz (12.3 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page