TheNetos / devtest

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Проект тестового приложения на позицию C++ разработчика

Задача

  • написать функцию, которая детектирует лица на изображении, и возвращает координаты прямоугольников, описывающих лицо (на изображении может быть несколько лиц);
  • после обработки функция должна выводить нотификацию о завершении обработки файла (путь) и общем результате (сколько лиц нашлось) в консоль;
  • код оформить в виде динамической библиотеки;
  • написать простой функциональный тест на функцию с использованием gtest;
  • создать консольное приложение для выбора входных данных и их обработки, которое будет использовать вышеописанную библиотеку (загружать динамически);
  • входными данными для приложения будет путь к папке, содержащей подпапки с изображениями (вложенность папок не ограничена);
  • входные данные передавать как параметры командной строки;
  • приложение должно вызывать описанную функцию из библиотеки на всех найденных изображениях;
  • сохранить результат работы функции в виде графических .jpg файлов, которые будут являться уменьшенной вдвое копией входных изображений, только с размытием областей с найденными лицами;
  • координаты найденных лиц в исходном изображении и имя файла с результатом нужно сохранить в JSON формате в "result.json" файл в той папке, которая была установлена входным параметром как корневая.

Требования

  • можно использовать только std, opencv, boost, gtest;
  • подразумевается, что компилятор поддерживает стандарт не выше C++11;
  • код должен быть независимым от платформы (Windows, Linux, и пр.);
  • проект должен быть оформлен в CMake формате;
  • результат предоставить в виде ссылки на репозиторий на GitHub, содержащий как исходный код, так и все необходимые бинарные зависимости;
  • проверьте на другой ОС (например, в виртуальной машине), что проект собирается и запускается;
  • все комментарии только на английском;
  • все неописанные моменты - на выбор разработчика;
  • будет оцениваться оформление кода, структура проекта, производительность приложения.

Используемое ПО

  • Компилятор - MinGW 8.1.0
  • Сборка - CMake v3.15.5
  • IDE - Visual Studio Code v1.40

Библиотеки

  • Boost v1.76, static multithread release
    • system
    • filesystem
    • container
    • thread
    • log
    • program_options
  • OpenCV v4.2.0, static release
    • FFMpeg
    • PNG
    • TIFF
    • WEBP
  • GTest v1.10

Используемые команды сборки

Boost

bootstrap
b2 install release cxxflags=-std=c++11 link=static runtime-link=static threading=multi --with-system --with-filesystem --with-container --with-thread --with-program_options --with-log

Чек-лист задач

  • Функция распознавания лица
    • Загрузка и проверки на валидность
    • Распознавание лиц
    • Изменение распознанных областей
    • Сохранение измененой и уменьшенной копии
    • Тесты
    • Оформление в виде динамической библиотеки
  • Консольное приложение
    • Парсинг агрументов запуска, их проверка и нормализация
    • Функция сканирования указанной директории
    • Сохранение результатов распознавания в result.json

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

  • Общая оптимизация архитектуры и кода
  • Документация
  • Проверка кроссплатформенности

Известные баги

  • Некорретный вывод путей в не-англоязычной кодировке
  • При распознавании некоторых файлов всплывает Invalid SOS parameters for sequential JPEG

About


Languages

Language:C++ 99.4%Language:SourcePawn 0.3%Language:C 0.3%Language:CMake 0.1%Language:Objective-C 0.0%Language:Batchfile 0.0%