Домовой (sh-goblin)
Программа работает исключительно в системе linux, поскольку требует установленных библиотек FFMPEG и, опционально, CMU PocketSphinx.
Представляет собой консольную утилиту (запускаемую в качестве демона), работающую без предустановленных библиотек графической среды. Что позволяет использовать ее на минимальных или серверных сборках ОС.
Типы поддерживаемых клиентских протоколов
$ ./sh-goblin Hobgoblin. Supported modes: 1 RS232RS485Connector 3 RS485DirectConnector 4 ftpConnector 5 clientConnector 10 webConnector 11 networkChecker 12 SNMPConnector
Для аппаратных платформ с GPIO включаются дополнительные типы соединений, учитывающие их специфику. А так же, протокол обмена данными по 1-wire сетям.
Соединение clientConnector, кроме сбора информации с датчиков компьютера и управления оным, запускает механизмы обслуживания источников видео и звука (для CMU PocketSphinx). Привязка мультимедиа к управляемому клиенту необходима для манипуляции встроенным "видеорегистратором" и обслуживания виртуальных датчиков голосовых команд.
Базовые настройки сервиса
Содержатся в файле
Настройки соединения с сервером системы
[DBC] url=http://login:password@server:port/ read_interval=250 io_timeout=1000
Url соединения с сервером имеет стандартную нотацию. Где логин и пароль относятся к учетной записи робота в системе телеметрии.
Интервал обращений к серверу позволяет менять нагрузку на сеть и скорость реакции сервиса на команды, поступающие из главной БД. На скорость отправки данных этот параметр влияния не оказывает.
Управление предельным временем соединения ликвидирует "фризы" системы в случае провалов в связи.
Подсистемы вывода текстов
[speaker] ;text2wave= folder=/var/my_sounds player=/usr/bin/aplay ;tmp=/tmp/spk_out.txt
Программа ориентирована на внешние обработчики текстовых оповещений, которые могут выводить сообщения на устройства печати, звук, монитор или иные средства. В ее обязаности входит лишь прием данных от сервера и выполнение двух команд: предобработки (преобразования текста) и его последующего воспроизведения. Это разделение сделано для обслуживания макросов в текстах - если в тексте присутствует отсылка к дате или времени, результаты преобразования будут автоматически удалены после его воспроизведения. В противном случае, для снижения нагрузки на процессор, звуковой файл будет сохранен для повторного использования.
Параметр text2wave содержит полный путь к скрипту преобразования текста.
По умолчанию, программа при старте ищет скрипт
#!/bin/sh /usr/bin/espeak -v ru -f $1 -w $2
Основные настройки clientConnector
[sensors] ;list=/etc/sh-sensors.ini ; файл списка сенсоров read_interval=10 ; пауза чтения датчиков в секундах [cameras] list=/etc/sh-hobgoblin-inputs.ini input_format=mjpeg video_size=1280x720 video_fps=5 audio_channels=1 audio_sample_rate=8000 reconnect=60000 [nvr] folder=/var/my_nvr [speech] ;grammar= ;dictionary= codepage=1251 keyword=нафаня
Настройки устройств ввода видео, кроме списка камер, содержат рекомендации для подсистемы video4linux, обслуживающей локальные (не сетевые) источники.
Параметр reconnect указывает время в миллисекундах, через которое программа производит проверку наличия сигнала от камер и выполняет повторное подключение, по мере необходимости. Так же, при повторной проверке, осуществляется чтение списка камер и они могут перенастраиваться в случае необходимости.
Настройка распознавания речи включает: пути к словарям и шаблонам фраз, кодовую страницу для передачи текстов в ASCII формате и ключевое слово ("имя" робота), служащее началом фразы.
Источники видео и звука
Постоянно подключенные к программе перечисляются в файле
Список камер включает следующие настройки:
[alsa] path=alsa<<hw:CARD=Camera,DEV=0 sensor=100 speech=1 threshold=-10000 export=0 [/dev/video0] sensor=0 [rtsp://usr:pass@192.168.0.23/live1.sdp] sensor=1 ext=avi muxer=mjpeg [/dev/videoX] path=http://10.20.0.1:9981/play/stream/channelid/912397428 sensor=2 ext=mpg muxer=mpegts
Минимальная настройка камеры включает ее описание в системе телеметрии (которое может совпадать с ее источником).
Вторым по важности параметром является номер сенсора, к которому система будет апеллировать при получении обработанных данных или запросе на запись.
Логический параметр speech указывает на необходимость распознавания команд в звуковом потоке.
Параметры ext и muxer описывают требования к формату записи в nvr.
Управление clientConnector
Базовый функционал модуля расширен на управление видео камерами, включающее их принудительную остановку, повторный запуск и запись по команде.
Проверка состояния и перезапуск камер
Производится по команде "r", переданной сервером. Выполняет проверку времени прихода последнего фрейма данных со всех камер и перезапускает те камеры, которые "молчат" длительное время.
Полная перезагрузка мультимедиа
Получив сигнал "R" от сервера, программа сбрасывает все подключения к источникам мультимедиа и перегружает библиотеки FFMPEG и v4l. После чего, производит повторный запуск всех соединений с видео и аудио устройствами.
Остановка обслуживания звука и изображения
По команде "S" программа закрывает все соединения с мультимедийными устройствами и ждет дальнейших команд частичного или полного сброса.
Запись видео
Для начала записи по выбранному каналу сервер должен передать команду "o" с номером мультимедийного сенсора (один байт) и требуемой длительностью записи в секундах (два байта). При наличии подключения к камере, программа сформирует дамп видео потока в подпапке со своим номером в каталоге nvr.
Если в течении записи видео поступит новая команда для той же камеры, она будет продолжена от текущего момента на время, переданое в инструкции. Если это время будет указано как 0, запись будет прекращена немедленно.