вторник, 2 сентября 2014 г.

Голосовой модуль управления HID-нагрузками (описание API вызова библиотеки VoiceControlHid.DLL)

Данная библиотека (далее DLL) предназначена для голосового управления любыми HID-устройствами по заданным VID/PID, с возможностью индивидуального задания голосовых команд на каждый из восьми каналов (в качестве теста использован гаджет uniUSB, схема и прошивка прилагаются). Работа библиотеки основана использовании сервиса GoogleSpeech Recognize через библиотеку GoogleSpeechRecognizeAPI3.DLL и последующей передачи команд HID-устройству через библиотеку HidOutEx.DLL разработки автора (по сути, VoiceControlHid.DLL является управляющей надстройкой над нижними уровнями HidOutEx.DLL и GoogleSpeechRecognizeAPI3.DLL). Распознавание осуществляется REALTIME в автоматическом режиме, по задаваемому пользователем пороговому уровню шума и задержке отслеживания окончания фразы (триггера "тишины").

Cистемные требования и зависимости:
  1. Win32/64 (NT/2003/XP/7/8).
  2. Требуется наличие Интернет-канала.
  3. Качественный микрофон или гарнитура/блютуз-гарнитура.
  4. Наличие HID-устройства для управления.
Схема электрическая принципиальная HID-гаджета на базе ATMega8:

 Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

Таблица расшифровок параметров экспортируемой функции StartStop() библиотеки 'VoiceControlHid.DLL':


Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5-7):
var startstop:function(p: integer): pansichar;stdcall;
    LibHandle: THandle;

function LinkProc(ProcName: string):Pointer;
begin
 result:= GetProcAddress(LibHandle, PChar(ProcName))
end;

{ инициализация }
LibHandle:= LoadLibrary('VoiceControlHid.dll');
 if LibHandle<>0 then begin
  startstop:= LinkProc('startstop');
  startstop(1)
end
...

{ деинициализация }
if LibHandle<>0 then startstop(0)
...
Пример использования через dynwrapX.dll в VBS:
Set Wrap = CreateObject("DynamicWrapperX")
' создаем объект WScript.Shell
Set WshShell = WScript.CreateObject("WScript.Shell")

Wrap.Register "VoiceControlHid.dll", "startstop", "i=l", "f=s", "r=l"
res = Wrap.startstop(1)

Do ' бесконечный цикл
' задержка на 1000 мс
wscript.sleep 1000
Loop
Пример использования в Excel (макроса в VBA):
Declare Function startstop Lib "VoiceControlHid.dll" (ByVal scan As Integer) As long

Sub TestMacros()
 startstop(1)
End Sub

// или по кнопке
Private Sub Command1_Click()
 startstop(1)
End Sub
Пример использования в VB:
Declare Function startstop Lib "VoiceControlHid.dll" (ByVal scan As Integer) As long

Private Sub Command1_Click()
 startstop(1)
End Sub
ПОРЯДОК ИСПОЛЬЗОВАНИЯ
  1. Подключите ваш микрофон или гарнитуру/блютуз-гарнитуру (используя аудио-шлюз) и убедитесь в его/ее работоспособности. Для корректной работы обязательно наличие Интернет-канала, качественного микрофона и HID-устройства для передачи команд.
  2. Извлеките содержимое архива (саму библиотеку 'VoiceControlHid.dll' и рабочую папку 'VoiceControlHid' в каталог по вашему выбору.
  3. Проведите регистрацию COM-сервера 'DynamicWrapperX' через batch-файл 'regdynwrapx.bat', если вы хотите использовать работу через VBS.
  4. Запустите скрипт 'test_VoiceControlHid.vbs' и установите HID-гаджет в слот USB.
  5. В момент запуска скрипта рядом с библиотекой появится (автосоздание) файл настроек 'VoiceControlHid.ini', вы можете в любой момент времени изменять следующие настройки во время работы:
Threshold_Level=20    - пороговый уровень срабатывания "триггера тишины" отслеживания начала фразы, %
Delay_Off=1000        - величина задержки отключения "триггера тишины" отслеживания конца фразы, мс
Lang=RU            - язык распознавания (жестко забит русский :))
1=1            - любая фраза/слово/цифра для контроля 1-м каналом (битом в байте) HID-гаджета
2=2            - любая фраза/слово/цифра для контроля 2-м каналом (битом в байте) HID-гаджета
3=3            - любая фраза/слово/цифра для контроля 3-м каналом (битом в байте) HID-гаджета
4=4            - любая фраза/слово/цифра для контроля 4-м каналом (битом в байте) HID-гаджета
5=5            - любая фраза/слово/цифра для контроля 5-м каналом (битом в байте) HID-гаджета
6=6            - любая фраза/слово/цифра для контроля 6-м каналом (битом в байте) HID-гаджета
7=7            - любая фраза/слово/цифра для контроля 7-м каналом (битом в байте) HID-гаджета
8=8            - любая фраза/слово/цифра для контроля 8-м каналом (битом в байте) HID-гаджета
HID_VID_HEX=0207    - идентификатор VID HID-гаджета в HEX
HID_PID_HEX=2010    - идентификатор PID HID-гаджета в HEX
Recognition=        - результат распознавания (лог плагина)
Видеодемонстрация


схема, прошивка и библиотека

Некоторые замечания
  1. Некоторые разработчики пытаются совместить две моих библиотеки 'GoogleTranslateAPI.DLL' и 'GoogleSpeechRecognizeAPI3.DLL' (библиотеки можно использовать хоть из Excel). Как следствие сталкиваются с необходимостью синхронизации потоков и остановки распознавания на время воспроизведения аудиопотока. Так вот, все это уже давно реализовано в библиотеке 'SpeechTranslateSpeech.DLL'. 
  2. При желании для автораспознавания вы можете использовать альтернативный сервис YANDEX-а и обертку над ним YandexSpeechRecognizeAPI.DLL
  3. Мини-FAQ. Распознавание и синтез речи  

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.