Übersetzen Sie Sprache unter iOS mit dem Speech Framework in Text

Heute werden wir Sprache in Text übersetzen. Stellen Sie zunächst sicher, dass Sie die neueste Version von iOS und Xcode installiert haben . Zum Speech Framework benötigen Sie mindestens iOS 10 . Ich habe ein Projekt mit SwiftUI- Unterstützung erstellt . Dies erfordert iOS 13 . Dies ist jedoch nicht erforderlich. Sie können das Storyboard verwenden .

Wenn Sie nicht wissen, was SwiftUI ist und einen schnellen Überblick wünschen, sind Sie hier .

Erstellen Sie ein neues Projekt "Datei> Neu> Projekt ..." , wählen Sie "Single View App" und "Benutzeroberfläche: SwiftUI" . Das Projekt sieht ungefähr so ​​aus:



Wählen Sie eine Datei ausContentView.swift und ändern Sie "struct ContentView ..." in:

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 ist das, was wir auf dem Bildschirm anzeigen . In SpeechRec werden wir Sprache in Text übersetzen. Wir behalten den erkannten Text in einem erkannten Text bei und die Inhaltsansicht zeigt ihn auf dem Bildschirm an.

Auflösung


Zuerst müssen wir den Benutzer um Erlaubnis bitten. Wählen Sie die Datei Info.plist aus und fügen Sie dort zwei Schlüssel hinzu: NSSpeechRecognitionUsageDescription und NSMicrophoneUsageDescription .



Import Speech und um Erlaubnis bitten:

import Speech
...
class SpeechRec: ObservableObject {
    ...
    func start() {
        SFSpeechRecognizer.requestAuthorization { status in
            
        }
    }
}


Wenn Sie ausführen, werden Sie um Erlaubnis gebeten :


.

Übersetzen Sie Sprache in Text


Um Sprache in Text zu übersetzen, müssen wir SFSpeechRecognizer mit der Lokalisierung „ru-Ru“ verwenden , um russische Sprache zu erkennen. Dann müssen Sie die Quelle angeben, in unserem Fall handelt es sich um einen Stream vom Mikrofon.

Neueste Version unserer Klasse:

...

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 {
            
        }
    }
}


Nachdem Sie um Erlaubnis gebeten haben, beginnt der Erkennungsprozess sofort. Ich habe versucht, kurz zu schreiben und deshalb einige notwendige Schecks verpasst.

Jetzt renn und sag etwas auf Russisch. Ihre Rede wird auf dem Bildschirm angezeigt.


.

Was weiter?


Dokumentation:
developer.apple.com/documentation/speech

WWDC-Video:
developer.apple.com/videos/all-videos/?q=Speech

GitHub-Projekt:
github.com/usenbekov/speech-to-text-demo

Source: https://habr.com/ru/post/undefined/


All Articles