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.

Dowiedz się więcej

WebSockets na iOS-a – komunikacja w czasie rzeczywistym, która nie spowalnia aplikacji

Kiedy chcesz pobrać dane do aplikacji, zwykle pewnie wykorzystujesz interfejs API RESTful. Wystarczy zapytać serwer o paczkę danych i gotowe. To dobra metoda, jeśli aplikacja nie potrzebuje stałego dostępu do nowych informacji. A co jeśli treści muszą się odświeżać w czasie rzeczywistym? Wtedy opóźnienie może np. uniemożliwiać dokonanie zakupu albo postawienie zakładu sportowego. Na szczęście z pomocą przychodzą WebSockets na iOS-a. Sprawdź, jak je zaimplementować i dlaczego warto to zrobić.
Przeczytaj

Dynamiczna lokalizacja powiadomień na iOS-a, czyli jak wysyłać wiadomości w różnych językach

Jak ustanowić łącznik pomiędzy użytkownikiem, dostawcą a aplikacją? Wykorzystaj powiadomienia systemowe. Dzięki nim użytkownik szybko otrzymuje najnowsze informacje. To rozwiązanie łatwo zastosujesz w aplikacjach zorientowanych na jeden rynek. Problemy zaczynają się, gdy treści muszą być tworzone w różnych językach. Wtedy pomocą służy dynamiczna lokalizacja zdalnych powiadomień bez wykorzystania własnego serwera.
Przeczytaj

CallKit – jak go skonfigurować?

iOS 10 dostarcza wiele nowych funkcji. Jedną z nich jest CallKit, framework, który pozwala naszej aplikacji na ścisłą integrację z interfejsem użytkownika w telefonie. Aplikacje mogą wykorzystywać CallKit, aby umożliwić użytkownikom odbieranie połączeń przychodzących oraz realizację połączeń wychodzących za pomocą interfejsu użytkownika dostarczanego przez telefon. Połączenie VoIP może zostać wyciszone lub zawieszone. Możliwe jest również prowadzenie wideo połączenia.
Przeczytaj

Wycena projektu

Sprawdź, jak wykorzystujemy naszą wiedzę w praktyce i stwórz z nami swój projekt.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2017

Nominacja w kategorii
M-COMMERCE

17

opinii klientów

Clutch logo
Logo Legalni bukmacherzy

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

60+

zrealizowanych projektów