Реализация распознавания речи из аудиофайлов (Batch STT)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация распознавания речи из аудиофайлов (Batch STT)
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Реализация распознавания речи из аудиофайлов (Batch STT)

Batch STT обрабатывает заранее записанные файлы без требований к задержке — можно использовать самые качественные модели и выжать максимум точности. Типичная задача: архивная обработка записей колл-центра, транскрибация подкастов, создание субтитров к видеоконтенту.

Архитектура batch-пайплайна

Upload → S3/Local Storage → Queue (Celery/SQS) → Worker → STT → Post-Processing → Storage

Ключевые решения при проектировании:

  • Нарезка длинных файлов на сегменты по 5–10 минут (улучшает точность)
  • Параллельная обработка нескольких файлов
  • Retry-логика для сбойных задач
  • Хранение промежуточных результатов

Полный pipeline обработки

import os
from pathlib import Path
from faster_whisper import WhisperModel
from celery import Celery
import ffmpeg

app = Celery('batch_stt', broker='redis://localhost:6379/0',
             backend='redis://localhost:6379/1')
model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16")

def convert_to_wav(input_path: str) -> str:
    output_path = input_path.rsplit('.', 1)[0] + '_converted.wav'
    ffmpeg.input(input_path).output(
        output_path,
        ar=16000,
        ac=1,
        acodec='pcm_s16le'
    ).overwrite_output().run(quiet=True)
    return output_path

@app.task(bind=True, max_retries=3, time_limit=3600)
def process_audio_file(self, file_path: str, options: dict = None):
    options = options or {}
    try:
        # Конвертация в нужный формат
        wav_path = convert_to_wav(file_path)

        segments, info = model.transcribe(
            wav_path,
            language=options.get('language'),
            vad_filter=True,
            word_timestamps=options.get('word_timestamps', False),
            beam_size=5
        )

        result = {
            "file": file_path,
            "language": info.language,
            "language_probability": info.language_probability,
            "duration": info.duration,
            "segments": []
        }

        for seg in segments:
            segment_data = {
                "start": round(seg.start, 3),
                "end": round(seg.end, 3),
                "text": seg.text.strip()
            }
            if options.get('word_timestamps'):
                segment_data["words"] = [
                    {"word": w.word, "start": w.start, "end": w.end, "probability": w.probability}
                    for w in (seg.words or [])
                ]
            result["segments"].append(segment_data)

        os.unlink(wav_path)
        return result

    except Exception as exc:
        raise self.retry(exc=exc, countdown=60 * (self.request.retries + 1))

Поддерживаемые форматы

Через FFmpeg обрабатываем любой формат: MP3, WAV, FLAC, M4A, OGG, AAC, OPUS, MP4, MKV. Нормализуем в WAV 16kHz mono — оптимальный формат для ASR.

Производительность

Оборудование Модель Скорость
RTX 3080 medium (int8) 6–8x RT
RTX 4090 large-v3 (int8) 3–4x RT
A10G large-v3 (int8) 4–5x RT
CPU (16 cores) medium 0.3–0.5x RT

1 час аудио на RTX 4090 с large-v3: ~15–20 минут обработки.

Сроки реализации

  • Скрипт для одиночных файлов: 1 день
  • Пайплайн с очередью и API: 3–5 дней
  • Полная система с дашбордом статусов: 1 неделя