Перейти к содержанию

Библиотека Python

Распознавание

stt_ru.Transcriber

Transcriber загружает модель один раз и распознает ею файлы и записи в памяти. Каналы стереозаписи распознаются отдельно, записи длиннее 10 минут - окнами около 10 минут с границей в паузе. Один объект можно использовать из нескольких потоков.

Параметр Тип По умолчанию Описание
model str "gigaam-v3-e2e-rnnt" Имя модели onnx-asr
quantization str "int8" Квантизация весов; None - исходные веса
model_dir str None Каталог с файлами модели; None - кэш Hugging Face
providers list[str] None Провайдеры ONNX Runtime по приоритету; None - доступные, кроме CoreML и TensorRT
vad VadOptions None Параметры поиска речи
split_channels bool True Распознавать каналы отдельно; False - сводить в один
ffmpeg str None Путь к ffmpeg; None - поиск в PATH и в imageio-ffmpeg
Метод Описание
transcribe(path) Распознает файл и возвращает Transcript
transcribe_audio(audio, source=None) Распознает запись в памяти (Audio)
load(path, *, max_duration=None) Читает файл с частотой, которую принимает модель; max_duration в секундах ограничивает длину записи
>>> from stt_ru import Transcriber

>>> transcriber = Transcriber()
>>> result = transcriber.transcribe("call.wav")
>>> result.duration, result.channels, len(result.segments)
(15.751, 2, 5)
>>> result.segments[0]
Segment(start=0.994, end=9.054, text='Наталья, благодарю вас за ожидание. По данному вопросу я сейчас ваш звонок переведу на специалиста профильного подразделения. Оставайтесь, пожалуйста, на линии.', channel=1)

Результат

stt_ru.Transcript, stt_ru.Segment

Transcript - результат распознавания записи: фрагменты по времени начала и сведения о записи.

Атрибут Тип Описание
segments tuple[Segment, ...] Фрагменты речи по времени начала
duration float Длительность записи, с
channels int Число распознанных каналов: 1, если каналы сведены или одинаковы
model str Модель распознавания
source str Имя файла записи; None - запись не из файла
channel_map tuple[int | None, ...] Для каждого канала записи - номер канала, под которым распознана его речь: свой, совпавшего с ним или None, если дорожка одна
text str Текст всех фрагментов через пробел

save(path, fmt=None) сохраняет результат в формате по расширению файла или из fmt.

Segment - фрагмент речи: start и end в секундах, text, channel (номер канала с нуля; None - каналы сведены), speaker («Канал N» или None) и duration.

Экспорт

stt_ru.export

Функция Описание
render(transcript, fmt) Текст результата в формате из FORMATS
dumps(transcript, fmt) Содержимое файла в байтах: UTF-8, у CSV - с BOM
save(transcript, path, fmt=None) Запись в файл целиком; формат - по расширению или из fmt
to_txt, to_json, to_jsonl, to_srt, to_vtt, to_ass, to_csv Текст в одном формате

FORMATS - кортеж поддерживаемых форматов: ("txt", "json", "jsonl", "srt", "vtt", "ass", "csv").

>>> from stt_ru.export import render
>>> print("\n".join(render(result, "srt").splitlines()[4:7]))
2
00:00:03,490 --> 00:00:03,934
Канал 0: Угу

Аудио

stt_ru.audio

load_audio(path, *, sample_rate=None, ffmpeg=None, max_duration=None) читает файл в Audio: отсчеты float32 формы (число отсчетов, число каналов) и частоту. sample_rate меняет частоту через ffmpeg, max_duration отклоняет запись длиннее заданного числа секунд, не декодируя ее целиком. У Audio есть num_channels, duration, channel(index), mono() и peaks(points) - пики для рисования формы волны. find_ffmpeg() возвращает путь к ffmpeg, который будет использован, или None.

Запись из другого источника можно распознать без файла:

>>> import numpy as np
>>> from stt_ru.audio import Audio

>>> samples = np.zeros((16000 * 5, 1), dtype=np.float32)    # 5 с тишины
>>> transcriber.transcribe_audio(Audio(samples, 16000)).segments
()

Исключения

stt_ru.exceptions

Все исключения наследуют SttRuError, а некоторые - еще и встроенный класс Python, поэтому их можно ловить по любому из имен.

Исключение Встроенный класс Когда поднимается
SttRuError Exception Базовый класс
AudioError - Файл не читается, для него нужен ffmpeg, а его нет, запись длиннее max_duration, модель не принимает частоту
ModelError - Модель не поддерживается, ее не удалось скачать или ее файлы повреждены
ParameterError ValueError Недопустимое значение параметра: формат, поиск речи, разметка оценки
MissingDependencyError ImportError Нет пакета из дополнения, например jiwer для оценки качества

Отсутствующий файл дает встроенное FileNotFoundError.