Qual è la differenza tra System.Speech.Recognition e Microsoft.Speech.Recognition?

Ci sono due namespace e assembly simili per il riconoscimento vocale in .NET. Sto cercando di capire le differenze e quando è opportuno usare l’una o l’altra.

C’è System.Speech.Recognition dall’assembly System.Speech (in System.Speech.dll). System.Speech.dll è una DLL centrale nella libreria di classi .NET Framework 3.0 e successive

Esiste anche Microsoft.Speech.Recognition dall’assembly Microsoft.Speech (in microsoft.speech.dll). Microsoft.Speech.dll fa parte dell’SDK di UCMA 2.0

Trovo i documenti confusi e ho le seguenti domande:

System.Speech.Recognition dice che è per “The Windows Desktop Speech Technology”, significa che non può essere utilizzato su un sistema operativo del server o non può essere utilizzato per applicazioni su larga scala?

L’SDK 2.0 vocale di UCMA ( http://msdn.microsoft.com/en-us/library/dd266409%28v=office.13%29.aspx ) afferma che richiede Microsoft Office Communications Server 2007 R2 come prerequisito. Tuttavia, a conferenze e riunioni mi è stato detto che se non ho bisogno di funzionalità OCS come presenza e stream di lavoro, posso utilizzare l’API vocale di UCMA 2.0 senza OCS. È vero?

Se sto creando un’app di riconoscimento semplice per un’applicazione server (ad esempio, volevo trascrivere automaticamente i messaggi vocali) e non ho bisogno delle funzionalità di OCS, quali sono le differenze tra le due API?

La risposta breve è che Microsoft.Speech.Recognition utilizza la versione server di SAPI, mentre System.Speech.Recognition utilizza la versione desktop di SAPI.

Le API sono per lo più identiche, ma i motori sottostanti sono diversi. In genere, il motore Server è progettato per accettare audio di qualità telefonica per applicazioni di comando e controllo; il motore Desktop è progettato per accettare audio di qualità superiore sia per le applicazioni di comando e controllo che per quelle di dettatura.

È ansible utilizzare System.Speech.Recognition su un sistema operativo del server, ma non è progettato per ridimensionare quasi come Microsoft.Speech.Recognition.

Le differenze sono che il motore Server non avrà bisogno di addestramento e funzionerà con audio di qualità inferiore, ma avrà una qualità di riconoscimento inferiore rispetto al motore Desktop.

Ho trovato la risposta di Eric davvero utile, volevo solo aggiungere qualche altro dettaglio che ho trovato.

System.Speech.Recognition può essere utilizzato per programmare i riconoscitori desktop. I riconoscimenti SAPI e Desktop sono stati spediti nei prodotti:

  • Windows XP: SAPI v5.1 e nessun riconoscimento
  • Windows XP Tablet Edition: SAPI v5.1 e Recognizer v6.1
  • Windows Vista: SAPI v5.3 e Recognizer v8.0
  • Windows 7: SAPI v5.4 e Recognizer v8.0?

I server vengono forniti con SAPI, ma nessun riconoscimento:

  • Windows Server 2003: SAPI v5.1 e nessun riconoscimento
  • Windows Server 2008 e 2008 R2: SAPI v5.3? e nessun riconoscimento

I riconoscitori desktop sono anche stati spediti in prodotti come l’ufficio.

  • Microsoft Office 2003: Recognizer v6.1

Microsoft.Speech.Recognition può essere utilizzato per programmare i riconoscitori del server. I riconoscitori del server sono stati spediti nei prodotti:

  • Speech Server (varie versioni)
  • Office Communications Server (OCS) (varie versioni)
  • UCMA – che è un’API gestita per OCS che (credo) includeva un riconoscitore ridistribuibile
  • Piattaforma vocale Microsoft Server – recognizer v10.2

L’SDK completo per la versione 10.2 della piattaforma vocale di Microsoft Server è disponibile all’indirizzo http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4 . Il motore vocale è scaricabile gratuitamente. La versione 11 è ora disponibile all’indirizzo http://www.microsoft.com/download/en/details.aspx?id=27226 .

Per informazioni e download di Microsoft Speech Platform SDK 11, vedere:

I riconoscitori desktop sono progettati per essere eseguiti inproc o condivisi. I riconoscitori condivisi sono utili sul desktop dove vengono usati i comandi vocali per controllare qualsiasi applicazione aperta. I riconoscitori del server possono eseguire solo inproc. I riconoscimenti di Inproc vengono utilizzati quando una singola applicazione utilizza il riconoscimento o quando è necessario riconoscere file wav o flussi audio (i riconoscitori condivisi non possono elaborare file audio, solo l’audio dai dispositivi di input).

Solo i riconoscitori vocali desktop includono una grammatica di dettatura (la grammatica fornita dal sistema utilizzata per la dettatura di testo libero). La class System.Speech.Recognition.DictationGrammar non ha alcun complemento nello spazio dei nomi Microsoft.Speech.

È ansible utilizzare utilizzare le API per interrogare determinare i propri recongizers installati

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

Ho scoperto che posso anche vedere quali sono i riconoscitori installati guardando le chiavi di registro:

  • Riconoscimenti desktop: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Recognizers \ Tokens
  • Riconoscimenti server: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech Server \ v10.0 \ Recognizers \ Tokens

— Aggiornare —

Come discusso in Microsoft Speech Recognition – quale riferimento devo aggiungere? , Microsoft.Speech è anche l’API utilizzata per il riconoscimento Kinect. Questo è documentato nell’articolo MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx

Ecco il link per la libreria vocale (MS Speech Platform):

Rilasciata la piattaforma vocale Microsoft Server 10.1 (SR e TTS in 26 lingue)

Sembra che Microsoft abbia scritto un articolo che chiarisce le differenze tra Microsoft Speech Platform e Windows SAPI – https://msdn.microsoft.com/en-us/library/jj127858.aspx . Una differenza che mi sono trovato durante la conversione del codice di riconoscimento vocale per Kinect da Microsoft.Speech a System.Speech (vedere http://github.com/birbilis/Hotspotizer ) era che il primo supporta grammatiche SGRS con tag-format = semantics / 1.0- letterali, mentre il secondo no e devi convertire in semantica / 1.0 cambiando x in out = “x”; ai tag