Как проверить ответ пользователя в вопросе с множественным выбором с помощью голосовых команд Siri - PullRequest
0 голосов
/ 25 января 2019

Мне нужно создать приложение типа викторины, используя 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 Ответ

0 голосов
/ 25 января 2019

на данный момент Sirikit обрабатывает только определенные домены и намерения.

Подробнее о 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
        }
    })

Подробнее о SpeechKit в iOS

...