2012-03-16 3 views
3

Donc, j'essaie la reconnaissance vocale pour C#, j'utilise System.Speech.Recognition, et, je cherchais sur Internet, en essayant plusieurs morceaux de code pour une reconnaissance vocale de base , le meilleur que je pouvais trouver était le suivant:PlatformNotSupportedException Utilisation de la reconnaissance vocale .NET

using System; 
using System.Text; 
using System.Windows.Forms; 
using System.Speech.Recognition; 

namespace SpeechRecognition 
{ 
    public partial class MainForm : Form 
    { 

     SpeechRecognitionEngine recognitionEngine; 


     public MainForm() 
     { 
      InitializeComponent(); 

      Initialize(); 
     } 

     private void Initialize() 
     { 
      recognitionEngine = new SpeechRecognitionEngine(); 
      recognitionEngine.SetInputToDefaultAudioDevice(); 
      recognitionEngine.SpeechRecognized += (s, args) => 
      { 
       foreach (RecognizedWordUnit word in args.Result.Words) 
       { 
        // You can change the minimun confidence level here 
        if (word.Confidence > 0.8f) 
         freeTextBox.Text += word.Text + " "; 
       } 
       freeTextBox.Text += Environment.NewLine; 
      }; 
     } 

     private void startButton_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       recognitionEngine.UnloadAllGrammars(); 
       recognitionEngine.LoadGrammar(new DictationGrammar()); 
       RecognitionResult result = recognitionEngine.Recognize(new TimeSpan(0, 0, 20)); 

       if (result != null) 
       { 
        foreach (RecognizedWordUnit word in result.Words) 
        { 

         freeTextBox.Text += word.Text + " "; 
        } 
       } 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

     private void startAsyncButton_Click(object sender, EventArgs e) 
     { 
      recognitionEngine.UnloadAllGrammars(); 
      recognitionEngine.LoadGrammar(new DictationGrammar()); 
      recognitionEngine.RecognizeAsync(RecognizeMode.Multiple); 
     } 



     private void stopButton_Click(object sender, EventArgs e) 
     { 
      recognitionEngine.RecognizeAsyncStop(); 
     } 


     private void startAsyncGrammarButton_Click(object sender, EventArgs e) 
     {   
      try 
      { 
       recognitionEngine.UnloadAllGrammars(); 

       Grammar cg = CreateSampleGrammar(); 
       recognitionEngine.LoadGrammar(cg); 
       recognitionEngine.RecognizeAsync(RecognizeMode.Multiple); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 


     private Grammar CreateSampleGrammar() 
     { 
      Choices commandChoices = new Choices("Calculator", "Notepad", "Internet Explorer", "Paint"); 
      GrammarBuilder grammarBuilder = new GrammarBuilder("Start"); 
      grammarBuilder.Append(commandChoices); 
      Grammar g = new Grammar(grammarBuilder); 
      g.Name = "Available programs"; 
      return g; 
     } 

    } 
} 

maintenant, j'essayé, et quelques autres, et ils ont tous donné lieu à la même erreur, une PlatformNotSupportedException, dans l'erreur, il dit: « il n'y a pas de reconnaissance installée".

Y a-t-il un moyen de contourner ce problème? Je cours Windows 7 64 bits.

+0

Veuillez ne pas préfixer vos titres avec "C#" et ainsi de suite. C'est ce que les tags sont pour. –

+0

Bien, je suis désolé. – Stan

+1

Pas besoin d'être désolé! Maintenant tu sais. –

Répondre

1

Le discours Plate-forme d'exécution 11 et le Platform SDK Speech 11 ne comprennent pas les langues d'exécution pour la reconnaissance vocale ou pour la synthèse vocale (TTS ou text-to-speech). Vous devez les installer séparément. Un langage d'exécution inclut le modèle de langage, le modèle acoustique et d'autres données nécessaires pour configurer un moteur de reconnaissance vocale pour effectuer une reconnaissance vocale ou un TTS dans une langue particulière. Il existe des langages d'exécution distincts pour la reconnaissance vocale ou la synthèse vocale. La version des langues d'exécution que vous téléchargez (par exemple, la version 11.0) doit correspondre à la version de Speech Platform Runtime que vous avez installée. Vous pouvez télécharger les langues d'exécution using this link.

De http://msdn.microsoft.com/en-us/library/hh362873.aspx.

Je pense que vous utilisez la version fournie avec .NET, mais il y a eu plusieurs révisions publiées hors bande depuis lors. Microsoft Speech Services v11 est la version actuelle à ce jour. Si vous installez le SDK, ajoutez une référence et modifiez votre espace de noms à Microsoft.Speech (au lieu de System.Speech), vous devez être mis à jour.

0

Quelle version de Windows 7 utilisez-vous? Quelle langue? Pouvez-vous utiliser les fonctions de dictée Windows 7 intégrées?

L'application du panneau de configuration de la reconnaissance vocale fonctionne-t-elle pour vous? Voir http://windows.microsoft.com/en-US/windows7/Setting-speech-options

Je pensais que toutes les versions de Windows 7 devraient être préinstallées. Toutefois, si vous utilisez une langue non prise en charge, elle peut ne pas l'être.

De https://stackoverflow.com/a/2998963/90236:

Vous pouvez utiliser utiliser les API pour interroger et déterminer votre installation recongizers Desktop: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()

je trouve que je peux voir également ce que les reconnaisseurs sont installés en regardant sur les clés de registre: Les reconnaisseurs de bureau: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Recognizers \ Tokens

Si vous voulez essayer un programme très simple qui pourrait aider, voir https://stackoverflow.com/a/4737003/90236

0

J'ai eu le même problème. Je viens de démarrer VisualStudio en mode débogage x86 et le fichier System.Speech.dll était utilisé pour x64. En mode Release (x64), cela a fonctionné. Peut-être que vous avez le même problème avec l'architecture CPU et l'installation de System.Speech.dll.