Лабораторные. Дагаев / Презентация_Проект_TGBot
.pdfTelegram-бот для сжатия изображений
В условиях стремительной цифровизации и роста объёма передаваемых медиа-данных возникает потребность в инструментах для оптимизации графического контента.
Цели и задачи проекта: путь к автоматизации сжатия изображений
Исследование возможностей
Изучить технологические возможности Telegram Bot API для максимального использования его потенциала.
Разработка архитектуры
Создать надёжную и масштабируемую архитектуру бота, учитывающую все функциональные требования.
Настройка клиента
Интегрировать и настроить работу с JSON для надёжного хранения пользовательских данных.
Тестирование и документация
Провести всестороннее тестирование, устранить ошибки и подготовить детальные инструкции для пользователей.
Основная цель проекта — создание полнофункционального Telegram-бота, который обеспечит автоматизированное сжатие изображений с дополнительными функциями, обработкой команд, соответствуя современным требованиям к удобству и эффективности.
Актуальность проекта в цифровой эпохе
Цифровизация
В условиях стремительной цифровизации и роста объёма передаваемых медиаданных возникает потребность в инструментах для оптимизации графического контента.
Оптимизация трафика
Оптимизация трафика и памяти — необходимость экономии мобильного трафика и места на устройствах. дистанционный контроль знаний незаменимым.
Конфиденциальность в цифровую эпоху
Конфиденциальность данных — важность удаления метаданных (геолокация, параметры съёмки) из изображений перед отправкой.
Платформа Telegram
Telegram с его открытым API, миллионами пользователей, поддержкой ботов и кроссплатформенностью идеально подходит для реализации такой системы.
Наш проект решает эти задачи, предоставляя инструмент для быстрой и интеллектуальной оптимизации изображений прямо в чате.
Выбор технологического стека для разработки бота
Язык программирования: Python |
Основной фреймворк: aiogram |
Дополнительные инструменты |
||
• Простой и читаемый синтаксис, |
• |
Асинхронный фреймворк, |
· img2pdf — для сборки изображений в |
|
|
ускоряющий разработку. |
|
работающий на основе async/await |
PDF-документы. |
• |
Поддержка асинхронного |
|
для эффективной обработки |
· JSON — для хранения |
• |
запросов. |
пользовательских настроек. |
||
|
программирования (asyncio) для |
Поддержка FSM (машины |
· dotenv — для управления |
|
|
высокой производительности. |
|
состояний) для управления |
конфигурацией. |
• Обширное сообщество и огромное |
|
сложными сценариями |
|
|
|
взаимодействия. |
|
||
|
количество библиотек для любых |
• Удобная маршрутизация команд и |
|
|
• |
задач. |
|
событий, упрощающая разработку. |
|
Универсальность и |
• Лёгкая интеграция с базами |
|
||
|
кроссплатформенность, |
|
||
|
обеспечивающие гибкость |
|
данных и внешними API. |
|
|
развёртывания. |
|
|
|
Выбор Python и aiogram обусловлен их гибкостью, производительностью и обширной экосистемой, что позволяет создать надёжную и масштабируемую систему. Дополнительные инструменты обеспечивают полный цикл работы с данными, от хранения до анализа и визуализации.
Модульная архитектура системы Telegram-бота
1Модуль конфигурации Загрузка настроек и переменных окружения (токен бота, рабочий каталог).
2Модуль обработки изображений Ядро системы: сжатие, изменение размера,
конвертация форматов, классификация типа изображения.
3Модуль управления настройками Сохранение и загрузка персональных параметров
пользователей (качество, целевой размер и др.) в формате JSON.
4Модуль PDF-сессий
Временное хранение изображений в оперативной памяти для сборки многостраничных PDF-документов.
5Модуль обработчиков команд Логика взаимодействия с пользователем через
Telegram API (команды, загрузка файлов, ответы).
Рис. 1 – Схема
Основные этапы разработки системы
Процесс разработки был разбит на логические этапы, начиная от планирования функционала и заканчивая тестированием, что обеспечило методичный подход к созданию сложной системы.
1. Планирование функционала — определение ключевых функций: адаптивное сжатие, настройка
параметров, сборка PDF, удаление EXIF-данных.
2. Проектирование архитектуры — разработка модульной структуры с чётким
разделением ответственности.
3. Реализация логики сжатия — написание алгоритмов классификации изображений, бинарного
Поиска качества, палитризации PNG.
4. Разработка пользовательского интерфейса — создание системы команд (/start, /quality,
/pdf_start и др.) и обработчиков сообщений.
5.Интеграция и тестирование — объединение модулей, тестирование на различных типах изображений, обработка ошибок.
6.Оптимизация и документация — улучшение производительности, подготовка инструкции для пользователей.
Цветовая модель и форматы данных
В проекте используются четыре основных формата данных для хранения и передачи графической информации:
·JPEG — растровый формат для фотографий с сжатием с потерями, поддерживает до 24-битный цвет, но не прозрачность.
·PNG — растровый формат без потерь с поддержкой прозрачности и альфа-канала, подходит для графики и логотипов.
·PDF — универсальный формат документов, сохраняет текст, векторную и растровую графику, шрифты и макет для печати или просмотра.
·JSON — текстовый формат для структурированных данных в виде ключзначение, используется для обмена данными в API и конфигурациях.
·RGB (Red, Green, Blue) представляет собой аддитивную цветовую модель, где каждый видимый цвет формируется путем сложения различных интенсивностей трех первичных цветов: красного, зеленого и синего.
Детализация реализации Telegram-бота
Реализация Telegram-бота является ядром системы. Была разработана модульная структура проекта, обеспечивающая чистоту кода, легкость отладки и возможность дальнейшего расширения функционала.
·Адаптивный алгоритм сжатия:
·Классификация: изображение анализируется на количество уникальных цветов и резкость краёв для определения типа («фото» или «графика»).
·Для фото: применяется JPEG-сжатие с настраиваемым качеством и прогрессивной развёрткой.
·Для графики: используется палитровый PNG с дизерингом Флойда-Штайнберга для сохранения чёткости контуров.
·Контроль размера: бинарный поиск по параметру качества для достижения заданного размера файла.
·Управление метаданными: опция удаления EXIF и ICC-данных для защиты приватности.
·Сборка PDF: последовательная загрузка изображений и объединение их в один PDF-документ.
Классификация изображений
При поступлении изображения, бот автоматически может определить к какому типу его отнести - «фотография» или «графика»·
Цель алгоритма состоит в том, чтобы выбрать оптимальный алгоритм сжатия: · Фото (JPEG): Непрерывные тона, плавные градиенты.
· Графика (PNG): Четкие края, ограниченная цветовая палитра (скриншоты, схемы, текст).
Применяются два ключевых признака:
1. Статистика цвета: подсчет уникальных цветов на уменьшенной копии (256x256). Меньше 20 000 цветов → признак графики.
2. Текстурный анализ: Применение фильтра обнаружения краев (FIND_EDGES на основе оператора Лапласиана) и вычисление средней яркости результата. Низкая средняя резкость (<40) → признак графики.
Классификация изображений. Обзор работы
Программная реализация классификации изображения на языке программирования |
|
|
Python. И пример работы бота с изображением пейзажа (рис. 2). |
|
|
Цель алгоритма состоит в том, чтобы выбрать оптимальный алгоритм сжатия: |
|
|
def classify_image(img: Image.Image) -> str: # 1. Уменьшаем и считаем цвета |
|
|
rgb_small = img.convert("RGB").resize((256, 256)) |
|
|
uniq = len(rgb_small.getcolors(maxcolors=1 << 20)) # 2. Анализируем резкость краев |
|
|
edges = rgb_small.filter(ImageFilter.FIND_EDGES).convert("L") |
|
|
edge_mean = sum(edges.getdata()) / (256 * 256) # 3. Комбинированное правило |
|
|
(эмпирические пороги) |
|
|
if uniq < 20000 and edge_mean < 40: |
|
|
return "graphics" |
# -> Будеи сжимать в PNG |
|
return "photo" |
# -> Будеи сжимать в JPEG |
|
imageFilter.FIND_EDGES — это фильтр из модуля ImageFilter библиотеки Pillow, |
|
|
который выявляет и подчёркивает края объектов на изображении. Применяет |
Рис. 2 – Пример работы по сжатию |
|
свёртку, обнаруживающую резкие изменения яркости между соседними пикселями. |
||
