рд╕реНрдкреАрдЪ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ iOS рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рднрд╛рд╖рдг рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ

рдЖрдЬ рд╣рдо рднрд╛рд╖рдг рдХрд╛ рдкрд╛рда рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ iOS рдФрд░ Xcode рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИ ред рд╕реНрдкреАрдЪ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо iOS 10 рдХреА рдЬрд░реВрд░рдд рд╣реИ ред рдореИрдВрдиреЗ SwiftUI рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ , рдЗрд╕рдХреЗ рд▓рд┐рдП iOS 13 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдЖрдк рд╣реИрдВ ред

рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ "рдлрд╛рдЗрд▓> рдирдпрд╛> рдкреНрд░реЛрдЬреЗрдХреНрдЯ ..." рдмрдирд╛рдПрдВ , "рд╕рд┐рдВрдЧрд▓ рд╡реНрдпреВ рдРрдк" рдФрд░ "рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕: рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ" рдЪреБрдиреЗрдВ ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВContentView.swift рдФрд░ "рд╕рдВрд░рдЪрдирд╛рддреНрдордХ 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 = "!"
    }
}


рд╕рд╛рдордЧреНрд░реА рдЬреЛ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред SpeechRec рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо рднрд╛рд╖рдг рдХреЛ рдкрд╛рда рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗред рд╣рдо рдХрд┐рд╕реА рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдХреЛ рдХрд┐рд╕реА рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдкрд░ рд░рдЦреЗрдВрдЧреЗ , рдФрд░ рд╕рд╛рдордЧреНрд░реА рджреГрд╢реНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╕рдВрдХрд▓реНрдк


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛ред Info.plist рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рджреЛ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ: NSSpeechRecognitionUsageDescription рдФрд░ NSMicrophoneUsageDescription ред рднрд╛рд╖рдг



рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреЗрдВ:

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


рдпрджрд┐ рдЖрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреЗрдЧрд╛


:ред

рднрд╛рд╖рдг рдХреЛ рдкрд╛рда рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ


рднрд╛рд╖рдг рдХреЛ рдкрд╛рда рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░реВрд╕реА рднрд╛рд╖рдг рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдпрдХрд░рдг "рдЖрд░рдпреВ-рдЖрд░рдпреВ" рдХреЗ рд╕рд╛рде SFSpeechRecognizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдлрд┐рд░ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рдПрдХ рдзрд╛рд░рд╛ рд╣реИред рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг:



...

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 рд╡реАрдбрд┐рдпреЛ:
developer.apple.com/videos/all-videos/?q=Speech

GitHub рдкрд░рд┐рдпреЛрдЬрдирд╛:
github.com/usenbekov/speech-to-text-demo

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


All Articles