- Storage, разделил на два хранилища на случай если вдруг придется прикручивать какой-нибудь индекс для эмбедингов (вряд ли)
- хранилище эмбедингов, которое умеет искать k ближайших соседей
- embedding_id => embedding
- айди эмбедингов генерит само хранилище
- хранилище метаданных
- embedding_id => metadata
- метаданные это файл с фоткой, айди юзера и тд
- хранилище эмбедингов, которое умеет искать k ближайших соседей
- Engine - движок для работы со всем алгоритмом
- объединяет в себе два Storage (для найденных и для потерянных) и модель для эмбедингов
- Storage крутятся отдельным сервисом, потому что движком пользуются и телеграм бот и городская камера, а и им нужно шарить БД
- модель крутится прямо в движке, надо будет тоже обернуть в сервис и запихнуть в какое-нибудь облако с GPU, потому что для Watcher получается медленно.
- Telegram bot - просто использует Engine. Можно добавить найденного/потерянного питомца, в ответ бот возвращает совпадения если есть.
- Watcher - крутится типа на городской камере. Смотрит кадры с видеопотока и пытается на них с помощью другой модели найти лица питомцев. Найденные лица кропает, находит для них эмбеддинг и отправляет в базу найденных питомцев. Модель для детекции лиц надо будет тоже затащить на облако, потому что на CPU у нее примерно 5 FPS, это медленно. Чтобы не замусоривать одними и теми же лицами нужно агрегировать результаты детекции: например, 3 секунды детектим, а эмбединг находим только для самого уверенного детекта за промежуток. Можно также перед тем как класть эмбединг в базу посмотреть нет ли в ней почти-дубликатов (L2 < 0.01). Также вотчеры используют отдельную базу для находяшек, чтобы упростить контроль.
-
Надо поресерчить пороги уверенности для моделей. Какая должна быть dist между двумя питомцами, чтобы считать это совпадением? Какой должен быть conf у модели детекции, чтобы считать, что на фотке питомец?
-
у API бекенда будет метод getCurrentTopMatches(lost_id), возвращающее топ совпадений с городских камер для потеряшки. В каждом совпадении будет вся нужная инфа: фотка, степень совпадения (L2 расстояние), время обнаружения, местоположение камеры, может порода и т.д. Надо подумать как это все красиво показать хозяину потеряшки. Предварительно:
- нужна красивая таблица с совпадениями и возможностью фильтрации (например, отсортировать по району, дальности от дома хозяина)
- нужна карта, на которой будем рисовать совпадения. Нужно подумать как на карте учитывать степень совпадения, может просто цветом - красный=макс, синий=мин.
Все это желательно адаптировать под мобилки (инфы много, места на экране мало, возможно все-таки оставим чисто веб).