← Назад к проектам

Production-проект

Voice Translator

Production RU ↔ EN push-to-talk переводчик речи, который вырос из простого speech pipeline в инженерную лабораторию с выбором решений на основе benchmark-данных.

Тип

Приложение для голосового перевода

Основной фокус

Speech pipeline, benchmark-тестирование и realtime-доставка

Статус

v1.0.0

01 / Проект

Проект

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

Когда базовый pipeline speech-to-text → translation → text-to-speech уже заработал, главный вопрос изменился. Нужно было понять не то, можно ли вообще собрать голосовой перевод, а какая технология достаточно точна и быстра для практического общения почти в реальном времени.

Этот вопрос превратил разработку функциональности в R&D-задачу с контролируемыми аудиозаписями, несколькими speech-провайдерами, повторяемыми benchmark-тестами, измерениями в браузере и в итоге production demo.

Поворотный момент

Кот, который запустил R&D-отдел

Один из самых важных тестов был связан с моим котом Персиком. Русскую фразу «Кот Персик рыжий хулиган» Google распознал как «Код Персик рыжий хулиган». Ошибка была вполне логичной: в русском языке конечные согласные в словах «кот» и «код» без достаточного контекста могут звучать почти одинаково.

После добавления контекста распознавание стало правильным. Этот небольшой эксперимент изменил направление проекта: вместо вопроса, работает ли speech recognition вообще, я начал выяснять, какая speech-технология действительно достаточно хороша для почти realtime RU ↔ EN общения.

Первый тест

Кот Персик рыжий хулиган.

↓

Код Персик рыжий хулиган.

С дополнительным контекстом

У меня есть кот Персик, он рыжий хулиган.

Распознано правильно

Позже в pipeline

Персик

↓

Peach

Персик показал два разных класса ошибок: speech recognition может неверно распознать слово, а даже правильная транскрипция всё равно может быть переведена неправильно. Поэтому проект в итоге начал оценивать весь pipeline, а не доверять одному удачному API-ответу.

02 / Production Pipeline

От речи до переведённого голоса

Production-процесс разделён на измеряемые этапы, чтобы распознавание, перевод, синтез речи и доставку результата можно было оценивать отдельно.

01 / Ввод

Push-to-talk запись

Браузер записывает короткий WebM-аудиофрагмент. Явные кнопки Start и Stop делают модель общения предсказуемой и позволяют сосредоточиться на надёжном переводе, не выдавая систему за готовый full-duplex simultaneous interpreter.

02 / Speech-to-text

Streaming-распознавание речи

Для русского и английского используются разные Google Chirp 3 streaming-профили, выбранные по результатам benchmark-тестов, вместо одной универсальной конфигурации для обоих языков.

03 / Перевод

Перевод через DeepL

Распознанный текст переводится между русским и английским. Этап перевода benchmark-тестировался отдельно, потому что правильная транскрипция ещё не гарантирует правильный смысл.

04 / Голосовой результат

OpenAI streaming TTS

Переведённый текст преобразуется обратно в речь и возвращается в браузер, где реальное начало воспроизведения становится частью измерения задержки, которую ощущает пользователь.

Выбранные production-профили

Русский ввод → Chirp 3 Streaming STANDARD → DeepL → OpenAI TTS. Английский ввод → Chirp 3 Streaming SHORT → DeepL → OpenAI TTS.

03 / Инженерная лаборатория

От CLI-бенчмарков до лаборатории в браузере

Benchmark-система начиналась как набор command-line инструментов и выросла в браузерную Live Pipeline Lab, где одну и ту же запись можно прогнать через несколько полных профилей.

Контролируемый ввод

Одна запись, несколько моделей

Один и тот же WebM-аудиофайл повторно используется для разных профилей, поэтому сравнение не зависит от того, как человек повторно произнёс ту же самую фразу.

Профили

Разные стратегии pipeline

Batch Chirp 3, Streaming STANDARD, Streaming SHORT и Deepgram Flux можно сравнивать при одинаковых этапах перевода и TTS.

Измерения

Stage и end-to-end timing

Lab измеряет STT, перевод, TTS, готовность аудио и фактическое начало playback в браузере, а не сводит весь пользовательский опыт к длительности одного provider request.

Сохранение

Результаты запусков сохраняются

Транскрипции, переводы, временные метрики, оценки качества и история запусков сохраняются для последующего анализа и сравнения профилей.

Инженерная лаборатория Voice Translator с завершённым pipeline run, транскрипцией, переводом и временными метриками.

04 / Benchmarking

Измерять смысл, а не только слова

В benchmark-тестах использовались контролируемые записи с логистическими фразами, а качество оценивалось по сохранению критически важных элементов. Потерять артикль и превратить 15 в 50, изменить номер грузовика, пункт назначения, температуру или рабочую инструкцию — совсем не одно и то же.

Лучшее измеренное качество RU

93.33%

RU STANDARD STOP → audio

1701 ms

EN SHORT STOP → audio

1677 ms

Профиль Качество RU Качество EN RU STOP → audio EN STOP → audio
Batch Chirp 3 93.33% 90.63% 2104 ms 1982 ms
Streaming STANDARD 93.33% 90.63% 1701 ms 1850 ms
Streaming SHORT 90.00% 90.63% 1315 ms 1677 ms
Deepgram Flux 86.67% 78.13% 1236 ms 1279 ms

Инженерное решение

Для русского оставлен Streaming STANDARD, потому что он сохранил лучшее измеренное качество 93.33% и при этом уменьшил задержку по сравнению с batch-распознаванием. Для английского выбран Streaming SHORT, потому что он сохранил те же 90.63% качества, что и STANDARD, но уменьшил как время распознавания, так и полную задержку STOP-to-audio.

Сравнение Voice Translator Lab с результатами качества и задержки нескольких speech recognition профилей.

05 / Публичное demo

Lab гибкая. Интернет — нет.

Публичный интерфейс использует настоящий переводческий pipeline, но намеренно убирает большинство экспериментальных настроек. Доверенную конфигурацию контролирует сервер, а не браузер.

Сессия

Короткоживущий одноразовый token

Перед открытием WebSocket pipeline браузер запрашивает короткоживущую demo-сессию. Backend проверяет исходный язык, выбирает настроенный профиль, резервирует квоту и выдаёт одноразовый token.

Ограничения

Публичные записи до 15 секунд

Сервер ограничивает длительность записи и размер аудио, а также применяет visitor, IP и global quotas, чтобы demo не превратилось в бесплатный безлимитный speech API proxy.

Граница доверия

Pipeline выбирается сервером

Публичный клиент не может произвольно выбирать provider, экспериментальный профиль или доверенную source-конфигурацию. Эти решения остаются на стороне сервера.

Управление

Kill switch и закрытая Lab

Публичное demo можно полностью отключить отдельно, а экспериментальная Live Lab остаётся независимо защищённой от публичного production-доступа.

Desktop-интерфейс Voice Translator с русскими и английскими push-to-talk элементами управления.
Мобильный интерфейс Voice Translator.

06 / Production и deployment

Production — это уже другой вид животного

Когда pipeline и Lab стабильно заработали локально, проект был развёрнут как отдельные production-сервисы, а не оставлен коллекцией впечатляющих терминальных окон.

Хостинг

Deployment на Railway

Production-система работает на Railway с отдельными сервисами для Laravel web-приложения, WebSocket pipeline server и MySQL.

Realtime

Отдельный WebSocket pipeline

WebSocket-сервис обрабатывает live audio независимо от обычных web-запросов и создания публичных demo-сессий.

Runtime

PHP-контейнер для speech stack

Production runtime на PHP 8.4 содержит расширения, необходимые speech stack, включая gRPC, protobuf, intl, pcntl и поддержку MySQL.

Credentials

Секреты, пригодные для cloud deployment

Provider secrets хранятся в environment-конфигурации. Google service-account credentials в production передаются как JSON, без зависимости от локально примонтированного файла.

Домен

voice.kotov.lt

Публичное RU ↔ EN demo доступно через отдельный HTTPS production-поддомен.

Качество

Автоматизированная проверка проекта

Перед release проект проверяется тестами, PHPStan, Laravel Pint и production frontend build.

Production setup

Laravel, Railway, MySQL, отдельный WebSocket-сервис, Google Speech-to-Text, DeepL, OpenAI TTS, HTTPS и собственный домен.

07 / Текущие ограничения

Что v1.0.0 не притворяется уже решившей

Проект явно показывает свои текущие границы и не выдаёт production push-to-talk demo за законченную систему simultaneous interpretation.

Общение работает по принципу push-to-talk, а не как full-duplex simultaneous translation.

Текущее публичное demo ориентировано на RU ↔ EN; литовский остаётся следующим возможным языковым расширением.

Качество и задержка по-прежнему зависят от сети и внешних cloud providers.

Передача переведённой речи напрямую между двумя отдельными компьютерами или в conferencing software остаётся будущим этапом за пределами текущего portfolio demo.

08 / Technology Stack

Технологический стек

Проект объединяет Laravel-приложение, запись аудио в браузере, realtime-коммуникацию, сохраняемые benchmark-данные и специализированные speech и language providers.

Приложение

PHP 8.4

Laravel 13

Blade

Vite

Речь и перевод

Google Speech-to-Text

DeepL

OpenAI TTS

WebM audio

Данные и realtime

MySQL

WebSockets

Persisted Lab runs

Browser timing metrics

Инженерия

Docker

Laravel Sail

PHPStan

Laravel Pint

CI

09 / Результат

Что демонстрирует этот проект

Voice Translator демонстрирует больше, чем соединение нескольких AI API. В проекте используются контролируемые записи, оценка сохранения критически важных элементов и end-to-end измерения, чтобы понять, как разные pipeline-решения влияют и на точность, и на задержку, которую реально ощущает пользователь.

Проект также показывает путь от случайной проблемы распознавания речи с котом до повторяемого R&D-процесса, инженерной Lab в браузере и в итоге контролируемого production-приложения с явными границами доверия и защитой публичного доступа.

Streaming-обработка речи

Контролируемая benchmark-методика

Сохранение критически важных элементов

End-to-end измерение задержки

Сравнение providers и pipeline

Production deployment и защитные ограничения