ترجمة الكلام إلى نص على iOS باستخدام إطار عمل الكلام

اليوم سنترجم الكلام إلى نص. أولاً ، تأكد من تثبيت أحدث إصدار من iOS و Xcode . إلى Speech Framework ، يجب أن يكون iOS 10 على الأقل . لقد أنشأت مشروعًا بدعم SwiftUI ، وهذا يتطلب iOS 13 . ولكن هذا ليس ضروريًا ، يمكنك استخدام Storyboard .

إذا كنت لا تعرف ما هو SwiftUI وتريد نظرة سريعة ، فإليك .

أنشئ مشروعًا جديدًا "File> New> Project ..." ، وحدد "Single View App" و "User Interface: SwiftUI" . سيبدو المشروع على النحو التالي:



حدد ملفًا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 = "!"
    }
}


ContentView هو ما نعرضه على الشاشة. SpeechRec هو المكان الذي سنترجم فيه الكلام إلى نص. سنحتفظ بالنص الذي تم التعرف عليه في نص معترف به ، وسيعرض ContentView هذا على الشاشة.

الدقة


أولاً ، نحتاج إلى طلب الإذن من المستخدم. حدد ملف Info.plist وأضف مفتاحين هناك: NSSpeechRecognitionUsageDescription و NSMicrophoneUsageDescription .



استيراد الكلام وطلب الإذن:

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


إذا قمت بتشغيل، واستأذن:


.

ترجمة الكلام إلى نص


لترجمة الكلام إلى نص ، نحتاج إلى استخدام SFSpeechRecognizer مع الترجمة "ru-Ru" للتعرف على الكلام الروسي. ثم تحتاج إلى تحديد المصدر ، في حالتنا هو دفق من الميكروفون.

أحدث نسخة من فصلنا:

...

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