В настоящее время я пытаюсь реализовать распознавание речи для Android в проекте Unity с помощью плагина Mobile Speech Recognizer в Asset Store.Я впервые использую распознавание речи в целом.
В настоящее время я продолжаю получать код ошибки распознавателя речи Android 2, что означает наличие других ошибок, связанных с сетью.После 2 дней поиска решения я не смог устранить эту ошибку.Я также попытался прочитать документацию по ресурсам и связаться с разработчиком.
Я использую Unity для разработки проекта и Android Studio Emulator для тестирования и запуска проекта, так как Unity сам по себе не может запустить плагин Speech Recognizer.Ниже приведены два сценария, которые используются в сцене SetLanguage и в сцене ExampleScene соответственно.Пожалуйста, не обращайте внимания на ручную настройку языка обнаружения, так как я хотел, чтобы проект всегда использовал английский.
Если есть более четкое определение «других ошибок, связанных с сетью», пожалуйста, скажите, что это немного расплывчато,
SetLanguage Scene
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using UnityEngine.UI;
using KKSpeech;
namespace KKSpeech {
public class SpeechRecognitionLanguageDropdown : MonoBehaviour {
private Dropdown dropdown;
private List<LanguageOption> languageOptions;
void Start () {
dropdown = GetComponent<Dropdown>();
dropdown.onValueChanged.AddListener(OnDropdownValueChanged);
//dropdown.ClearOptions();lo
dropdown.options[0].text = "en-US";
GameObject.FindObjectOfType<SpeechRecognizerListener>().
onSupportedLanguagesFetched.
AddListener(OnSupportedLanguagesFetched);
SpeechRecognizer.GetSupportedLanguages();
SpeechRecognizer.SetDetectionLanguage("en-US");
}
// remember to add ExampleScene to Build Settings!
public void GoToRecordingScene() {
SceneManager.LoadScene("ExampleScene");
}
void OnDropdownValueChanged(int index) {
LanguageOption languageOption = languageOptions[index];
//SpeechRecognizer.SetDetectionLanguage(languageOption.id);
SpeechRecognizer.SetDetectionLanguage("en-US");
}
void OnSupportedLanguagesFetched(List<LanguageOption> languages) {
List<Dropdown.OptionData> dropdownOptions = new List<Dropdown.OptionData>();
foreach (LanguageOption langOption in languages) {
dropdownOptions.Add(new Dropdown.OptionData(langOption.displayName));
}
//dropdownOptions.Add(new Dropdown.OptionData("English (United States)"));
dropdown.AddOptions(dropdownOptions);
languageOptions = languages;
}
}
}
ExampleScene
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using KKSpeech;
public class RecordingCanvas : MonoBehaviour {
public Button startRecordingButton;
public Text resultText;
void Start() {
if (SpeechRecognizer.ExistsOnDevice()) {
SpeechRecognizerListener listener = GameObject.FindObjectOfType<SpeechRecognizerListener>();
listener.onAuthorizationStatusFetched.AddListener(OnAuthorizationStatusFetched);
listener.onAvailabilityChanged.AddListener(OnAvailabilityChange);
listener.onErrorDuringRecording.AddListener(OnError);
listener.onErrorOnStartRecording.AddListener(OnError);
listener.onFinalResults.AddListener(OnFinalResult);
listener.onPartialResults.AddListener(OnPartialResult);
listener.onEndOfSpeech.AddListener(OnEndOfSpeech);
startRecordingButton.enabled = false;
SpeechRecognizer.RequestAccess();
} else {
resultText.text = "Sorry, but this device doesn't support speech recognition";
startRecordingButton.enabled = false;
}
}
public void OnFinalResult(string result) {
resultText.text = result;
}
public void OnPartialResult(string result) {
resultText.text = result;
}
public void OnAvailabilityChange(bool available) {
startRecordingButton.enabled = available;
if (!available) {
resultText.text = "Speech Recognition not available";
} else {
resultText.text = "Say something :-)";
}
}
public void OnAuthorizationStatusFetched(AuthorizationStatus status) {
switch (status) {
case AuthorizationStatus.Authorized:
startRecordingButton.enabled = true;
break;
default:
startRecordingButton.enabled = false;
resultText.text = "Cannot use Speech Recognition, authorization status is " + status;
break;
}
}
public void OnEndOfSpeech() {
startRecordingButton.GetComponentInChildren<Text>().text = "Start Recording";
}
public void OnError(string error) {
Debug.LogError(error);
resultText.text = "Something went wrong... Try again! \n [" + error + "]";
startRecordingButton.GetComponentInChildren<Text>().text = "Start Recording";
}
public void OnStartRecordingPressed() {
if (SpeechRecognizer.IsRecording()) {
SpeechRecognizer.StopIfRecording();
startRecordingButton.GetComponentInChildren<Text>().text = "Start Recording";
} else {
SpeechRecognizer.StartRecording(true);
startRecordingButton.GetComponentInChildren<Text>().text = "Stop Recording";
resultText.text = "Say something :-)";
}
}
}