Как проверить ответ пользователя в вопросе с множественным выбором с помощью голосовых команд Siri
Мне нужно построить приложение типа викторины, используя Siri. Здесь, давайте рассмотрим, мое приложение имеет только один вопрос наряду с несколькими вариантами ответов. Теперь с помощью голосовых команд Siri мне нужно загрузить этот вопрос вместе с вариантами выбора в Label/ textview. Как только этот вопрос будет загружен в Lable/textview, Siri должен ответить на этот вопрос. Теперь пользователь может выбрать свой ответ либо a, либо b, либо c или d, используя свою голосовую команду. Затем Siri должен подтвердить ввод пользователя с правильным ответом. Если это правильно, Сири должен сказать "правильный ответ". В противном случае следует сказать "неправильный ответ. Правильный ответ и так далее... "
Я выполнил половину своих требований. Используя ярлыки Siri, я могу загрузить вопрос на ярлык, и Siri сможет ответить на этот вопрос.
для справки, пожалуйста, найдите мой код ниже.
В ViewController.swift
файл, который я реализовал ниже код,
Public fund createShortcutForloadingQuestion(){
let userAct = NSUserActivity(activityType: "com.organization.QuizSpeakingApp.loadQuestion")
userAct.title = "get the text from document"
userAct.userInfo = ["question" : "what is the capital of India? \n a. Kolkata \n b. Mumbai, \n c. Bengaluru,\n d. New Delhi"]
userAct.isEligibleForSearch = true
userAct.isEligibleForPrediction = true
userAct.persistentIdentifier = NSUserActivityPersistentIdentifier("com.organization.QuizSpeakingApp.loadQuestion")
textLbl.userActivity = userAct
userAct.becomeCurrent()
displayTextOnLabel()
}
public func displayTextOnLabel() {
textLbl.text = “what is the capital of India? \n a. Kolkata \n b. Mumbai, \n c. Bengaluru,\n d. New Delhi.”
}
Чтобы ответить на заданный вопрос, я реализовал код, как показано ниже:
public func speakTheQuestion(){
let speechUtterance = AVSpeechUtterance(string: textLbl.text ?? "Label Doesnt have any text")
speechUtterance.rate = 0.5
speechUtterance.pitchMultiplier = 1.0
speechUtterance.volume = 1.0
speechUtterance.postUtteranceDelay = 0.005
speechSynthesizer.speak(speechUtterance)
}
Теперь, чтобы создать ярлык для загрузки вопроса и сказать загруженный вопрос, я реализовал следующий метод в AppDelegate.swift
,
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let viewController = window?.rootViewController as! ViewController
viewController.displayTextOnLabel()
viewController.speakTheQuestion()
return true
}
С вышеупомянутой реализацией я могу загрузить вопрос и ответить на него Сири.
Теперь кто-нибудь может мне помочь, как получить ответ пользователя с помощью голосовой команды, и как проверить его ответ с правильным ответом и как дать обновление о своем ответе с Siri?
Спасибо в andvance.
1 ответ
На данный момент Sirikit управляет только определенными доменами и намерениями.
Для вашего случая использования я бы предложил вам использовать SpeechKit. Speechkit принимает голос в качестве входных данных и преобразует его в текст. Он имеет точность и работает потрясающе. Вы можете задать вопрос пользователю, а затем начать распознавание речи с помощью speechKit и прочитать ответ пользователя.
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
let string = result?.bestTranscription.formattedString
self.textView.text = string
if((string?.elementsEqual("A"))! || (string?.elementsEqual("Option A"))!)
{
//user said option A is correct, perform your action
}
else if((string?.elementsEqual("B"))! || (string?.elementsEqual("Option B"))!)
{
//user said option B is correct, perform your action
}
//......
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
self.microPhoneButton.isEnabled = true
}
})