Skip to content

Speech voice input#255

Open
Egor18032019 wants to merge 7 commits into
processtech:masterfrom
Egor18032019:speech-voice-input
Open

Speech voice input#255
Egor18032019 wants to merge 7 commits into
processtech:masterfrom
Egor18032019:speech-voice-input

Conversation

@Egor18032019

Copy link
Copy Markdown

Краткое описание изменений

В рамках данного Pull Request добавлена функциональность голосового ввода (распознавания речи) в веб-интерфейсе RunaWFE.

Что сделано

1. Новые модули

  • wfe-speech-api – содержит интерфейс SpeechRecognitionService (контракт).
  • wfe-vosk – EJB-реализация интерфейса на основе библиотеки Vosk (офлайн-распознавание).

2. Сборка и зависимости

  • Обновлены pom.xml в wfe-app, wfe-ear, wfe-web.
  • wfe-web зависит от wfe-speech-api (всегда, scope compile).
  • wfe-vosk зависит от wfe-speech-api (scope compile) и реализует интерфейс.
  • В wfe-ear добавлены зависимости и секция ejbModule для wfe-vosk (порядок важен).
  • wfe-web компилируется всегда (интерфейс есть), реализация подтягивается только при активном профиле.

3. Настройки

  • В system.properties добавлены свойства:
    speech.recognition.enabled, vosk.model.path, vosk.recognizer.pool.size.
  • Добавлен settingsList.xml в wfe-vosk – настройки появляются в UI системы.
  • 💡 RunaWFE автоматически объединяет все settingsList.xml из META-INF/resources/ всех модулей при запуске.

4. Серверная часть

  • Сервлет SpeechRecognitionServlet (маппинг /api/speech/transcribe) принимает аудио, проверяет WAV-заголовок, извлекает PCM-данные и вызывает SpeechRecognitionService.
  • EJB-контейнер сам управляет жизненным циклом бина (создаёт экземпляры, пулирует их).

5. Клиентская часть (UI)

  • В компоненте GenerateHtmlForVariable для текстовых полей (TextFormat) добавлена кнопка с микрофоном и индикатор статуса.
  • JavaScript-модуль voice-input.js:
    • Запрашивает доступ к микрофону, записывает аудио (с автоостановкой).
    • Конвертирует запись в PCM/WAV (16 кГц, 16 бит, моно).
    • Отправляет на сервлет через fetch и вставляет распознанный текст.
  • Особенность работы в разных браузерах:
    • В Яндекс.Браузере (и других на Chromium с поддержкой Web Speech API) распознавание выполняется встроенными средствами браузера – без отправки на сервер.
    • В Firefox (и браузерах без Web Speech API) используется серверная модель Vosk.

6. Обновление web.xml

  • Добавлен маппинг сервлета на /api/speech/transcribe.

Результат

Пользователи могут заполнять текстовые поля формы голосом: запись обрабатывается либо локально браузером, либо на сервере через Vosk, распознанный текст автоматически подставляется в поле.

@Egor18032019

Copy link
Copy Markdown
Author

на POST | http://localhost:8080/wfe/api/speech/transcribe маппинг


vosk.recognizer.pool.size = 5
speech.recognition.enabled = true
vosk.model.path = D:\\GIT\\Java\\fre\\draft\\runawfe-free-server\\wfe-vosk\\model\\vosk-model-ru-0.42

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не нужно в файле по умолчанию писать такую специфику

как работать с настройками локально: https://runawfe.ru/ServerConfigurationGuide#Settings

@Egor18032019

Copy link
Copy Markdown
Author

Добавил фильтр на безопасность

Сделал что бы модель загружалась при старта сервера

Голосовой ввод (локальная разработка)

  1. Скачайте модель: https://alphacephei.com/vosk/models/vosk-model-ru-0.42.zip
  2. Распакуйте в wfe-vosk/model/
  3. Создайте на сервере файл с настройками модели, например по пути standalone/wfe.custom/wfe.custom.system.properties:


jwt.secret = e86a0fda661ad5bceaa8cb63b4cdb44f1494ac510ee4c84ca54d1e2b07efdce637d9cf67a0f8aae64711f93991d35b6040f581beaf678aa49298b296b7f69e8b

process.definition.diff.context.lines.count = 3 No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Удалил

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants