Проектируйте микросервисно. Получится как лего: опрятно и взаимозаменяемо.
Тем более разные части можно делегировать подружкам по кафедре.
Итак, микросервисы:
- 1. Модуль захвата. Можно сделать на основе opencv. Присасывается к видео-потоку и ищет что-то похожее на лица, трекает их (opencv это хорошо умеет). Кадры с лицами гурппами кладёт в очередь (которая у вас отдельным микросервисом рядом крутится). Группы нужны, чтобы можно было улучшить распознавание за счет выбора наиболее однозначно распознаваемых ракурсов.
- 2. Сервис распознавания. Вытаскивает таски с группами фоток из очереди и кидает в другую очередь на классификацию. После классификации всех вариантов группы выбирает самые надёжные варианты и пишет в БД события.
- 3. Сервис классификации. Это воркер, он может масштабироваться (запускаться в нескольких экземплярах).
- Достаёт таск (фоточку) из очереди, даёт своей нейроночке, а та выдаёт идентификатор класса и степень похожести.
- 4. Вебсервис реализации дэш-борда - рендер и публикация текущей статисики и текущих событий.
- 5. Сервис срочных уведомлений - выискивает из БД свежие тревожные события и рассылает СМС, дёргает сирену и активирует пулемётные турели.
Читайте про SOLID. Это надо знать и уметь как "отче наш".