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.
Source Distribution
File details
Details for the file Droplet_Detector-0.1.2.tar.gz
.
File metadata
- Download URL: Droplet_Detector-0.1.2.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8378ae2c6070cdd35aa4f6ed5cd9ecbc202eb940aa774513b8ccfecf0ab9887a |
|
MD5 | 3a34c2ef065b599dc7e51d9a186ea294 |
|
BLAKE2b-256 | fdaf869e38ffea4804d8dfa68edb32f181466bbe7445453f5a8d2b73c9d99a7f |