Nano Hash - криптовалюты, майнинг, программирование

Выбор в распознавании речи

Я создаю программу, похожую на JARVIS от Iron Man, основанную на распознавании речи. Я сделал один перед тем, как использовать это:

case "Open facebook":
    JARVIS.Speak("Opening facebook");
    Process.Start("www.facebook.com");
    break;`

Но теперь я хочу создать опцию поиска или даже поиграть. До сих пор я делал это для поиска на YouTube (одна грамматика и отлично работает), но когда я делаю два:

public partial class Form1 : Form
{
    SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
    SpeechSynthesizer JARVIS = new SpeechSynthesizer();
    string QEvent;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Choices artists = new Choices(new string[] { "bullet-for-my-valentine-curses", "black-veil-brides-saviour", "three-days-grace-wake-up" });
        Choices search = new Choices(new string[] { "bill-gates" });

        GrammarBuilder findServices = new GrammarBuilder("Play");
        findServices.Append(artists);
        GrammarBuilder google = new GrammarBuilder("Look");
        google.Append("for");
        google.Append(search);

        // Create a Grammar object from the GrammarBuilder and load it to the recognizer.
        Grammar servicesGrammar = new Grammar(findServices);
        Grammar lookingGrammar = new Grammar(google);
        _recognizer.RequestRecognizerUpdate();
        _recognizer.LoadGrammarAsync(servicesGrammar);
        _recognizer.LoadGrammarAsync(lookingGrammar);

        // Add a handler for the speech recognized event.
        _recognizer.SpeechRecognized +=
          new EventHandler<SpeechRecognizedEventArgs>(_recognizer_SpeechRecognized);

        // Configure the input to the speech recognizer.
        _recognizer.SetInputToDefaultAudioDevice();

        // Start asynchronous, continuous speech recognition.
        _recognizer.RecognizeAsync(RecognizeMode.Multiple);
    }
    void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        JARVIS.Speak("Playing" + e.Result.Words[1].Text);
        Process.Start("http://www.youtube.com/results?search_query=" + e.Result.Words[1].Text);
        JARVIS.Speak("Searching" + e.Result.Words[2].Text + " " + e.Result.Words[3].Text);
    }

}

Когда я говорю «Play» и название песни, открывается выбор (исполнители) для того, что я сказал. И работает с одной грамматикой, но когда я создаю две, как в приведенном выше коде, и когда я что-то говорю, программа останавливается и показывает ошибку.

{
    static class Program
    {

        // The main entry point for the application.
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1()); //this line show error
        }
    }
}

Итак, как я могу создать несколько грамматик, одну для поиска Google, одну для Википедии, и сохранить эту?

21.07.2013

  • Вы пробовали его отладить? Какая строка выбрасывает исключение и какое именно исключение вы получаете? 21.07.2013
  • Когда я отлаживаю программу, после того как я создал 2 грамматики, одну для youtube и одну для поиска в википедии, когда я говорю что-то, что есть в коде, например Play three days grace wake up (After I created 2 grammars) application перестает работать и эта часть using... namespace WindowsFormsApplication1 { static class Program { // The main entry point for the application. [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); <---this one show error } } } 21.07.2013
  • Если вы установите точку останова внутри конструктора Form1, попадется ли она? Если вы затем пройдетесь по вашему коду в отладчике, сможете ли вы точно определить строку, которая не работает? Пожалуйста, также отредактируйте свой вопрос и добавьте свой код для версии с двумя грамматиками, так как это именно та, которая на самом деле не работает. 21.07.2013

Ответы:


1

Я собираюсь позаимствовать у Раймонда Чена Psychic Debugging Talents (tm) и сказать, что ваша проблема здесь:

_recognizer.LoadGrammarAsync(servicesGrammar);
_recognizer.LoadGrammarAsync(lookingGrammar);

В частности, я подозреваю, что распознаватель может одновременно загружать только одну асинхронную грамматику. Если вы измените свой код на

_recognizer.LoadGrammar(servicesGrammar);
_recognizer.LoadGrammar(lookingGrammar);

или введите второй LoadGrammarAsync в onLoadGrammarCompleted, ваши проблемы исчезнут.

Но серьезно, вам нужно включить ошибку.

22.07.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..