2010-06-04 5 views
66

Es gibt zwei ähnliche Namespaces und Assemblies für die Spracherkennung in .NET. Ich versuche, die Unterschiede zu verstehen und wenn es angebracht ist, das eine oder das andere zu verwenden.Was ist der Unterschied zwischen System.Speech.Recognition und Microsoft.Speech.Recognition?

Es gibt System.Speech.Recognition von der Assembly System.Speech (in System.Speech.dll). System.Speech.dll ist eine Kern-DLL in der .NET Framework-Klassenbibliothek 3.0 und später

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

ich die Dokumentation verwirrend finden, und ich habe folgende Fragen:

System.Speech.Recognition sagt, es ist für "The Windows Desktop Speech Technology", tut Dies bedeutet, dass es nicht auf einem Server-Betriebssystem verwendet werden kann 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) besagt, dass Microsoft Office Communications Server 2007 R2 als Voraussetzung erforderlich ist. Bei Konferenzen und Meetings wurde mir jedoch gesagt, dass ich die UCMA 2.0 Speech API ohne OCS verwenden kann, wenn ich keine OCS-Funktionen wie Anwesenheit und Workflow benötige. Ist das wahr?

Wenn ich eine einfache Erkennungs-App für eine Server-Anwendung erstelle (ich wollte Voice-Mails automatisch transkribieren) und brauche ich keine OCS-Funktionen, was sind die Unterschiede zwischen den beiden APIs?

Antwort

89

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

Die APIs sind meistens gleich, aber die zugrunde liegenden Engines sind unterschiedlich. In der Regel ist die Server-Engine dazu ausgelegt, Audio in Telefonqualität für Befehle & Steueranwendungen zu akzeptieren; Die Desktop-Engine ist so ausgelegt, dass sie Audio mit höherer Qualität sowohl für Steuerungs- als auch für Diktierungsanwendungen des Befehls & akzeptiert.

Sie können System.Speech.Recognition auf einem Server-Betriebssystem verwenden, aber es ist nicht so gut skalierbar wie Microsoft.Speech.Recognition.

Die Unterschiede bestehen darin, dass die Server-Engine nicht trainiert werden muss und mit schlechterer Audioqualität arbeitet, aber eine niedrigere Erkennungsqualität als die Desktop-Engine aufweist.

46

Ich fand Eric’s answer wirklich hilfreich, ich wollte nur einige weitere Details hinzufügen, die ich gefunden habe.

System.Speech.Recognition kann verwendet werden, um die Desktop-Erkennungen zu programmieren. SAPI und Desktop-Erkenner haben in den Produkten ausgeliefert:

  • Windows XP: SAPI v5.1 und kein Erkennungs
  • 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 kommen mit SAPI, aber keine Erkennungs:

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

Desktop Recognizer haben auch in Produkten wie Büro geliefert.

  • Microsoft Office 2003: Recognizer v6.1

Microsoft.Speech.Recognition kann die Server-Erkenner zu programmieren. Server-Erkenner haben in den Produkten ausgeliefert:

  • Speech Server (verschiedene Versionen)
  • Office Communications Server (OCS) (verschiedene Versionen)
  • UCMA - das ist eine verwaltete API für OCS ist, die (ich glaube) eine verteilbare Erkennungs enthalten
  • Microsoft Server Speech Platform - Erkenner v10.2

der komplette SDK für die Microsoft Server Speech Platform 10.2-Version ist beiverfügbar. Die Sprach-Engine ist ein kostenloser Download. Version 11 ist jetzt verfügbar unter http://www.microsoft.com/download/en/details.aspx?id=27226.

Für Microsoft Speech Platform SDK 11 Infos und Downloads finden Sie unter:

Desktop-Erkennungen sind so konzipiert, dass sie inproc oder shared ausgeführt werden können. Freigegebene Recognizer sind auf dem Desktop nützlich, wo Sprachbefehle zum Steuern offener Anwendungen verwendet werden. Server Recognizer können nur inproc ausgeführt werden. Inproc-Recognizer werden verwendet, wenn eine einzelne Anwendung den Recognizer verwendet oder wenn WAV-Dateien oder Audio-Streams erkannt werden müssen (Shared Recognizer können keine Audiodateien verarbeiten, nur Audio von Eingabegeräten).

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

können Sie verwenden, um die APIs verwenden, um Ihre installierten recongizers Abfrage ermitteln

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

fand ich, dass ich auch sehen kann, was Erkenner, indem man die Registry-Schlüssel installiert sind:

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

--- --- Aktualisierung

Wie in Microsoft Speech Recognition - what reference do I have to add? diskutiert, ist Microsoft.Speech auch die API für die Kinect-Erkennung verwendet. Dies ist in der MSDN-Artikel dokumentiert http://msdn.microsoft.com/en-us/library/hh855387.aspx

+2

Wenn ich die Dokumente richtig lese, enthalten nur Desktop-Spracherkenner die Diktatgrammatik (System-Grammatik für das Freitextdiktieren). Die Klasse System.Speech.Recognition.DictationGrammar hat keine Ergänzung im Microsoft.Speech-Namespace. –

+0

Entsprechend MSDN API gibt es ein DictationGrammar und ein WildcardGrammar in C# (und ich benutze es). Aber ich weiß nicht, wie man es durch XML (Hacker-Parser) aktivieren kann. Siehe auch: http://stackoverflow.com/questions/12101120/matching-wildcard-dictation-in-microsoft-speech-grammar –

6

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

Microsoft Server Speech Platform 10.1 Released (SR and TTS in 26 languages)

+1

10.2 wurde vor kurzem veröffentlicht auch. http://www.microsoft.com/downloads/en/details.aspx?FamilyID=bb0f72cb-b86b-46d1-bf06-665895a313c7 –

+0

Danke für die Info. Ich sehe, dass jetzt ein Grammatikprüfer beinhaltet. Ich habe mir den Kopf gebrochen und versucht, Fehler in denen zu finden, die ich erschaffe. Wo sollte ich nach Neuigkeiten über zukünftige Veröffentlichungen Ausschau halten? –

+0

"Wo sollte ich weiter nach Neuigkeiten über zukünftige Veröffentlichungen Ausschau halten?" ist eine gute Frage !!! http://www.microsoft.com/speech/developers.aspx ist veraltet. Die Sprachblogs wie http://blogs.msdn.com/b/speak/ und http://blogs.msdn.com/b/speech/ haben nicht immer die neuesten Updates. Sie können versuchen, http://gotspeech.net/ oder die verwandten Websites wie http://gotuc.net/. Aber wie Sie sehen können, habe ich auch keine gute Quelle gefunden, um auf dem Laufenden zu bleiben. –

2

scheint Microsoft schrieb einen Artikel, der die Dinge in Bezug auf die Unterschiede zwischen Microsoft löscht Sprachplattform und Windows SAPI - https://msdn.microsoft.com/en-us/library/jj127858.aspx. Ein Unterschied, den ich beim Konvertieren von Spracherkennung Code für Kinect von Microsoft.Speech zu System.Speech fand (siehe http://github.com/birbilis/Hotspotizer) war, dass ersteres unterstützt SGRS-Grammatiken mit Tag-Format = Semantik/1.0-Literale, während der letztere nicht und Sie müssen in Semantik/1.0 umwandeln, indem Sie x in out = "x" ändern; bei Tags

+1

BTW, können Sie meinen SpeechLib Code nützlich finden (http://SpeechLib.codeplex.com) . Sie können die System.Speech-Referenz von dort entfernen und stattdessen Microsoft.Speech verwenden und das entsprechende bedingte Kompilierungssymbol (siehe die Quellen) festlegen, um Microsoft.Speech im Code zu verwenden (betrifft hauptsächlich die using-Klauseln, der Rest des Codes ist identisch) –

Verwandte Themen