Если вы не знаете что такое SwiftUI и хотите быстрый обзор, то вам сюда.
Создайте новый проект “File > New > Project…”, выберите “Single View App” и “User Interface: SwiftUI”. Проект будет выглядеть примерно так:

Выбираем файл ContentView.swift и меняем «struct ContentView…» на:
struct ContentView: View { @ObservedObject var speechRec = SpeechRec() var body: some View { Text(speechRec.recognizedText) .onAppear { self.speechRec.start() } } } class SpeechRec: ObservableObject { @Published private(set) var recognizedText = "" func start() { recognizedText = "Привет!" } }
ContentView — это то, что показываем на экране. SpeechRec — это где мы будем переводить речь в текст. Распознанный текст будем держать на recognizedText, а ContentView будет отображать это на экране.
Разрешение
Для начала нам нужно спросить разрешение у пользователя. Выберите файл Info.plist и добавьте туда два ключа: NSSpeechRecognitionUsageDescription и NSMicrophoneUsageDescription.

Импортируем Speech и спрашиваем разрешение:
import Speech ... class SpeechRec: ObservableObject { ... func start() { SFSpeechRecognizer.requestAuthorization { status in } } }
Если запустить, будет спрашивать разрешение:

.
Перевести речь в текст
Чтобы перевести речь в текст нам надо использовать SFSpeechRecognizer с локализацией «ru-Ru», для распознавания русской речи. Потом нужно указать источник, в нашем случае это поток от микрофона.
Последняя версия нашего класса:
... class SpeechRec: ObservableObject { @Published private(set) var recognizedText = "" let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru-RU")) var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? var recognitionTask: SFSpeechRecognitionTask? let audioEngine = AVAudioEngine() func start() { self.recognizedText = "Слушаю..." SFSpeechRecognizer.requestAuthorization { status in self.startRecognition() } } func startRecognition() { do { recognitionRequest = SFSpeechAudioBufferRecognitionRequest() guard let recognitionRequest = recognitionRequest else { return } recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest) { result, error in if let result = result { self.recognizedText = result.bestTranscription.formattedString } } let recordingFormat = audioEngine.inputNode.outputFormat(forBus: 0) audioEngine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in recognitionRequest.append(buffer) } audioEngine.prepare() try audioEngine.start() } catch { } } }
После того, как спросили разрешение, мы сразу же начали процесс распознавания. Я постарался написать кратко и поэтому пропустил некоторые необходимые проверки.
Теперь запустите и скажите что нибудь на русском, ваша речь будет отображаться на экране.

.
Что дальше?
Документацию можно найти здесь:
developer.apple.com/documentation/speech
WWDC видео про Speech framework:
developer.apple.com/videos/all-videos/?q=Speech
Ссылка на github проект находится здесь:
github.com/usenbekov/speech-to-text-demo
ссылка на оригинал статьи https://habr.com/ru/post/487890/
Добавить комментарий