Traduire la parole en texte sur iOS à l'aide du framework Speech

Aujourd'hui, nous allons traduire le discours en texte. Tout d'abord, assurez-vous que la dernière version d' iOS et de Xcode est installée . To Speech Framework nécessite au moins iOS 10 . J'ai créé un projet avec le support SwiftUI , cela nécessite iOS 13 . Mais ce n'est pas nécessaire, vous pouvez utiliser le Storyboard .

Si vous ne savez pas ce qu'est SwiftUI et que vous souhaitez un aperçu rapide, vous êtes ici .

Créez un nouveau projet "Fichier> Nouveau> Projet ..." , sélectionnez "Application vue unique" et "Interface utilisateur: SwiftUI" . Le projet ressemblera à ceci:



Sélectionnez un fichierContentView.swift et remplacez «struct ContentView ...» par:

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 est ce que nous montrons à l'écran. SpeechRec est l'endroit où nous traduirons la parole en texte. Nous conserverons le texte reconnu sur un texte reconnu , et le ContentView l'affichera à l'écran.

Résolution


Tout d'abord, nous devons demander la permission à l'utilisateur. Sélectionnez le fichier Info.plist et ajoutez-y deux clés: NSSpeechRecognitionUsageDescription et NSMicrophoneUsageDescription .



Importer le discours et demander la permission:

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


Si vous exécutez, vous demandera la permission:


.

Traduire la parole en texte


Pour traduire la parole en texte, nous devons utiliser SFSpeechRecognizer avec la localisation «ru-Ru» pour reconnaître la parole russe. Ensuite, vous devez spécifier la source, dans notre cas, il s'agit d'un flux provenant du microphone.

Dernière version de notre classe:

...

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


Après avoir demandé la permission, le processus de reconnaissance commence immédiatement. J'ai essayé d'écrire brièvement et j'ai donc manqué quelques vérifications nécessaires.

Maintenant, courez et dites quelque chose en russe. Votre discours sera affiché à l'écran.


.

Et après?


Documentation:
developer.apple.com/documentation/speech

Vidéo WWDC:
developer.apple.com/videos/all-videos/?q=Speech

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

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


All Articles