Домовой (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). Привязка мультимедиа к управляемому клиенту необходима для манипуляции встроенным "видеорегистратором" и обслуживания виртуальных датчиков голосовых команд.

Базовые настройки сервиса

Содержатся в файле /etc/sh-hobgoblin.ini или могут быть переопределены с помощью опции -c [--config] при запуске программы.

Настройки соединения с сервером системы

[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 содержит полный путь к скрипту преобразования текста. По умолчанию, программа при старте ищет скрипт sh-text-to-wave, который может иметь вид:

#!/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 формате и ключевое слово ("имя" робота), служащее началом фразы.

Источники видео и звука

Постоянно подключенные к программе перечисляются в файле /etc/sh-hobgoblin-inputs.ini. Запросы от сервера на обработку jpeg изображений с IP камер обслуживаются автоматически, без предварительных настроек.

Список камер включает следующие настройки:

[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, запись будет прекращена немедленно.