LINUX.ORG.RU

Speech to text

 


6

2

Кто имеет опыт работы с новыми средствами для распознавания речи? Что порекомендуете на десктопную машину без CUDA/OpenCL? Свободное или бесплатное. Английский, русский, французский, украинский, испанский. Скорость распознавания хотя бы 1:1.

P.S. Превращать в текст звуковые файлы.

Ответ: Vosk вполне устраивает.

★★★★★

Последнее исправление: question4 (всего исправлений: 2)

Звуковые файлы https://docs.kdenlive.org/en/effects_and_filters/speech_to_text.html (смотрю, pip3 install vosk перетащили в venv)
Диктовка https://wiki.mageia.org/en/Voice_recognition (Elograf)
Диктовка + управление PC https://www.mageialinux-online.org/forum/topic-31752-nocomprendo.php (чел пилит тоже на базе vosk)

netrium
()
Ответ на: комментарий от netrium

https://docs.kdenlive.org/en/effects_and_filters/speech_to_text.html

Спасибо, годится. 81-секундное видео Vosk обработал за 71 секунду.

(смотрю, pip3 install vosk перетащили в venv)

Можно и без venv. Не стал пробовать.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

81-секундное видео Vosk обработал за 71 секунду

Это с большой моделью или маленькой? В принцице, и small неплохо распознаёт.

Кстати, если кто захочет завести Elograf на других дистрах (тоже полезная вещь), вам может пригодиться это обсуждение:
https://github.com/papoteur-mga/elograf/issues/17
setxkbmap для русского использовать не надо, зато надо в ~/.local/lib/python3.10/site-packages/eloGraf/elograf.py удалить строчку с --continuous, чтобы после перерыва добавлялись пробелы, а не лепился текст.
nerd-dictation клонируется отсюда https://github.com/ideasman42/nerd-dictation
Одноимённый скрипт вроде надо закинуть в PATH. Я тоже ставил в virtualenv. Там пришлось немного поколдовать с ярлыком запуска.

netrium
()
pip3 install gtts &&

from gtts import gTTS

text = "Добро пожаловать в мир Python!"
language = "ru"
filename = "welcome.mp3"

tts = gTTS(text=text, lang=language)
tts.save(filename)

  • Просто как запустить, впн из браузёра. Справится любой школьник.
anonymous
()
Ответ на: комментарий от question4

Остановился на уже упомянутом мной nerd-dictation.

Работает корявенько, быстро большой объем текста не наговорить, рус и анг подружить непросто, но мне после перехода на qmk-клавиатуру, как раз.

Вот кусок связанного дотфайла

bind = SUPER, z, exec, cd ~/Apps/nerd-dictation && ./nerd-dictation begin --vosk-model-dir=./model/vosk-small-ru --simulate-input-tool=WTYPE
bind = SUPER SHIFT, z, exec, cd ~/Apps/nerd-dictation && ./nerd-dictation begin --vosk-model-dir=./model/vosk-small-en --simulate-input-tool=WTYPE
bind = SUPER, x, exec, ~/Apps/nerd-dictation/nerd-dictation end

hargard ★★
()
Ответ на: комментарий от einhander

whisper.cpp https://github.com/ggerganov/whisper.cpp

Тянет Tensorflow? Я когда-то пробовал TTS на Tensorflow, и скорость без GPU меня не устроила (звуковой файл генерировался в полтора-два раза дольше, чем проигрывался).

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Cpp же, какое тензорфлоу? Тянет компилятор для cpp. На современном цпу 1:1 где-то будет, но различные варианты ускорения доступны, в том числе и на цпу. Пробуй, места практически не занимает. Нейронки на cpp хорошая штука, жаль их мало.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 1)
Ответ на: комментарий от einhander

Cpp же, какое тензорфлоу?

Как будто есть какая-то сложность в использовании тензорфлоу из с++. Другое дело, что у автора whisper.cpp есть своя библиотека ggml, которую он вместо tensorflow использует.

annulen ★★★★★
()
Ответ на: комментарий от einhander

Cpp же, какое тензорфлоу?

Числодробильная часть тензорфлоу тоже на C++.

Из описания, я понял, что whisper.cpp — порт whisper на C++, про зависимости ничего не говорилось, поэтому я предположил, что те же. Tensorflow и из программ на C++ дёргать можно.

Тогда попробую как-нибудь.

question4 ★★★★★
() автор топика
21 декабря 2024 г.
Ответ на: комментарий от question4

Whisper.cpp потребовал конвертировать файл в 16-кГц WAV (сам не умеет), и думал над ним 60 секунд (заняв 4 ядра). Угадывание языка не сработало, превратил русский текст в грамматически правильный английский с 1 русским словом. С явным указанием языка отработал лучше vosk — расставил знаки препинания и большие буквы. Модель large-v3-turbo-q8_0.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от question4

Whisper.cpp потребовал конвертировать файл в 16-кГц WAV (сам не умеет)

В PR#2133 добавили встроенную поддержку ffmpeg (ключ CMake -DWHISPER_FFMPEG=ON), но для ffmpeg < 7.0. Я там написал об этой ошибке сборки, но автор PR молчит.

dataman ★★★★★
()
Ответ на: комментарий от dataman

В PR#2133 добавили встроенную поддержку ffmpeg (ключ CMake -DWHISPER_FFMPEG=ON), но для ffmpeg < 7.0. Я там написал об этой ошибке сборки, но автор PR молчит.

У меня 6.1.1, но по умолчанию не включилось. Закончится распознавание — попробую пересобрать.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

Для 97-минутного фильма:
С попыткой расписать реплики и сохранить в 2 формата (TXT и SRT):

$ time ./main -m ../models/ggml-large-v3-turbo-q8_0.bin -di -l en -of spooner2 -otxt  -pp -osrt out.wav 
...
real    357m23,550s
user    1248m31,348s
sys     28m2,493s

В итоге почти всем репликам приписало «speaker 1», несколько штук «speaker ?».

Без реплик и только SRT:

$ time ./main -m ../models/ggml-large-v3-turbo-q8_0.bin  -l en -of spooner-w -pp -osrt out.wav
...
real    308m24,085s
user    1230m56,615s
sys     0m14,696s

Для сравнения vosk с моделью vosk-model-en-us-0.42-gigaspeech:

$ time vosk-transcriber -i out.wav -l en -t srt -o spooner-v
...
real    101m46,186s
user    101m33,774s
sys     0m16,450s

Получается, на больших файлах (полтора часа, ~70k текста) средняя скорость снижается. vosk остаётся близок к 1:1, но whisper проседает до 1:3.

Но whisper лучше распознаёт. Хотя странно себя ведёт на фрагментах со звуком без речи (инструментальная музыка, шум толпы). Если vosk пытается вычленить звуки похожие на междометия (что бесполезно, но логично), whisper многократно повторяет последнюю членораздельную фразу (что странно).

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от Obezyan

И тогда вопрос специалистам по Whisper: как его заставить в многоязычном файле писать тексты на тех языках, на которых их произносят, без перевода. Пример: https://t.me/dfzwe4/65269

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

И тогда вопрос специалистам по Whisper: как его заставить в многоязычном файле писать тексты на тех языках, на которых их произносят, без перевода

Я не специалист по STT, но насколько я помню у whisper.cpp был параметр командной строки --translate, если его не указывать то токены не должны переводиться. Возможно потребуется дополнительно указать --language auto.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 2)
Ответ на: комментарий от dataman

В PR#2133 добавили встроенную поддержку ffmpeg (ключ CMake -DWHISPER_FFMPEG=ON),

Попробовал на mp4 — x264+aac. Долго сыпало в консоль ошибки, в итоге распознало 1 строку из ~20.

И автоматически переводит на английский, даже когда в настройках false.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)

Ещё одна проблема с vosk: при большой нагрузке (2 процесса vosk, vosk параллельно с hugin…) система виснет. Работа vosk останавливается, иксы ни на что не реагируют, но всё остальное работать продолжает (один раз наблюдал копирование файлов на телефон). Ctrl-Alt-F* не работают. Переключение раскладок, судя по светодиодам, работает. Ctrl-Alt-BkSp не работает много лет, спасибо svu. Magic SysRq сработала.

Возможно, проблема в обращении к GPU. Как его заблокировать?

question4 ★★★★★
() автор топика
Ответ на: комментарий от Obezyan

Я не специалист по STT, но насколько я помню у whisper.cpp был параметр командной строки --translate, если его не указывать то токены не должны переводиться.

Не указываю, но всё равно переводится. Если с самыми большими моделями. С меньшими не переводится, но там и распознаётся плохо.

Возможно потребуется дополнительно указать --language auto.

Иногда помогает, иногда нет.

Написал в багтрекер, жду ответа.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

Не указываю, но всё равно переводится. Если с самыми большими моделями. С меньшими не переводится, но там и распознаётся плохо.

Это похоже на приколы .cpp версии. Оригинальная open-ai whisper так себя не ведет.

praseodim ★★★★★
()