Мои задачи связаны с анализом изображений и звука, изменять сам видеопоток не требуется. В эти задачи входит детекция движения и лиц, распознавание лиц, детекция голоса. Учитывая, что на клиентах у меня JS, то для анализа изображений использую Canvas, а для анализа звука — Web Audio API. Чтобы менять сам видеопоток, видимо, нужно обработку делать на сервере. Думаю, обработку такого плана можно добавить как через модули Kurento, так и через постобработку тем же ffmpeg (там есть функция blur, только нужно указывать координаты области). Видел в примерах Kurento модули, которые используют OpenCV для детекции лиц и наложения эффектов.
Под постобработкой имею ввиду перекодирование видеофайлов через ffmpeg, можно не склеивать их как в статье, а просто перекодировать в тот же формат (vp8 + opus/vorbis) с заданным разрешением и частотой кадров. Модули Kurento писать не пробовал, необходимую обработку обычно выполняю на стороне клиента.
Конкретно этим проектом сейчас занимаюсь уже не я. Однако я успешно использовал Kurento еще в двух других проектах, серьезных нареканий пока нет. Единственное, чтобы корректно воспроизводились видеозаписи, требуется их постобработка. Иначе не работает позиционирование без полной предварительной загрузки видеозаписи в плеер.
Для отслеживания голоса и шумов используется Web Audio API, специальные библиотеки не используются. Алгоритм определяет текущий уровень шума, превышение этого уровня на заданную величину указывает на наличие сигнала, например, речи. Помимо этого в качестве фильтра задается минимальная длительность сигнала около 1000 мс, а также частотная фильтрация от 300 Гц до 3400 Гц для человеческого голоса.
Основной язык программирования JavaScript (full-stack), если вопрос про это.
Формулу выводили сами. Основная идея была в том, чтобы получить некоторую интегральную оценку ситуации в целом. По сути, это усредненная оценка, рассчитанная на каждую минуту сеанса. Формула расчета оценки в каждой минуте должна учитывать все необходимые параметры с учетом их значимости на конкретном экзамене. Например, если экзамены принимаются дистанционно (из дома), то можно включит все параметры, формула будет возвращать максимальное значение по любому из этих параметров. Если требуется провести экзамены с прокторингом в компьютерных классах, то здесь можно понизить коэффициент или исключить, к примеру, детекцию голоса (если в классе шумно). Мы собираем статистику и уточняем параметры и формулу для расчета оценки, этот работа еще ведется.
Библиотеки никакие не используются, алгоритм собственной разработки. Метод основан на диграфах (две соседние буквы в слове), где каждый диграф характеризуется следующими параметрами: длительность удержания первой клавиши, длительностью удержания второй клавиши, длительность между нажатиями этих клавиш. Во время обучения собираем данные по разным диграфам (формируем эталонны набор), а затем рассчитываем расстояние между эталонным набором и текущими данными. Есть некоторое пороговое значение расстояния, в пределах которого считаем почерк опознанным. Эталонный набор может дополняться в процессе дообучения. Я проводил исследование на эту тему, некоторые результаты в виде исходных кодов опубликованы здесь: https://github.com/meefik/spyjs
Определение нахождения внутри ВМ — это частный случай и не решает проблемы в целом. А если подключиться к другому компьютеру через удаленный рабочий стол, или подключить второй компьютер к одному монитору с возможностью переключения с клавиатуры? Возможность решения этой проблемы на данный момент исследуется. Есть идея отслеживать события клавиатуры и мыши, и визуализировать их в интерфейсе проктора для сопоставления поведения испытуемого (на камере) и его взаимодействия с компьютером (события мыши и клавиатуры). В дальнейшем этот процесс можно частично автоматизировать.
Задача системы и подобных сервисов повысить степень доверия к результатам дистанционных экзаменов. Понятно, что говорить о 100% достоверности результатов нельзя, потому как даже очные центры тестирования не дают такого показателя. Но без подобных мер доверия к дистанционным экзаменам нет вообще никакого, так что даже такой вариант на данный момент лучше, чем ничего.
Пока используется только обычная веб-камера и микрофон, однако исследования в этом направлении ведутся несколькими университетами. Уже есть прототипы биометрических датчиков и алгоритмы, помогающие проктору более эффективно выявлять факты нарушения правил прохождения экзаменов. Появится ли что-то подобное на рынке в ближайшее время, сказать сложно.
Перед началом каждого испытания (экзамена) проктор просит испытуемого выполнить ряд действий, такие как показать (обвести камерой) свое рабочее место и помещение, в котором он находится. В помещении не должны находиться посторонние лица, на рабочем месте не должно быть ничего постороннего, кроме листка бумаги и ручки, должен быть только один компьютер с одним монитором, не допускается использование наушников или аудиогарнитур и пр. Вот условия проведения итоговой аттестации на НПОО. Эти правила не являются чем-то новым, например, известный зарубежный сервис тестирования Pearson VUE предъявляет достаточно жесткие условия прохождения онлайн тестирования (вот ссылка на правила прохождения онлайн-экзамена от Microsoft, которые пользуются услугами Pearson VUE).
Спасибо за отзыв) Что касается vagga, то тут могу просто перечислить возможные отличия LD:
готовый инструмент для сборки rootfs необходимого дистрибутива (на данный момент «из коробки» поддерживается 123 варианта развертывания базовой системы, если учитывать дистрибутив, его версию и архитектуру), для каждого поддерживаемого дистрибутива написан свой bootstrap;
поддержка эмуляции архитектуры для запуска, например, ARM-дистрибутивов, может использоваться при кросс-компиляции;
возможность запуска Linux Deploy CLI на x86, ARM и MIPS архитектурах, не требуется поддержки специальных опций в ядре (для декстопов не актуально).
Для отслеживания голоса и шумов используется Web Audio API, специальные библиотеки не используются. Алгоритм определяет текущий уровень шума, превышение этого уровня на заданную величину указывает на наличие сигнала, например, речи. Помимо этого в качестве фильтра задается минимальная длительность сигнала около 1000 мс, а также частотная фильтрация от 300 Гц до 3400 Гц для человеческого голоса.
Основной язык программирования JavaScript (full-stack), если вопрос про это.
Формулу выводили сами. Основная идея была в том, чтобы получить некоторую интегральную оценку ситуации в целом. По сути, это усредненная оценка, рассчитанная на каждую минуту сеанса. Формула расчета оценки в каждой минуте должна учитывать все необходимые параметры с учетом их значимости на конкретном экзамене. Например, если экзамены принимаются дистанционно (из дома), то можно включит все параметры, формула будет возвращать максимальное значение по любому из этих параметров. Если требуется провести экзамены с прокторингом в компьютерных классах, то здесь можно понизить коэффициент или исключить, к примеру, детекцию голоса (если в классе шумно). Мы собираем статистику и уточняем параметры и формулу для расчета оценки, этот работа еще ведется.
Да, Linux Deploy в обычном режиме использует chroot, может быть в будущем появится поддержка и LXC…
Однако в статье описан способ использования контейнеров без прав суперпользователя, LXC или chroot здесь не подойдут.