Откуда появилась идея создания приложения
На смартфонах большинство из нас пользуются различными мессенджерами, мы делаем заметки, иногда пишем тексты и многие делают это, используя голосовой ввод. При этом в смартфоне речь распознаётся в режиме реального времени и вставляется в нужное место в виде текста. Лично мне это очень нравится. Это максимально удобно в поездках, по пути на работу. Я этой функцией пользуюсь регулярно, при условии, что это не мешает окружающим. Мне давно хотелось иметь подобную функцию на компьютере, при этом желательно, чтобы она работала вне зависимости, есть ли у меня доступ к интернету или нет. Голосовой ввод от Майкрософта, к сожалению, на русском языке не работает. Сторонних программ, которые бы позволяли транскрибировать речь и вставлять результат в любое поле, любого приложения, тоже не нашёл. В результате я решил попробовать написать свою программу, которая бы закрыла этот вопрос.
Требования к будущей программе:
- ПО должно работать на старом и новом железе.
- ПО должно работать в локальном режиме.
- За основу для транскрибации должно браться стороннее ПО с открытым исходным кодом и доступной лицензией. Так же это ПО должно иметь API или же запускаться в консольном режиме с параметрами. А еще желательно, чтобы это ПО также могло восстанавливать пунктуацию.
- Насколько мне известно вставка в текущее поле любого приложения не всегда возможна, из-за фундаментальных ограничений безопасности ОС. В связи с этим необходимо свести к минимуму проблемы со вставкой текста в текущее окно.
Что взял за основу для создания своего приложения.
Изучив текущий рынок подобного программного обеспечения пришёл к выводу, что за основу необходимо взять локальный ИИ для транскрибации текста. Мой выбор пал на модели VOSK, так как они удовлетворяют всем требованиям к разрабатываемому программному обеспечению.
Кратко о VOSK
VOSK - библиотека для распознавания речи.
Преимущества библиотеки:
- Поддерживает 20+ языков и диалектов - русский, английский, немецкий, французский, португальский, испанский, китайский и пр.
- Работает без доступа к сети даже на мобильных устройствах - Raspberry Pi, Android, iOS
- Модели для каждого языка занимают всего 50Мб, но есть и большие модели для более точного распознавания
- Сделана для потоковой обработки звука, что позволяет реализовать мгновенную реакцию на команды
- Поддерживает несколько популярных языков программирования - Java, C#, Javascript
- Позволяет быстро настраивать словарь распознавания для улучшения точности распознавания
- Позволяет идентифицировать говорящего
Сравнение моделей по транскрибации речи.
Если интересно, то есть таблица протестированных доступных моделей для распознавания русской речи на различных наборах данных. Посмотреть можно по этой ссылке..
Результаты сравнения моделей взяты с этого же сайта и перечислены ниже:
- Nemo RNNT очень быстрый и довольно точный
- Vosk начитанный и быстрый.
- Whisper не очень хорошо работает для русского и его тяжело дообучить. Тем не менее на Silero он дообучился.
- Whisper медленный, но даже на старой карте вполне удовлетворительный. Когда-то давно 10xRT считалось хорошей скоростью распознавания.
- Wav2Vec переобучен на CommonVoice, в целом модель не очень хороша. Имеет смысл попробовать его с другой моделью языка, может будет получше.
Кратко о процессе создания программы
В качестве языка разработки был выбран Python (я на нем периодически пишу для себя программы и различные скрипты по автоматизации рутинных задач).
Самой сложной задачей в процессе разработки была, наверное, вставка текста в текущее поле на экране. В процессе разработки было опробовано много вариантов решения этой задачи. К сожалению, универсального кроссплатформенного решения я не нашёл, поэтому текущая версия программы под Windows. Если программа вызовет интерес у пользователей, то возможно, сделаю поддержку Linux.
Замечу, что в клиент - серверном варианте на сервере появляется консольное окно, помимо иконки в трее. Данное решение было обосновано тем, чтобы пользователь видел процесс загрузки приложения. Этот процесс может занимает довольно много времени и на старом железе пользователи могут не понимать, почему не работает приложение.
Отдельного окошка по настройке приложения делать пока не стал (добавлю в будущих версиях). Вся информация по смене сочетания клавиш записи речи и выбора сервера содержится в конфигурационном файле.
Что я сделал
В процессе работы появился SimpleVoiceInput.
SimpleVoiceInput — два приложения для транскрибации русской речи в реальном времени, которые работают либо на локальном компьютере, либо в локальной сети, гарантируя полную конфиденциальность вашей информации. Эти решения идеально подходят для пользователей 1С и всех, кто работает с текстами, но не хочет рисковать утечкой данных.
Что предлагает SimpleVoiceInput?
Мои приложения используют передовые технологии распознавания речи на основе моделей VOSK. Они просты в использовании, не требуют интеграции с 1С и работают почти на любом компьютере. Вы можете выбрать решение, которое лучше всего подходит для ваших задач.
1. Локальное приложение
Это приложение работает исключительно на вашем компьютере и использует младшую модель VOSK, которая обеспечивает быструю и точную транскрибацию текста. Оно идеально подходит для задач, где не требуется восстановление пунктуации и регистра.
Преимущества:
- Работает полностью автономно на вашем компьютере.
- Простота установки и использования.
- Автоматическая вставка текста в текущее место на экране.
- Подходит для любых задач, не только для работы с 1С.
2. Клиент-серверное приложение
Это решение работает в локальной сети и состоит из легкого клиента на вашем компьютере и серверной части, которая использует несколько моделей VOSK. Первая модель отвечает за транскрибацию, а вторая — за восстановление пунктуации и регистра текста, что делает результат максимально точным и читаемым.
Особенности серверной части:
- Серверная часть может быть установлена на локальный компьютер, но для ее работы потребуется не менее 8 ГБ оперативной памяти и современное железо.
- При запуске серверной части происходит загрузка моделей VOSK в память, что может занять от 20 секунд до нескольких минут. Однако после загрузки скорость транскрибации остается высокой и стабильной.
- Клиентская часть работает быстро и не требует значительных ресурсов, так как основная нагрузка ложится на сервер.
Преимущества:
- Высокая точность благодаря использованию нескольких моделей.
- Работает в локальной сети, обеспечивая безопасность данных.
- Минимальная нагрузка на ваш компьютер благодаря легкому клиенту.
- Автоматическая вставка текста в текущее место на экране.
- Подходит для любых задач, не только для работы с 1С.
Как работает SimpleVoiceInput?
Использование приложений максимально простое:
- Нажмите и удерживайте заданное сочетание клавиш (например, Ctrl + Shift + X).
- На экране появится пиктограмма записи — начинайте наговаривать текст.
- Отпустите сочетание клавиш, и текст автоматически вставится в текущее место на экране.
Важно: Сочетание клавиш можно изменить в конфигурационном файле.
Почему SimpleVoiceInput?
- Безопасность: Локальное приложение работает автономно, а клиент-серверное — в локальной сети, что исключает риск утечки конфиденциальных данных.
- Простота: Никаких сложных настроек или интеграций с 1С. Приложения готовы к использованию сразу после установки.
- Универсальность: Подходят для любых задач, по голосовому вводу.
- Экономия времени: Транскрибация в реальном времени позволяет вам сосредоточиться на важных задачах, не отвлекаясь на ручной ввод текста.
Кому это будет полезно?
- Пользователи 1С: Ускорьте ввод данных и снизьте количество ошибок без необходимости доработок в 1С.
- Специалисты по документации: Наговаривайте текст и автоматически вставляйте в нужные документы.
- Все, кто работает с текстами: SimpleVoiceInput подходит для любых задач, где требуется быстрая и точная транскрибация речи.
Как начать?
Если вы используете локальное решение:
- Создайте каталог, полный путь которого не будет содержать кириллицы. (Например, "C:\InputText\".)
- Скачайте и распакуйте SimpleVoiceInput в данный каталог.
- Запустите файл "SimpleVoiceInput.exe"
Если вы используете клиент-серверный вариант:
- Распаковываем скачанный архив.
- Внутри архива видим 2 папки: "SimpleVoiceInputClient" и "SimpleVoiceInputServer"
- На сервере:
- Копируем каталог "SimpleVoiceInputServer" на сервер. Полный путь к данному каталогу не должен содержать кириллицу.
- Качаем большую модель Vosk с официального сайта vosk-model-ru-0.42 и разархивируем её.
- Получаем папку "vosk-model-ru-0.42", содержащую подпапки и файлы. Данную папку копируем в "\SimpleVoiceInputServer\_internal\".
- Качаем модель пунктуации Vosk vosk-recasepunc-ru-0.22 и разархивируем её.
- Получаем папку "vosk-recasepunc-ru-0.22", содержащую файл "checkpoint". Копируем данный файл в "\SimpleVoiceInputServer\_internal\".
- В папке "\SimpleVoiceInputServer\_internal\" есть файл "config.json", в котором установлен порт соединения с сервером. По умолчанию порт "5050". Если необходимо меняем на свой. Порт на сервере должен быть открыт.
- Запускаем серверное приложение с помощью файла "SimpleVoiceInputServer.exe".
- На Клиенте
- В папке "SimpleVoiceInputClient" в подкаталоге "_internal" ищем и открываем файл "config.json".
- В файле "config.json" в строке "server_url": "http://127.0.0.1:5000" меняем IP адрес и порт, на адрес вашего сервера. Например, должно получиться "server_url": "http://192.168.20.171:5050", если порт не был изменен на сервере.
- Копируем "SimpleVoiceInputClient" на компьютеры пользователей.
- Запускаем приложение с помощью файла "SimpleVoiceInputClient.exe".
- Выделяем поле, зажимаем и удерживаем клавиши "Ctrl+Shift+X" и наговариваем текст. Результат увидим в данном поле.
- Копируем каталог "SimpleVoiceInputServer" на сервер. Полный путь к данному каталогу не должен содержать кириллицу.
- Качаем большую модель Vosk с официального сайта vosk-model-ru-0.42 и разархивируем её.
- Получаем папку "vosk-model-ru-0.42", содержащую подпапки и файлы. Данную папку копируем в "\SimpleVoiceInputServer\_internal\".
- Качаем модель пунктуации Vosk vosk-recasepunc-ru-0.22 и разархивируем её.
- Получаем папку "vosk-recasepunc-ru-0.22", содержащую файл "checkpoint". Копируем данный файл в "\SimpleVoiceInputServer\_internal\".
- В папке "\SimpleVoiceInputServer\_internal\" есть файл "config.json", в котором установлен порт соединения с сервером. По умолчанию порт "5050". Если необходимо меняем на свой. Порт на сервере должен быть открыт.
- Запускаем серверное приложение с помощью файла "SimpleVoiceInputServer.exe".
- В папке "SimpleVoiceInputClient" в подкаталоге "_internal" ищем и открываем файл "config.json".
- В файле "config.json" в строке "server_url": "http://127.0.0.1:5000" меняем IP адрес и порт, на адрес вашего сервера. Например, должно получиться "server_url": "http://192.168.20.171:5050", если порт не был изменен на сервере.
- Копируем "SimpleVoiceInputClient" на компьютеры пользователей.
- Запускаем приложение с помощью файла "SimpleVoiceInputClient.exe".
- Выделяем поле, зажимаем и удерживаем клавиши "Ctrl+Shift+X" и наговариваем текст. Результат увидим в данном поле.
Демонстрация работы программы :
Кому интересно, как устроена программа внутри, могут скачать и посмотреть исходник на python.
Все тесты проводились на Windows 10.
Ссылки на другие работы автора: