SafeGuard — это система для поиска смысловых копий изображений в интернете, предназначенная для предотвращения распространения неприемлемого контента. Система использует методы машинного обучения для распознавания аналогичных изображений, независимо от фона, стиля или типа изображения.
Основные компоненты:
-
Поиск смысловых копий изображений.
-
Распознавание людей и объектов на изображениях.
-
Фильтрация контента на основе изображения.
-
Интерфейс API для интеграции с внешними системами.
- Django, Django REST Framework (DRF) — для создания API.
- PostgreSQL — база данных.
- VK Cloud S3 — хранилище объектов.
Проект организован с использованием стандартной структуры для Django-приложений и некоторых вспомогательных библиотек:
│ ├── src/
│ │ ├── core/
│ │ │ ├── db/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── initdb.py # Инициализация базы данных
│ │ │ │ ├── session.py # Настройка сессий с БД
│ │ │ ├── __init__.py
│ │ │ ├── errors.py # Обработчики ошибок
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── base.py # Базовые модели
│ │ │ ├── image.py # Модели для обработки изображений
│ │ ├── routers/
│ │ │ ├── v1/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── router.py # Роутеры API для версии 1
│ │ ├── schemas/
│ │ │ ├── __init__.py
│ │ │ ├── image.py # Схемы для сериализации данных
│ │ ├── main.py # Точка входа для Django
│ │ ├── s3.py # Интеграция с VK Cloud S3
│ │ ├── settings.py # Конфигурация настроек
├── .env # Переменные окружения для локальной настройки
├── Dockerfile # Dockerfile для сборки контейнера
├── requirements.txt # Зависимости проекта
GET /image/all
status(обязательный): Статус изображения. Доступные значения:UPLOADED,PROCESSING,PROCESSED.
Возвращает список всех изображений с заданным статусом.
[
{
"id": 1,
"name": "image1.jpg",
"s3_path": "images/uuid_image1.jpg"
},
{
"id": 2,
"name": "image2.jpg",
"s3_path": "images/uuid_image2.jpg"
}
]GET /image/{image_id}
image_id(обязательный): ID изображения.
Возвращает подробную информацию о выбранном изображении.
{
"id": 1,
"name": "image1.jpg",
"status": "UPLOADED",
"created_at": "2024-11-01T10:00:00+00:00",
"uploaded_at": "2024-11-01T10:05:00+00:00",
"s3_path": "images/uuid_image1.jpg"
}POST /image
name(обязательный): Название изображения.file(обязательный): Файл изображения.model_name(обязательный): Название модели, которая будет обрабатывать изображение.
Возвращает информацию о загруженном изображении.
{
"id": 1,
"name": "image1.jpg",
"status": "UPLOADED",
"created_at": "2024-11-01T10:00:00+00:00"
}
GET /image/poll/{model_name}
model_name(обязательный): Название модели для обработки.
Возвращает изображение, готовое для обработки, или сообщает об отсутствии новых изображений.
{
"id": 1,
"s3_path": "images/uuid_image1.jpg",
"img_callback_url": "http://restapi:8000/api/v1/image/1/processed"
}
GET /image/{image_id}/processed
image_id(обязательный): ID изображения.
Возвращает ссылку на обработанное изображение и список других обработанных изображений.
{
"img_url": "images/uuid_image1.jpg",
"return": "true",
"id": "1",
"result": ["2", "3"]
}GET /image/{image_id}/return_images
image_id(обязательный): ID изображения.
Возвращает список обработанных изображений, связанных с указанным изображением.
[
{
"id": 2,
"file_link": "images/uuid_image2.jpg"
},
{
"id": 3,
"file_link": "images/uuid_image3.jpg"
}
]- Для работы с изображениями система использует Amazon S3 для хранения файлов.
- Все запросы и ответы взаимодействуют с базой данных, где хранятся изображения и их статусы.
- При обработке изображений система автоматически обновляет статусы и связывает обработанные изображения с исходными.
Все эндпоинты защищены и требуют соответствующих прав доступа для работы с изображениями и их обработкой.