КПрограммная часть состоит из трёх процессов:
- Контроллер - управляет всем оборудованием, предоставляет API через HTTP и WebSockets.
- Процессор - принимает задания на обработку фотографий из RabbitMQ, конвертирует изображение из формата RAW в JPEG и загружает обратно.
- UI - веб-приложение на React, запускается в electron.
КонтроллерВ контроллере есть 3 сущности: пользователи, сессии и фотографии. Сессия создается в активном состоянии и по решению пользователя завершается, переходит в неактивное состояние. Пользователи создаются при запросе на создание сессии, если клиент не послал JWT токен. Если послал - будет создана сессия для этого токена. Таким образом 2 человека могут пользоваться системой по очереди и каждый будет видеть все фотографии и только свои. Процесс обработки фотографий не зависит от активности сессий, можно завершить сессию и фотографии продолжат обрабатываться. Интерфейс в телефоне может работать у нескольких пользователей одновременно.
ПроцессорДля того, чтобы обеспечить максимальное качество и гибкость, камера снимает в формате RAW и фотографии обрабатываются в RAW конвертере. Идея состоит в том, чтобы владельцы фотостудий или операторы фотозон могли самостоятельно делать профили для обработки, так как для разных интерьеров, к примеру, подходят разные стили фото. Изначально был план использовать Adobe Lightroom и Portraiture для обработки, так как все умеют с ними работать и в интернете есть множество платных и бесплатных пресетов. Однако и lightroom и portraiture стоят довольно дорого и к тому же совершенно не оптимизированы для запуска без графического интерфейста, так что с ними не удалось добиться запуска системы одной кнопкой. К счастью, свободный RAW-конвертер RawTherapee обеспечивает отличное качество и имеет встроенную возможность улучшения вида кожи, так что текущий вариант работает именно через него.
UI
Для упрощения разработки UI был выбран Javascript с React, это позволяет часть кода использовать для локального UI, Web-интерфейса в телефоне и приложения на react-native.