Маленькая система видеонаблюдения

Название Watchdog
Баллы 9
Командная?

В рамках задачи необходимо реализовать Windows-службу (пожалуйста предоставьте установочный скрипт, чтобы руками не удалять/устанавливать).

При запуске служба должна запускать MVC WebAPI-сервер, слушающий сетевые HTTP-подключения на порту (должен задаваться в конфигурацинном файле). Сервер может состоять из одного контроллера и должен реализовывать 2 action-а (по разным путям, разумеется). Подразумевается, что запросы к ним пользователь будет делать из браузера. Служба будет установлена как Network Service, чтобы оставаться активной даже при отсутствии залогиненного пользователя.

  1. /Shot - этот action заставит сервер подключиться к web-камере, которая подключена к машине, на которой запущен сервер, снять с неё изображение и вернуть (можно несжатым BMP используя StreamContent), после чего корректно освободить все ресурсы, занятые этой операцией. Приветствуется (но не обязательно), если action будет принимать параметры для установки экспозиции, угла поворота, яркости, контраста и прочих параметров камеры. Снятие изображений с камеры (учитывая открытие/закрытие всех ресурсов) - длительная операция (до не скольких секунд), в связи с чем необходимо предусмотреть и обработать случай, когда несколько пользователей одновременно запрашивают изображение - все они должны получить одинаковую картинку, если кто-то уже сделал запрос.

  2. /Index - возвращает небольшой HTML/JavaScript-фронтенд к задаче. Обязательной должна быть кнопочка для снятия изображения. Будет совсем хорошо, если снятое изображение будет загружаться в , расположенный где-нибудь не по-далеку. По желанию - выбор камеры, установка параметров снимка. Грамотное использование Twitter Bootstrap/AngularJs/TypeScript приведет к повышению лояльности преподавателя при проверке задания.

Любыми библиотеками, инкапсулирующими работу с web-камерой (EmguCV например) пользоваться запрещается. DirectShowLib.NET использовать можно. PInvoke и вынесение работы с камерой в нативную сборку - можно, но не желательно. Версия MVC WebAPI и .NET Framework не принципиальна.