Terjemahkan pidato ke teks di iOS menggunakan kerangka kerja Speech

Hari ini kami akan menerjemahkan pidato ke dalam teks. Pertama, pastikan Anda menginstal versi terbaru iOS dan Xcode . To Speech Framework membutuhkan setidaknya iOS 10 . Saya membuat proyek dengan dukungan SwiftUI , ini membutuhkan iOS 13 . Tapi ini tidak perlu, Anda bisa menggunakan Storyboard .

Jika Anda tidak tahu apa itu SwiftUI dan ingin ikhtisar cepat, inilah Anda .

Buat proyek baru "File> New> Project ..." , pilih "Single View App" dan "User Interface: SwiftUI" . Proyek akan terlihat seperti ini:



Pilih fileContentView.swift dan ubah "struct ContentView ..." ke:

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 adalah apa yang kami tampilkan di layar. SpeechRec adalah tempat kami menerjemahkan ucapan ke dalam teks. Kami akan menyimpan teks yang dikenali pada Teks yang dikenali , dan ContentView akan menampilkan ini di layar.

Resolusi


Pertama, kita perlu meminta izin kepada pengguna. Pilih file Info.plist dan tambahkan dua kunci di sana: NSSpeechRecognitionUsageDescription dan NSMicrophoneUsageDescription .



Impor Pidato dan minta izin:

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


Jika Anda menjalankan, akan meminta izin:


.

Terjemahkan pidato ke teks


Untuk menerjemahkan ucapan ke dalam teks, kita perlu menggunakan SFSpeechRecognizer dengan pelokalan “ru-Ru” untuk mengenali ucapan Rusia. Maka Anda perlu menentukan sumbernya, dalam kasus kami ini adalah aliran dari mikrofon.

Versi terbaru dari kelas kami:

...

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


Setelah meminta izin, proses pengenalan segera dimulai. Saya mencoba menulis secara singkat dan karena itu melewatkan beberapa cek yang diperlukan.

Sekarang jalankan dan katakan sesuatu dalam bahasa Rusia. Pidato Anda akan ditampilkan di layar.


.

Apa berikutnya?


Dokumentasi:
developer.apple.com/documentation/speech

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

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

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


All Articles