Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные. Дагаев / Презентация_Проект_TGBot

.pdf
Скачиваний:
1
Добавлен:
02.01.2026
Размер:
1.05 Mб
Скачать

Telegram-бот для сжатия изображений

В условиях стремительной цифровизации и роста объёма передаваемых медиа-данных возникает потребность в инструментах для оптимизации графического контента.

Выбор стек технологий
Сравнить и выбрать наиболее подходящие языки программирования и фреймворки для эффективной реализации проекта.
Реализация логики
Воплотить в жизнь пользовательскую и техническую логику, обеспечив интуитивно понятный интерфейс и полный контроль.
Передача результата
Обеспечить функциональность передачи результатов сжатия изображения на сторону пользователя.

Цели и задачи проекта: путь к автоматизации сжатия изображений

Исследование возможностей

Изучить технологические возможности 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 – Пример работы по сжатию

свёртку, обнаруживающую резкие изменения яркости между соседними пикселями.