اليوم سنترجم الكلام إلى نص. أولاً ، تأكد من تثبيت أحدث إصدار من 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/speechWWDC فيديو:developer.apple.com/videos/all-videos/؟q=SpeechGitHub مشروع:github.com/usenbekov/speech-to-text-demo