Hoy traduciremos el discurso en texto. Primero, asegúrese de tener instalada la última versión de iOS y Xcode . Para Speech Framework necesita al menos iOS 10 . Creé un proyecto con soporte SwiftUI , esto requiere iOS 13 . Pero esto no es necesario, puedes usar el Storyboard .Si no sabe qué es SwiftUI y desea una descripción general rápida, aquí está .Cree un nuevo proyecto "Archivo> Nuevo> Proyecto ..." , seleccione "Aplicación de vista única" e "Interfaz de usuario: SwiftUI" . El proyecto se verá así:
Seleccione un archivoContentView.swift y cambia "struct ContentView ..." a: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 es lo que mostramos en la pantalla. SpeechRec es donde traduciremos el discurso en texto. Mantendremos el texto reconocido en un texto reconocido , y ContentView lo mostrará en la pantalla.Resolución
Primero, debemos pedirle permiso al usuario. Seleccione el archivo Info.plist y agregue dos claves allí: NSSpeechRecognitionUsageDescription y NSMicrophoneUsageDescription .
Importar voz y pedir permiso:import Speech
...
class SpeechRec: ObservableObject {
...
func start() {
SFSpeechRecognizer.requestAuthorization { status in
}
}
}
Si se ejecuta, será pedir permiso:
.Traducir voz a texto
Para traducir la voz en texto, necesitamos usar SFSpeechRecognizer con la localización "ru-Ru" para reconocer la voz rusa. Luego debe especificar la fuente, en nuestro caso es una transmisión desde el micrófono.Última versión de nuestra clase:...
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 {
}
}
}
Después de pedir permiso, el proceso de reconocimiento comienza de inmediato. Traté de escribir brevemente y, por lo tanto, omití algunos controles necesarios.Ahora corre y di algo en ruso. Su discurso se mostrará en la pantalla.
.¿Que sigue?
Documentación:developer.apple.com/documentation/speechVideo WWDC:developer.apple.com/videos/all-videos/?q=SpeechProyecto GitHub:github.com/usenbekov/speech-to-text-demo