UfaHack2024
Описание проекта
Проект представляет систему распознавания лиц актёров (США / СССР-Россия) и блогеров с веб-камеры и по загруженным фотографиям. Пайплайн обработки: MTCNN (детекция лица) → DeepFace (Facenet, выделение эмбеддингов) → CatBoost (градиентный бустинг, классификация).
На основе десктопного приложения на CustomTkinter пользователь может запускать распознавание как из файловой папки с фотографиями, так и в реальном времени через веб-камеру. Дополнительно реализован Android-клиент на Kotlin, который отправляет фото на серверную часть по TCP-сокету.
Система обучена на нескольких категориях: актёры США, актёры СССР-Россия и блогеры. Для каждой категории строится отдельная модель CatBoost, использующая эмбеддинги лиц, извлечённые предобученной сетью Facenet.
Стек технологий
- Python (основной язык)
- CustomTkinter (графический интерфейс)
- DeepFace + Facenet (извлечение эмбеддингов лиц)
- MTCNN / FastMTCNN (детекция лиц)
- CatBoost (градиентный бустинг)
- OpenCV + opencv-contrib-python (обработка изображений и видео)
- PyTorch + torchvision (фреймворк для нейросетей)
- CUDA (ускорение на GPU)
- Kotlin (Android-клиент)
Структура проекта
UfaHack2024/
├── notebooks/
│ ├── app/
│ │ ├── main.py # Точка входа, CustomTkinter
│ │ ├── Predict_photo.py # Распознавание из папки с фото
│ │ ├── Predict_video.py # Распознавание с веб-камеры
│ │ ├── PredictServer.py # TCP-сервер (192.168.120.240:12345)
│ │ ├── Start.py # Стартовое окно
│ │ ├── FastMtcnn.py # Ускоренный MTCNN
│ │ └── FDJ.jpg # Тестовое изображение
│ ├── model/
│ │ ├── saved_dictionary.pkl # Словарь имён (категория)
│ │ ├── saved_dictionary_russia.pkl # Словарь имён (Россия)
│ │ ├── saved_dictionary_bloggers.pkl # Словарь имён (блогеры)
│ │ ├── actors_usa_embeddings.pkl # Эмбеддинги (США)
│ │ └── actors_ussr_embeddings.pkl # Эмбеддинги (СССР-Россия)
│ ├── saved_dictionary.pkl # Словарь имён (корневой)
│ ├── EDA.ipynb # Разведочный анализ данных
│ ├── blur_detection.ipynb # Детекция размытия
│ ├── catboost.ipynb # Обучение CatBoost
│ ├── deepface_notebooks.ipynb # Работа с DeepFace
│ ├── FastMTCNN.py # Вспомогательный модуль
│ └── tester.py # Тестирование
├── MyApplication6.rar # Android-клиент (Kotlin)
├── .gitignore
├── requirements.txt
└── c4715817-515e-4815-aa0d-bfcc75d45388.jfif
Установка и запуск
- Клонируйте репозиторий:
git clone https://github.com/DrHo1y/UfaHack2024.git
cd UfaHack2024
cd notebooks/app
- Установите зависимости (см. раздел Зависимости ниже).
- Запустите приложение:
python main.py
Зависимости
Файл requirements.txt содержит лишь часть зависимостей (deepface, customtkinter, torch, torchvision). Для полной работы дополнительно установите:
- catboost
- opencv-python
- opencv-contrib-python
- pandas
- imutils
- mtcnn
Базовую установку можно выполнить командой:
pip install -r requirements.txt
Затем доустановите недостающие пакеты из списка выше.
Важные замечания
- Файлы
.cbm(catboost_usa.cbm, catboost_ussr.cbm) не включены в репозиторий. Их необходимо обучить из блокнотаcatboost.ipynbили получить отдельно. - Каталоги
data/с фотографиями находятся в.gitignoreи не приложены к репозиторию. В коде жёстко прописаны абсолютные пути видаC://Users//fatik//PycharmProjects//UfaHack2024//data//...— перед запуском требуется скорректировать пути под ваше окружение. requirements.txtнеполон; список установки недостающих пакетов приведён выше.- Серверная часть (
PredictServer.py) ожидает IP-адрес192.168.120.240:12345— измените под свою сеть.
Приложение для Android
В корне репозитория находится архив MyApplication6.rar — проект Android-приложения на Kotlin. Клиент подключается к серверу (PredictServer.py) по TCP-сокету, отправляет фотографию и получает результат распознавания.
Docker / локальная разработка
В репозитории добавлена конфигурация для запуска headless-сервера распознавания лиц в Docker-контейнере (без GUI).
Быстрый старт
docker compose up --build
После сборки и запуска сервер будет доступен на порту 12345 (адрес 127.0.0.1:12345).
Переменные окружения
| Переменная | По умолчанию | Описание |
|---|---|---|
HOST |
0.0.0.0 |
Адрес для привязки сокета |
PORT |
12345 |
Порт TCP-сервера |
MODEL_DIR |
/app/models |
Каталог с моделями CatBoost |
DATA_DIR |
/data |
Каталог с данными (фотографиями) |
Важно
- Файлы
.cbm(catboost_usa.cbm и др.) не включены в репозиторий. Поместите их в каталог./models/на хосте перед запуском контейнера. Без них контейнер запустится, но распознавание будет недоступно (в логах появится предупреждение). - Каталоги
./models/и./data/создаются Docker автоматически, если их нет на хосте.
CI / CD
- GitHub Actions — при пуше в ветку
mainавтоматически собирает образ и публикует его вghcr.io/DrHo1y/UfaHack2024. - Gitea Actions — аналогичный workflow для Gitea (требует зарегистрированного runner и секрета
GITEA_TOKEN).
Благодарности
Для обучения модели использовали CatBoost