如何使用 Siri 语音命令验证用户在多项选择题中的回答

Posted

技术标签:

【中文标题】如何使用 Siri 语音命令验证用户在多项选择题中的回答【英文标题】:How to validate user answer in a multiple choice question using Siri voice commands 【发布时间】:2019-01-25 06:50:58 【问题描述】:

我需要使用 Siri 构建一个测验类型的应用程序。 在这里,让我们考虑一下,我的应用程序只有一个问题以及多个选择作为答案。 现在使用 Siri 语音命令,我需要将该问题连同选项一起加载到标签/文本视图中。 一旦该问题被加载到 Lable/textview 上,这个问题应该由 Siri 说出。 现在用户可以使用他们的语音命令选择他/她的答案 a 或 b 或 c 或 d。 然后 Siri 应该用正确的答案来验证用户的输入。 如果正确,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 说出问题。

现在,任何人都可以帮助我如何通过语音命令获取用户答案,如何使用正确答案验证他们的答案以及如何使用 Siri 更新他的答案?

感谢安万斯。

【问题讨论】:

【参考方案1】:

到目前为止,Sirikit 只处理特定的域和意图。

More about 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
        
    )

more about SpeechKit in ios

【讨论】:

以上是关于如何使用 Siri 语音命令验证用户在多项选择题中的回答的主要内容,如果未能解决你的问题,请参考以下文章

carplay语音控制高德地图没有反应

提供从 Siri 语音输入到可编写脚本或 pythonista 脚本的参数?

使用Siri shortcuts语音控制Jenkins任务

在多项选择中更改时获取在 ng-option 中选择的新值

如何接收和使用 AVPlayer 的语音命令? (tvOS,迅速)

用 80 行 Javascript 代码构建自己的语音助手