Как стать автором
Обновить

Комментарии 9

Не совсем понял, зачем явно проверять работу контейнера?

Чтобы не потерять данные - достаточно подмонтировать volume, в котором mongo хранит свои данные.

Если у контейнера фиксирован порт - тогда первый запущенный экземпляр сразу процент экземпляр данные, если они уже есть, а второй - всё равно не запустится, т.к. порт будет занят.

Да и вообще mongo для хранения "ключ:строка" - какой-то оверкилл, хватит и SQLite.

Также не раскрыта тема бекапов...

docker — не моя сильная сторона… не отрицаю, что есть способы сделать деплой оптимальнее. Про бэкапы — интересный вопрос, возможно, я копну глубже в эту сторону в следующих публикациях :)
А vosk сервер у вас как запущен? сами конфигурировали для использования русскоязычной модели?
для описания всех запущенных процессов можно использовать docker-compose.yml: ваш python-бот + монго + caldi
vosk объект загружается в оперативную память из файла — модели, русскоязычная модель готова к применению «из коробки» и доступна из официального источника

круто!!! молодец! задумка отличная

Я как-то надиктовал VOSK'у целую статью. Распознанный результат выглядел как бред сумасшедшего, но я, как автор, по итогу смог понять основные мысли, о чем говорилось в том или ином абзаце. Как у вас с качеством?

Если напрягаться и стараться говорить четко и медленно, то почти всегда 100% качество распознавания. Если говорить как при обычном общении, то в тексте будут проскакивать не те слова, которые я говорил. И ещё фоновый шум влияет на качество распознавания

В коде примеров автора проекта данные считываются понемногу:

while True:
    data = wf.readframes(4000)
    if len(data) == 0:
        break
    if rec.AcceptWaveform(data):
        print(rec.Result())
    else:
        print(rec.PartialResult())


В серверной реализации тоже.

В Telegram канале по распознаванию речи высказывали мнение, что не нужно подавать больше секунды звука за раз, однако, мне неизвестно четкое объяснение почему именно так.

Не удалось найти в документации описание метода AcceptWaveform, но для себя имею такое пояснение: «AcceptWaveform возвращает true, когда обнаружена тишина и данные могут быть получены через метод Result. Если тишина не обнаружена, частичные данные можно получить через метод PartialResult. Вызов метода FinalResult сбрасывает внутреннее состояние объекта и возвращает оставшийся результат».

Вызов FinalResult вместо Result, если AcceptWaveform вернул положительный результат иногда помогает получить более точное распознавание, если, например, за громкой длинной фразой следует короткая тихая фраза. В таких случаях Result может вернуть только первую фразу, даже если между двумя фразами и после последней фразы есть тишина.

Спасибо за пояснения!

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.