Speech Recognizer API – co musisz wiedzieć?

Speech Recognizer API – co musisz wiedzieć?

W iOS 10 mamy do dyspozycji SFSpeechRecognizer API, które umożliwia transkrypcję w czasie rzeczywistym lub z wcześniej nagranych plików audio. Rezultatem takiej transkrypcji jest nie tylko tekst, ale również alternatywne interpretacje audio, czas trwania wypowiedzianych słów oraz poziom trafności rozpoznanych słów (skala 0.0 – 1.0). Poznaj możliwości tego narzędzia i sprawdź, jak je wykorzystać w praktyce.

SFSpeechRecognizer API

Api umożliwia analizę ponad 50 języków, dlatego warto . Wykorzystanie SFSpeechRecognizer API w aplikacji jest bardzo proste i w zasadzie sprowadza się do czterech kroków.

Krok 1. Dodanie do pliku info.plist odpowiednich kluczy wraz z ich opisami

  • NSSpeechRecognitionUsageDescription – to klucz informujący o tym, do czego będziemy wykorzystywać w aplikacji SFSpeechRecognizer;
  • NSMicrophoneUsageDescription – niezbędny w przypadku, kiedy wykorzystujemy mikrofon, aby analizować mowę na żywo.

Krok 2. Wywołanie prośby o zezwolenie SFSpeechRecognizer

SFSpeechRecognizer.requestAuthorization { authStatus in
/*
The callback may not be called on the main thread. Add an
operation to the main queue to update the record button's state.
*/
OperationQueue.main.addOperation {
switch authStatus {
case .authorized:
//..
case .denied:
//..
case .restricted:
//..
case .notDetermined:
//..
}
}
}

Krok 3. Utworzenie żądania rozpoznawania mowy

Wyróżniamy dwa typy takiego żądania:

  • SFSpeechURLRecognitionReqest – wykorzystywane do analizy mowy z wcześniej nagranego pliku audio,
  • SFSpeechAudioBufferRecognitionRequest – wykorzystywany do analizy mowy na żywo (przy użyciu mikrofonu).

Dla obu żądań będzie potrzebna klasa SFSpeechRecognizer, aby wykonać analizę mowy.

//..
let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "pl-PL"))
//..

SFSpeechURLRecognitionReqest

Obsługa tego typu żądania sprowadza się do użycia paru linijek kodu:

let fileURL = URL(fileURLWithPath: Bundle.main.path(forResource: "audio", ofType: ".mp3")!)
let request = SFSpeechURLRecognitionRequest(url: fileURL)
SFSpeechAudioBufferRecognitionRequest

Obsługa analizy mowy na żywo wymaga trochę więcej pracy. Dodatkowo należy wykorzystać AVAudioEngine, aby przechwycić mowę z mikrofonu urządzenia. Kolejnym i ostatnim elementem, który jest niezbędny do rozpoznawania mowy jest: SFSpeechRecognitionTask.

//..
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
        
        guard let inputNode = audioEngine.inputNode else { fatalError("Audio engine has no input node") }
        guard let recognitionRequest = recognitionRequest else { fatalError("Unable to created a SFSpeechAudioBufferRecognitionRequest object") }
        
        // Configure request so that results are returned before audio recording is finished
        recognitionRequest.shouldReportPartialResults = true
        
        // A recognition task represents a speech recognition session.
        // We keep a reference to the task so that it can be cancelled.
        recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result, error in
            //..
        }
        
        let recordingFormat = inputNode.outputFormat(forBus: 0)
        inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer: AVAudioPCMBuffer, when: AVAudioTime) in
            self.recognitionRequest?.append(buffer)
        }
        
        audioEngine.prepare()
        try audioEngine.start()

SFSpeechRecognitionResult zawiera bestTranscription oraz alternatywne transkrypcje.

Bartek

Bartek Byra

iOS Developer

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2023

Wygrana w kategorii
MCOMMERCE ROZWÓJ

23

opinie klientów

Clutch logo