Сервис принимает запросы от recognizer и управляет бизнес логикой ответственной за идентификацию лиц в базе данных.
- virtualenv .venv -p python3.8
- python -m pip install -r requirements.txt
- source .venv/bin/activate
- cd finder
- gunicorn -b localhost:8001 -t 180 --reload finder.app
Состояния системы привязаны к магазину т.е. к shop_id. (возможно имеет смысл ввести еще один уровнеь абстракции Камера)
- Ready - система ожидает данных от сервиса recognizer
- MaskOnHead - обнаружена маска на лице
- WrongPosition - неправильный поворот головы
- Find - обнаружена персона в БД.
Статусы меняютс на основе данных recognizer-а. Из статуса Find система переходит в статус Ready только по команде из интерфейса пользователя. Такое поводение системы требуется для того что бы бариста отметил купленное кофе. И не получил нового человека до момента как успеет внести покупки.
Принимает данные от системы распознования:
{ "ident": [ 0.0379392060350842, 0.461228414741994, 0.651867551670715, 0.160600162029759, ... 0.461228414741994, 0.651867551670715, 0.160600162029759], "age": 23, "shop": 2, "gender": "Unknown" "face": "ADdssHHKkkjkHHH" }
ident - 256-n мерный вектор лица. face - base64 распознанное изображение. По 256 n-мерному вектору при помощи функции косинусных дистанций ищется наиболее близкое лицо в БД. Если разность между лицами более 0.26 (параметр выбран имперически и требует уточнения) то в БД записывается новый объект.
{
"face": "ADdssHHKkkjkHHH"
}
В случае если пришедший человек в маске в БД записывается состояние MaskOnHead к состояниию также прикладывается полученное изображение от системы распознованя.
{
"face": "ADdssHHKkkjkHHH"
}
В случае если лицо отклонено от камеры более чем на 10 градусов система переходи в состояние WrongPosition.
Принимает такие же данне как и Ident. Но только поиск по существующей БД не проводится каждый раз вставляется новый пользователь. Служит для генерации тестовых наборов данных.