Coder Social home page Coder Social logo

catstyle1101 / 3divi Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 12.11 MB

Определитель уникальных лиц на загруженном видео

Python 70.35% CSS 18.26% HTML 8.87% Dockerfile 1.62% Shell 0.90%
computer-vision django django-rest-framework face-recognition opencv-python

3divi's Introduction

Тестовое задание для компании 3divi (1 Этап)

Содержание задания

Тестовое задание

Backend Developer Python

User Story

Я, как пользователь системы контроля и управления доступом (СКУД), хочу иметь возможность загружать в систему архивные видео для обработки. Хочу иметь следующие возможности:

  • Загружать несколько видео-файлов на обработку

  • Получать список загруженных видео, их статус и прогресс обработки

  • Остановить/отменить обработку конкретного видео

  • Получать информацию о количестве людей на каждом видео

  • Заносить в базу людей из видео

  • Получать список людей с информацией на каком видео каждый был обнаружен

  • Вносить личные данные людей (ФИО, дату рождения, пол)

Тестовая задача

Тестовое задание разделено на два этапа:

  1. Разработка сервиса обработки загруженных видео

  2. Разработка сервиса учета людей/сотрудников

Для сдачи тестового задание достаточно выполнить 1 этап

1 этап:

Реализовать сервис видеообработки на Django/FastApi/Flask, который бы позволил детектировать лица на видео и возвращать пользователю агрегированные данные: общее количество лиц по всем кадрам видео.

Сервис должен предоставлять функции:

● Загрузка и обработка видео-файлов, выбранных пользователем.

● Получение списка загруженных видео (включая текущий статус, прогресс выполнения и результат обработки).

● Остановка/отмена обработки выбранного видео.

2 этап

Используя сервис разработанный на первом этапе, расширить функционал приложения. Сервис учета людей/сотрудников должен позволить пользователю управлять базой профилей людей: вносить ФИО, пол, год рождения, а также получать кроп изображения из видео, на основе которого был создан профиль. Заполнение базы профилей должно происходить автоматически, включением настройки при загрузке видео: На каждое найденное лицо в обрабатываемом видео, создается его профиль.

Сервис должен предоставлять функции:

● Получение списка всех профилей (включая изображение из видео, ФИО, пол, дату рождения и ссылку на обработанное видео)

● Внесение данных для каждого профиля (ФИО, пол, дата рождения)

● Удаление выбранного профиля

Требования к реализации

● Программный интерфейс может быть произвольным, но должен быть описан в формате OpenAPI/Swagger или GraphQL Schema;

Сервис должен предоставлять функции:

● Получение списка всех профилей (включая изображение из видео, ФИО, пол, дату рождения и ссылку на обработанное видео)

● Внесение данных для каждого профиля (ФИО, пол, дата рождения)

● Удаление выбранного профиля Требования к реализации

● Программный интерфейс может быть произвольным, но должен быть описан в формате OpenAPI/Swagger или GraphQL Schema;

● Сервис видеобработки должен быть асинхронным и использовать ресурс многоядерного процессора для кратного ускорения обработки, количество одновременно обрабатываемых видеопотоков должно быть равно количеству ядер;

● При запросе списка загруженных видео для каждого из них должны быть доступны: текущий прогресс (значение от 0 до 100) и промежуточный результат (количество найденных лиц на уже обработанном отрезке видео);

● Получение списка профилей не должно занимать более 1 секунды для 100 записей на одноядерном процессоре:

● Для метаданных профилей должна быть валидация данных (кол-во строк ФИО, корректность введенной даты рождения, корректность введенного пола профиля)

Дополнительно

● Для детектирования лиц и получение кропов лиц можно использовать OpenCV.

Будет плюсом

● Микросервисная архитектура, с описанием процессов в виде UML диаграммы

● Контейнеризация docker для каждого сервиса, деплоймент при помощи docker-compose

● Использование объектного хранилища с S3 интерфейсом, например MinIO

● Автотест в виде python скрипта

Запуск проекта

git clone [email protected]:catstyle1101/3divi.git
cd 3divi
cp .env.example .env
docker compose up --build
# Может занять значительное время.

После запуска контейнеров проект доступен по адресу:

http://127.0.0.1:8000/

Также доступен Flower для просмотра задач celery

http://127.0.0.1:5555/tasks

Документация API:

http://127.0.0.1:8000/api/docs/

Реализована админка

http://127.0.0.1:8000/admin/

Для работы в админке понадобится создать учетную запись администратора

docker exec -it 3divi_backend_1 sh
python manage.py createsuperuser
# и следовать шагам мастера создания пользователя

Возможности системы

  • Пользователь может залить до 5 (размер и количество можно изменить в настройках) видео.
  • Система автоматически ставит видео в очередь для распознавания лиц. Ведет подсчет и записывает данные в БД.
  • Можно поставить распознавание на паузу, можно остановить распознавание (для нового запуска видео придется залить заново)
  • Просмотреть текущий статус обработки видео можно на главной странице.
  • Для теста добавлено видео в репозиторий, faces.mp4.

Стек

  • Django
  • Celery
  • Flower
  • Face Recognition
  • OpenCV2
  • Redis
  • Docker
  • PostgreSQL

3divi's People

Contributors

catstyle1101 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.