Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Работа с речью в C#

#c_sharp


Здравствуйте, при работе с распознаванием речи возникает ошибка. Код программы:    

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Diagnostics;

namespace VoiceRecognizationDemoApp
{
    public partial class Form1 : Form
    {
        SpeechSynthesizer ss = new SpeechSynthesizer();
        PromptBuilder pb = new PromptBuilder();
        SpeechRecognitionEngine sre = new SpeechRecognitionEngine();
        Choices clist;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        clist = new Choices();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Enabled = false;
        button2.Enabled = true;
        clist.Add(new string[] { "hello", "how are you", "what is the current time",
"open chrome", "thank you", "close"});
        Grammar gr = new Grammar(new GrammarBuilder(clist));
        try
        {
            sre.RequestRecognizerUpdate();
            sre.LoadGrammar(gr);
            sre.SpeechRecognized += sre_SpeechRecognized;
            sre.SetInputToDefaultAudioDevice();
            sre.RecognizeAsync(RecognizeMode.Multiple); 
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }
    }

    private void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        switch (e.Result.Text.ToString())
        {
            case "hello":   
                ss.SpeakAsync("Hello Mihail");
                break;
            case "how are you":
                ss.SpeakAsync("i am doing great Mihail. How about you?");
                break;
            case "what is the current time":
                ss.SpeakAsync("current time is" + DateTime.Now.ToLongTimeString());
                break;
            case "thank you":
                ss.SpeakAsync("not at all");
                break;
            case "open chrome":
                Process.Start("chrome", "http://www.google.com/");
                break;
            case "close":
                Application.Exit();
                break;
        }
        textBox1.Text += e.Result.Text.ToString() + Environment.NewLine;
    }

    private void button2_Click(object sender, EventArgs e)
        {
            sre.RecognizeAsyncStop();
            button1.Enabled = true;
            button2.Enabled = false;
        }
    }
}


Для работы с речью скачивал Microsoft Speech SDK 5.1 и Microsoft Speech API 5.1.
Думаю что проблема находится именно в них. Делал все по примеру на Youtube. Прошу помочь.



Ошибка возникает здесь:


stack trace: 


  Поток 'vshost.LoadReference' (0x1f34) завершился с кодом 0 (0x0). 
  "VoiceRecognizationDemoApp.vshost.exe" (Управляемый (v4.0.30319)):
  Загружен  "C:\Users\Михаил\documents\visual studio 
  2012\Projects\VoiceRecognizationDemoApp\VoiceRecognizationDemoApp\bin\Debug\VoiceRecognizationDemoApp.exe",
  Символы загружены. Поток '<Без имени>' (0x39c) завершился с кодом
  0 (0x0). Первый этап обработки исключения типа 
  "System.Runtime.InteropServices.COMException" в System.Speech.dll 
  Первый этап обработки исключения типа "System.NullReferenceException"
  в     System.Speech.dll  Поток 'vshost.RunParkingWindow'
  (0x9a0) завершился с кодом 0 (0x0). Поток '<Без имени>' (0x1a68)
  завершился с кодом 0 (0x0). Программа "[8644]
  VoiceRecognizationDemoApp.vshost.exe: Трассировка     программы"
  завершилась с кодом 0 (0x0).  Программа "[8644]
  VoiceRecognizationDemoApp.vshost.exe: Управляемый 
  (v4.0.30319)" завершилась с кодом 0 (0x0).


Убрал

catch(Exception ex)


Вот что вышло:


Жму "Продолжить" возникает другое исключение:


Запускаю от администратора. Всеравно появляется ошибка:



  Подробная информация об использовании оперативной  (JIT) отладки 
  вместо данного диалогового  окна содержится в конце этого сообщения.
  
  ************** Текст исключения **************  System.Runtime.InteropServices.COMException
(0x80004005): В результате 
  вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL.    в 
  System.Speech.Recognition.RecognizerBase.Initialize(SapiRecognizer 
  recognizer, Boolean inproc)    в 
  System.Speech.Recognition.SpeechRecognitionEngine.get_RecoBase()    в 
  System.Speech.Recognition.SpeechRecognitionEngine.RequestRecognizerUpdate() 
  в VoiceRecognizationDemoApp.Form1.button1_Click(Object sender, 
  EventArgs e) в c:\Users\Михаил\Documents\Visual Studio 
  2012\Projects\VoiceRecognizationDemoApp\VoiceRecognizationDemoApp\Form1.cs:строка
  45    в System.Windows.Forms.Control.OnClick(EventArgs e)    в 
  System.Windows.Forms.Button.OnClick(EventArgs e)    в
  System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)    в
  System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons
  button, Int32 clicks)    в
  System.Windows.Forms.Control.WndProc(Message& m)    в
  System.Windows.Forms.ButtonBase.WndProc(Message& m)    в
  System.Windows.Forms.Button.WndProc(Message& m)    в
  System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg,
  IntPtr wparam, IntPtr lparam)
  
  ************** Загруженные сборки ************** mscorlib
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.34014 built by: FX45W81RTMGDR
      CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
  ---------------------------------------- VoiceRecognizationDemoApp
      Версия сборки: 1.0.0.0
      Версия Win32: 1.0.0.0
      CodeBase: file:///C:/Users/%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB/Documents/Visual%20Studio%202012/Projects/VoiceRecognizationDemoApp/VoiceRecognizationDemoApp/bin/Debug/VoiceRecognizationDemoApp.exe
  ---------------------------------------- System.Windows.Forms
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.34250 built by: FX452RTMGDR
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
  ---------------------------------------- System.Drawing
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
  ---------------------------------------- System
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.34239 built by: FX452RTMGDR
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
  ---------------------------------------- System.Speech
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Speech/v4.0_4.0.0.0__31bf3856ad364e35/System.Speech.dll
  ---------------------------------------- System.Configuration
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
  ---------------------------------------- System.Xml
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.34230 built by: FX452RTMGDR
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
  ---------------------------------------- mscorlib.resources
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
  ---------------------------------------- System.Windows.Forms.resources
      Версия сборки: 4.0.0.0
      Версия Win32: 4.0.30319.36213 built by: FX452RTMLDR
  
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
  
  ************** Оперативная отладка (JIT) ************** Для подключения оперативной
(JIT) отладки файл .config данного приложения
  или компьютера (machine.config) должен иметь значение jitDebugging,
  установленное в секции system.windows.forms. Приложение также должно
  быть скомпилировано с включенной отладкой.
  
  Например:
  
  
       
  
  При включенной отладке JIT любое необрабатываемое исключение
  пересылается отладчику JIT, зарегистрированному на данном компьютере,
  вместо того чтобы обрабатываться данным диалоговым окном.

    


Ответы

Ответ 1



catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } Убираешь эту дрянь и дебажишь. Заодно увидишь нормальный stack trace, а не информацию об успешном завершении. И попробуй запустить программу с правами администратора.

Ответ 2



Попробуйте SpeechRecognitionEngine явно инициализировать, с указанием языка, текст то у вас английский, а язык де-факто наверняка русский :) SpeechRecognitionEngine sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")); Описание

Комментариев нет:

Отправить комментарий