Was ist der Unterschied zwischen System.Speech.Recognition und Microsoft.Speech.Recognition?

79

In .NET gibt es zwei ähnliche Namespaces und Assemblys für die Spracherkennung. Ich versuche die Unterschiede zu verstehen und wann es angebracht ist, den einen oder anderen zu verwenden.

Es gibt System.Speech.Recognition aus der Assembly System.Speech (in System.Speech.dll). System.Speech.dll ist eine Kern-DLL in der .NET Framework-Klassenbibliothek 3.0 und höher

Es gibt auch Microsoft.Speech.Recognition aus der Assembly Microsoft.Speech (in microsoft.speech.dll). Microsoft.Speech.dll ist Teil des UCMA 2.0 SDK

Ich finde die Dokumente verwirrend und habe folgende Fragen:

Laut System.Speech.Recognition handelt es sich um "The Windows Desktop Speech Technology". Bedeutet dies, dass es nicht auf einem Server-Betriebssystem oder nicht für Anwendungen in großem Maßstab verwendet werden kann?

Das UCMA 2.0 Speech SDK ( http://msdn.microsoft.com/en-us/library/dd266409%28v=office.13%29.aspx ) gibt an, dass Microsoft Office Communications Server 2007 R2 als Voraussetzung erforderlich ist. Bei Konferenzen und Besprechungen wurde mir jedoch mitgeteilt, dass ich die UCMA 2.0-Sprach-API ohne OCS verwenden kann, wenn ich keine OCS-Funktionen wie Präsenz und Workflow benötige. Ist das wahr?

Was sind die Unterschiede zwischen den beiden APIs, wenn ich eine einfache Erkennungs-App für eine Serveranwendung erstelle (z. B. wollte ich Voicemails automatisch transkribieren) und keine OCS-Funktionen benötige?

Michael Levy
quelle

Antworten:

101

Die kurze Antwort lautet, dass Microsoft.Speech.Recognition die Serverversion von SAPI verwendet, während System.Speech.Recognition die Desktop-Version von SAPI verwendet.

Die APIs sind größtenteils gleich, aber die zugrunde liegenden Engines sind unterschiedlich. In der Regel ist die Server-Engine so konzipiert, dass sie Audio in Telefonqualität für Befehls- und Steuerungsanwendungen akzeptiert. Die Desktop-Engine akzeptiert Audio in höherer Qualität sowohl für Befehls- und Steuerungs- als auch für Diktieranwendungen.

Sie können System.Speech.Recognition auf einem Server-Betriebssystem verwenden, es ist jedoch nicht annähernd so skalierbar wie Microsoft.Speech.Recognition.

Die Unterschiede bestehen darin, dass die Server-Engine keine Schulung benötigt und mit Audio von geringerer Qualität arbeitet, jedoch eine geringere Erkennungsqualität als die Desktop-Engine aufweist.

Eric Brown
quelle
51

Ich fand Erics Antwort wirklich hilfreich. Ich wollte nur einige weitere Details hinzufügen, die ich gefunden habe.

Mit System.Speech.Recognition können die Desktop-Erkenner programmiert werden. SAPI- und Desktop-Erkenner haben die Produkte ausgeliefert:

  • Windows XP: SAPI v5.1 und kein Erkenner
  • Windows XP Tablet Edition: SAPI v5.1 und Recognizer v6.1
  • Windows Vista: SAPI v5.3 und Recognizer v8.0
  • Windows 7: SAPI v5.4 und Recognizer v8.0?

Server werden mit SAPI geliefert, aber ohne Erkenner:

  • Windows Server 2003: SAPI v5.1 und kein Erkenner
  • Windows Server 2008 und 2008 R2: SAPI v5.3? und kein Erkenner

Desktop-Erkenner wurden auch in Produkten wie Office ausgeliefert.

  • Microsoft Office 2003: Recognizer v6.1

Microsoft.Speech.Recognition kann zum Programmieren der Servererkenner verwendet werden. Servererkenner wurden in den Produkten ausgeliefert:

  • Sprachserver (verschiedene Versionen)
  • Office Communications Server (OCS) (verschiedene Versionen)
  • UCMA - eine verwaltete API für OCS, die (glaube ich) einen weiterverteilbaren Erkenner enthält
  • Microsoft Server Speech Platform - Erkenner v10.2

Das vollständige SDK für die Microsoft Server Speech Platform 10.2-Version finden Sie unter http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4 . Die Sprachmaschine ist ein kostenloser Download. Version 11 ist jetzt unter http://www.microsoft.com/download/en/details.aspx?id=27226 verfügbar .

Informationen und Downloads zu Microsoft Speech Platform SDK 11 finden Sie unter:

Desktop-Erkenner können inproc ausgeführt oder gemeinsam genutzt werden. Freigegebene Erkenner sind auf dem Desktop nützlich, auf dem Sprachbefehle zur Steuerung offener Anwendungen verwendet werden. Servererkenner können nur inproc ausführen. Inproc-Erkenner werden verwendet, wenn eine einzelne Anwendung den Erkenner verwendet oder wenn WAV-Dateien oder Audiostreams erkannt werden müssen (gemeinsam genutzte Erkenner können keine Audiodateien verarbeiten, nur Audio von Eingabegeräten).

Nur Desktop-Spracherkenner enthalten eine Diktatgrammatik (vom System bereitgestellte Grammatik für das Diktieren von Freitext). Die Klasse System.Speech.Recognition.DictationGrammar hat keine Ergänzung im Microsoft.Speech-Namespace.

Sie können die APIs verwenden, um Ihre installierten Recongizer abzufragen

  • Desktop: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()
  • Server: Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()

Ich habe festgestellt, dass ich auch anhand der Registrierungsschlüssel sehen kann, welche Erkenner installiert sind:

  • Desktop-Erkenner: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Recognizers \ Tokens
  • Servererkenner: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech Server \ v10.0 \ Recognizers \ Tokens

--- Update ---

Wie in Microsoft Speech Recognition beschrieben - welche Referenz muss ich hinzufügen? , Microsoft.Speech ist auch die API, die für den Kinect-Erkenner verwendet wird. Dies ist im MSDN-Artikel http://msdn.microsoft.com/en-us/library/hh855387.aspx dokumentiert

Michael Levy
quelle
3
Wenn ich die Dokumente richtig gelesen habe, enthalten nur Desktop-Spracherkenner die Diktatgrammatik (vom System bereitgestellte Grammatik für das Diktieren von freiem Text). Die Klasse System.Speech.Recognition.DictationGrammar hat keine Ergänzung im Microsoft.Speech-Namespace.
Michael Levy
Laut MSDN-API gibt es in C # ein DictationGrammar und ein WildcardGrammar (und ich benutze es). Aber ich weiß nicht, wie ich es über XML aktivieren soll (Hacking Parser?). Siehe auch: stackoverflow.com/questions/12101120/…
Jean-Philippe Encausse
7

Hier ist der Link für die Sprachbibliothek (MS Server Speech Platform):

Microsoft Server Speech Platform 10.1 veröffentlicht (SR und TTS in 26 Sprachen)

Switch Commerce
quelle
1
10.2 wurde kürzlich ebenfalls veröffentlicht. microsoft.com/downloads/en/…
Michael Levy
Danke für die Information. Ich sehe, dass jetzt ein Grammatikvalidator enthalten ist. Ich habe mir den Kopf gebrochen und versucht, Fehler in den von mir erstellten zu finden. Wo soll ich nach Neuigkeiten über zukünftige Veröffentlichungen Ausschau halten?
Switch Commerce
"Wo soll ich nach Neuigkeiten über zukünftige Veröffentlichungen Ausschau halten?" ist eine tolle Frage !!! microsoft.com/speech/developers.aspx ist veraltet. Die Sprachblogs wie blogs.msdn.com/b/speak und blogs.msdn.com/b/speech enthalten nicht immer die neuesten Updates. Sie können gotspeech.net oder verwandte Websites wie gotuc.net ausprobieren . Aber wie Sie sehen, habe ich auch keine großartige Quelle gefunden, um auf dem Laufenden zu bleiben.
Michael Levy
1
Die aktuellste Version zum Zeitpunkt des Schreibens ist Version 11 - microsoft.com/en-us/download/details.aspx?id=27225
George Birbilis
Übrigens, da der Grammatikvalidator oben erwähnt wurde, finden Sie unter msdn.microsoft.com/en-us/library/hh378407%28v=office.14%29.aspx eine Liste der Grammatikwerkzeuge
George Birbilis
4

Anscheinend hat Microsoft einen Artikel geschrieben, der die Unterschiede zwischen Microsoft Speech Platform und Windows SAPI aufklärt - https://msdn.microsoft.com/en-us/library/jj127858.aspx . Ein Unterschied, den ich beim Konvertieren des Spracherkennungscodes für Kinect von Microsoft.Speech in System.Speech (siehe http://github.com/birbilis/Hotspotizer ) festgestellt habe, war, dass ersterer SGRS-Grammatiken mit Tag-Format = Semantik / 1.0- unterstützt Literale, während letzteres dies nicht tut und Sie in Semantik / 1.0 konvertieren müssen, indem Sie x in out = "x" ändern; bei Tags

George Birbilis
quelle
3
Übrigens kann mein SpeechLib-Code nützlich sein ( SpeechLib.codeplex.com ). Sie können die System.Speech-Referenz von dort entfernen und stattdessen Microsoft.Speech verwenden und das entsprechende Symbol für die bedingte Kompilierung (siehe Quellen) festlegen, um Microsoft.Speech im Code zu verwenden (wirkt sich hauptsächlich auf die using-Klauseln aus, der Rest des Codes ist identisch).
George Birbilis
1
Die im obigen Kommentar erwähnte SpeechLib wurde auf github.com/zoomicon/SpeechLib verschoben (da Codeplex jetzt im Archivmodus eingefroren ist)
George Birbilis