Потоковое распознавание речи
Передавайте аудиоданные или локальный аудиофайл выбранному поставщику AI-сервисов и получайте результаты распознавания речи по мере обработки.
Предварительные условия
AIBudsAISDKинициализирован, и выбран зарегистрированный поставщик.- Поставщик поддерживает
StreamingASRServiceAPI. - Входные байты соответствуют
audioFormat, указанному в конфигурации. - Если задан
languageForSpeechInput, используйте идентификатор языка с дефисом, напримерen-USилиzh-CN.
Реализация с помощью AI
Реализуйте этот сценарий с AI
Используйте официальный навык «Реализация потокового распознавания речи AIBuds» и адаптируйте сценарий к приложению.
Прочитайте и выполните инструкции https://docs-aibuds.github.io/ru/skills/implement-aibuds-streaming-asr. Используйте этот навык, чтобы реализовать «Реализация потокового распознавания речи AIBuds» в данном iOS-проекте и проверить результат.API Reference
Framework
AIBudsAI.xcframework
Import
- Swift
- Objective-C
import AIBudsAI
import AIBudsAIFoundation#import <AIBudsAI/AIBudsAI-Swift.h>Declaration
- Swift
- Objective-C
/// Recognizes voice data.
/// - Parameters:
/// - data: The audio data to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
public static func recognizeVoice(_ data: Data,
config: StreamingASRConfig = .default,
onTranscript: ((_ transcriptData: StreamSpeechASRModel) -> Void)? = nil,
onFailed: ((_ error: NSError) -> Void)? = nil,
onFinish: (() -> Void)? = nil) -> Void
/// Recognizes a voice file.
/// - Parameters:
/// - filePath: The local path of the audio file to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
public static func recognizeVoice(withFile filePath: String,
config: StreamingASRConfig = .default,
onTranscript: ((_ transcriptData: StreamSpeechASRModel) -> Void)? = nil,
onFailed: ((_ error: NSError) -> Void)? = nil,
onFinish: (() -> Void)? = nil) -> Void/// Recognizes voice data.
/// - Parameters:
/// - data: The audio data to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
+ (void)recognizeVoiceData:(NSData * _Nonnull)data
withConfig:(AIBudsStreamingASRConfig * _Nonnull)config
onTranscript:(void (^ _Nullable)(AIBudsStreamSpeechASRModel * _Nonnull))onTranscript
onFailed:(void (^ _Nullable)(NSError * _Nonnull))onFailed
onFinish:(void (^ _Nullable)(void))onFinish;
/// Recognizes a voice file.
/// - Parameters:
/// - filePath: The local path of the audio file to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
+ (void)recognizeVoiceFile:(NSString * _Nonnull)filePath
withConfig:(AIBudsStreamingASRConfig * _Nonnull)config
onTranscript:(void (^ _Nullable)(AIBudsStreamSpeechASRModel * _Nonnull))onTranscript
onFailed:(void (^ _Nullable)(NSError * _Nonnull))onFailed
onFinish:(void (^ _Nullable)(void))onFinish;Обе перегрузки предоставляются AIBudsAISDK и направляются в реализацию StreamingASRServiceAPI выбранного поставщика.
Конфигурация
Создайте StreamingASRConfig со следующими параметрами:
| Значение | Описание |
|---|---|
languageForSpeechInput | Необязательный язык распознавания. Если не задан, поставщик использует текущий язык приложения. |
audioFormat | Формат входа, например .pcm, .mp3 или .wav. |
enableSpeakerDiarization | Нужно ли поставщику выделять сегменты разных говорящих. По умолчанию false. |
Формат входа задаётся через AIAudioFormat:
| Значение | Входные данные |
|---|---|
.pcm | Необработанный PCM в формате дискретизации, требуемом выбранным поставщиком. |
.opus | Аудио в кодеке Opus. |
.mp3 | Аудио MP3. |
.wav | Аудио в контейнере WAV. |
.none / .unknown | Допустимый формат отсутствует; не запускайте распознавание с этими значениями. |
Каждый StreamSpeechASRModel содержит порядковый номер, необязательный ID запроса, текущий текст, признак окончательности, необязательный номер текста и сегменты говорящих.
Примеры использования
Распознавание файла
- Swift
- Objective-C
let config = StreamingASRConfig(
languageForSpeechInput: "en-US",
audioFormat: .wav,
enableSpeakerDiarization: true
)
AIBudsAISDK.recognizeVoice(
withFile: fileURL.path,
config: config,
onTranscript: { result in
print("Sequence \(result.sequence): \(result.transcript ?? "")")
if result.isDefinite {
print("Definite transcript received")
}
},
onFailed: { error in
print("Recognition failed: \(error.localizedDescription)")
},
onFinish: {
print("Recognition finished")
}
)AIBudsStreamingASRConfig *config =
[[AIBudsStreamingASRConfig alloc] initWithLanguageForSpeechInput:@"en-US"
audioFormat:AIBudsAIAudioFormatWav
enableSpeakerDiarization:YES];
[AIBudsAISDK recognizeVoiceFile:fileURL.path
withConfig:config
onTranscript:^(AIBudsStreamSpeechASRModel *result) {
NSLog(@"Sequence %ld: %@", (long)result.sequence, result.transcript ?: @"");
if (result.isDefinite) {
NSLog(@"Definite transcript received");
}
}
onFailed:^(NSError *error) {
NSLog(@"Recognition failed: %@", error.localizedDescription);
}
onFinish:^{
NSLog(@"Recognition finished");
}];Для аудио в памяти вызовите recognizeVoice(_:config:onTranscript:onFailed:onFinish:) с Data / NSData и используйте ту же обработку callbacks.
Примечания
- Распознанный текст поступает по частям и может повторяться по мере уточнения фразы. При формировании интерфейса используйте
sequence,transcriptSequenceиisDefinite. - Текущий API принимает готовое значение
Dataили путь к файлу. Он не предоставляет команд start/append/stop для потока или делегат распознавания. onFinishне содержит результата. Если после завершения нужен итоговый текст, сохраняйте последнее значение изonTranscript.- Поддерживаемые форматы, языки и поведение диаризации могут различаться у разных поставщиков.