Frage gute Spracherkennung API


Ich arbeite an einem College-Projekt, in dem ich Spracherkennung verwende. Momentan entwickle ich es auf Windows 7 und benutze das system.speech API Paket welches mit .net kommt und ich mache es auf C #.

Das Problem, vor dem ich stehe, ist die Diktiererkennung, die nicht genau genug ist. Dann, wenn ich meine Anwendung starte, startet die Desktop-Spracherkennung automatisch. Das ist eine große Nuance für mich. Da die Wörter, die ich spreche, nicht klar genug sind, werden widersprüchliche Erkennungen als Befehle und Aktionen interpretiert, wie das Minimieren der Anwendungsumschaltung.

Dies ist ein kritischer Teil meiner App und ich bitte Sie, mir eine andere gute Sprach-API für andere als diesen Microsoft-Fehler anzubieten. Es wird gut sein, auch wenn es nur einfache Diktatgrammatik verstehen kann.


26
2018-03-29 04:15


Ursprung


Antworten:


Ich denke, die Desktop-Erkennung startet, weil Sie einen gemeinsamen Desktop-Erkenner verwenden. Sie sollten einen Inproc-Erkenner nur für Ihre Anwendung verwenden. Sie tun dies, indem Sie eine SpeechRecognitionEngine () in Ihrer Anwendung instanziieren.

Da Sie die Diktiergrammatik und den Desktop-Windows-Erkenner verwenden, glaube ich, dass es vom Sprecher trainiert werden kann, um seine Genauigkeit zu verbessern. Gehen Sie durch das Windows 7-Erkennungstraining und überprüfen Sie, ob sich die Genauigkeit verbessert.

Um mit .NET Rede zu beginnen, gibt es einen sehr guten Artikel, der vor einigen Jahren bei http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. Es ist wahrscheinlich der beste einführende Artikel, den ich bisher gefunden habe. Es ist etwas veraltet, aber sehr helfpul. (Die AppendResultKeyValue-Methode wurde nach der Betaversion gelöscht.)

Hier ist ein schnelles Beispiel, das eine der einfachsten .NET Windows Forms App zeigt, um eine Diktatgrammatik zu verwenden, die mir einfällt. Dies sollte unter Windows Vista oder Windows 7 funktionieren. Ich habe ein Formular erstellt. Hat einen Knopf darauf gelegt und den Knopf groß gemacht. Einen Verweis auf System.Speech und die Zeile hinzugefügt:

using System.Speech.Recognition;

Dann habe ich Button1 um den folgenden Event-Handler erweitert:

private void button1_Click(object sender, EventArgs e)
{         
    SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
    Grammar dictationGrammar = new DictationGrammar();
    recognizer.LoadGrammar(dictationGrammar);
    try
    {
        button1.Text = "Speak Now";
        recognizer.SetInputToDefaultAudioDevice();
        RecognitionResult result = recognizer.Recognize();
        button1.Text = result.Text;
    }
    catch (InvalidOperationException exception)
    {
        button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message);
    }
    finally
    {
        recognizer.UnloadAllGrammars();
    }                          
}

Ein wenig mehr Informationen zum Vergleich der verschiedenen Varianten von Sprach-Engines und APIs, die von Microsoft geliefert werden, finden Sie unter Was ist der Unterschied zwischen System.Speech.Recognition und Microsoft.Speech.Recognition??


32
2018-03-29 13:35