¿Cuál es la diferencia entre System.Speech.Recognition y Microsoft.Speech.Recognition?

79

Hay dos espacios de nombres y ensamblados similares para el reconocimiento de voz en .NET. Estoy tratando de entender las diferencias y cuándo es apropiado usar una u otra.

Hay System.Speech.Recognition del ensamblado System.Speech (en System.Speech.dll). System.Speech.dll es una DLL principal en la biblioteca de clases de .NET Framework 3.0 y posterior

También está Microsoft.Speech.Recognition del ensamblado Microsoft.Speech (en microsoft.speech.dll). Microsoft.Speech.dll es parte del SDK UCMA 2.0

Encuentro los documentos confusos y tengo las siguientes preguntas:

System.Speech.Recognition dice que es para "La tecnología de voz de escritorio de Windows", ¿significa esto que no se puede usar en un sistema operativo de servidor o no se puede usar para aplicaciones de gran escala?

UCMA 2.0 Speech SDK ( http://msdn.microsoft.com/en-us/library/dd266409%28v=office.13%29.aspx ) dice que requiere Microsoft Office Communications Server 2007 R2 como requisito previo. Sin embargo, en conferencias y reuniones me han dicho que si no necesito funciones de OCS como presencia y flujo de trabajo, puedo usar UCMA 2.0 Speech API sin OCS. ¿Es esto cierto?

Si estoy creando una aplicación de reconocimiento simple para una aplicación de servidor (digamos que quería transcribir automáticamente los correos de voz) y no necesito funciones de OCS, ¿cuáles son las diferencias entre las dos API?

Michael Levy
fuente

Respuestas:

102

La respuesta corta es que Microsoft.Speech.Recognition usa la versión de servidor de SAPI, mientras que System.Speech.Recognition usa la versión de escritorio de SAPI.

Las API son básicamente las mismas, pero los motores subyacentes son diferentes. Normalmente, el motor del servidor está diseñado para aceptar audio con calidad telefónica para aplicaciones de comando y control; El motor de escritorio está diseñado para aceptar audio de mayor calidad para aplicaciones de dictado y comando y control.

Puede usar System.Speech.Recognition en un sistema operativo de servidor, pero no está diseñado para escalar tan bien como Microsoft.Speech.Recognition.

Las diferencias son que el motor del servidor no necesitará entrenamiento y funcionará con audio de menor calidad, pero tendrá una calidad de reconocimiento menor que el motor de escritorio.

Eric Brown
fuente
52

Encontré la respuesta de Eric realmente útil, solo quería agregar algunos detalles más que encontré.

System.Speech.Recognition se puede utilizar para programar los reconocedores de escritorio. Los reconocedores SAPI y Desktop se han incluido en los productos:

  • Windows XP: SAPI v5.1 y sin reconocedor
  • Windows XP Tablet Edition: SAPI v5.1 y Recognizer v6.1
  • Windows Vista: SAPI v5.3 y Recognizer v8.0
  • Windows 7: SAPI v5.4 y Recognizer v8.0?

Los servidores vienen con SAPI, pero sin reconocedor:

  • Windows Server 2003: SAPI v5.1 y sin reconocedor
  • Windows Server 2008 y 2008 R2: SAPI v5.3? y sin reconocedor

Los reconocedores de escritorio también se han incluido en productos como Office.

  • Microsoft Office 2003: Recognizer v6.1

Microsoft.Speech.Recognition se puede utilizar para programar los reconocedores del servidor. Los reconocedores de servidor se incluyen en los productos:

  • Speech Server (varias versiones)
  • Office Communications Server (OCS) (varias versiones)
  • UCMA, que es una API administrada para OCS que (creo) incluía un reconocedor redistribuible
  • Plataforma de voz del servidor de Microsoft: reconocedor v10.2

El SDK completo para la versión 10.2 de Microsoft Server Speech Platform está disponible en http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4 . El motor de voz se puede descargar gratis. La versión 11 ahora está disponible en http://www.microsoft.com/download/en/details.aspx?id=27226 .

Para obtener información y descargas de Microsoft Speech Platform SDK 11, consulte:

Los reconocedores de escritorio están diseñados para ejecutarse en proceso o compartidos. Los reconocedores compartidos son útiles en el escritorio donde los comandos de voz se utilizan para controlar cualquier aplicación abierta. Los reconocedores de servidor solo pueden ejecutar inproc. Los reconocedores de Inproc se utilizan cuando una sola aplicación usa el reconocedor o cuando es necesario reconocer archivos WAV o secuencias de audio (los reconocedores compartidos no pueden procesar archivos de audio, solo audio de dispositivos de entrada).

Solo los reconocedores de voz de escritorio incluyen una gramática de dictado (gramática proporcionada por el sistema que se utiliza para el dictado de texto libre). La clase System.Speech.Recognition.DictationGrammar no tiene complemento en el espacio de nombres Microsoft.Speech.

Puede usar el uso de las API para consultar y determinar sus recongizadores instalados

  • Escritorio: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()
  • Servidor: Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()

Descubrí que también puedo ver qué reconocedores están instalados mirando las claves de registro:

  • Reconocedores de escritorio: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Recognizers \ Tokens
  • Reconocedores de servidor: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech Server \ v10.0 \ Recognizers \ Tokens

--- Actualización ---

Como se explica en Reconocimiento de voz de Microsoft, ¿qué referencia debo agregar? , Microsoft.Speech es también la API utilizada para el reconocedor de Kinect. Esto está documentado en el artículo de MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx

Michael Levy
fuente
3
Si leo los documentos correctamente, solo los reconocedores de voz de escritorio incluyen la gramática del dictado (gramática proporcionada por el sistema que se utiliza para el dictado de texto libre). La clase System.Speech.Recognition.DictationGrammar no tiene complemento en el espacio de nombres Microsoft.Speech.
Michael Levy
Según la API de MSDN, hay un DictationGrammar y un WildcardGrammar en C # (y yo lo uso). Pero no sé cómo activarlo a través de XML (¿analizador de piratería?) Ver también: stackoverflow.com/questions/12101120/…
Jean-Philippe Encausse
Instalé el idioma italiano descargado de microsoft.com/en-us/download/details.aspx?id=27224 pero System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers muestra en-US como único idioma activo para el reconocimiento de voz. ¿Me falta algo?
POW
7

Aquí está el enlace para la biblioteca de voz (plataforma de voz del servidor MS):

Lanzamiento de Microsoft Server Speech Platform 10.1 (SR y TTS en 26 idiomas)

Cambiar comercio
fuente
2
10.2 también fue lanzado recientemente. microsoft.com/downloads/en/…
Michael Levy
Gracias por la info. Veo que ahora incluye un validador gramatical. Me estaba rompiendo la cabeza tratando de encontrar errores en los que estoy creando. ¿Dónde debo seguir buscando noticias sobre lanzamientos futuros?
Switch Commerce
"¿Dónde debo seguir buscando noticias sobre lanzamientos futuros?" es una gran pregunta !!! microsoft.com/speech/developers.aspx no está actualizado. Los blogs de discursos como blogs.msdn.com/b/speak y blogs.msdn.com/b/speech no siempre tienen las últimas actualizaciones. Puede probar gotspeech.net o sitios relacionados como gotuc.net . Pero como puede ver, tampoco he encontrado una gran fuente para mantenerme actualizado.
Michael Levy
1
la más reciente en el momento de escribir este artículo es la versión 11 - microsoft.com/en-us/download/details.aspx?id=27225
George Birbilis
por cierto, dado que el validador gramatical se mencionó anteriormente, consulte msdn.microsoft.com/en-us/library/hh378407%28v=office.14%29.aspx para obtener una lista de herramientas gramaticales
George Birbilis
4

Parece que Microsoft escribió un artículo que aclara las diferencias entre Microsoft Speech Platform y Windows SAPI: https://msdn.microsoft.com/en-us/library/jj127858.aspx . Una diferencia que encontré al convertir el código de reconocimiento de voz para Kinect de Microsoft.Speech a System.Speech (ver http://github.com/birbilis/Hotspotizer ) fue que el primero es compatible con las gramáticas SGRS con tag-format = semantics / 1.0- literales, mientras que el segundo no lo hace y tienes que convertir a semántica / 1.0 cambiando x por out = "x"; en las etiquetas

George Birbilis
fuente
3
por cierto, mi código SpeechLib puede resultarle útil ( SpeechLib.codeplex.com ). Puede eliminar la referencia System.Speech desde allí y usar Microsoft.Speech en su lugar y establecer el símbolo de compilación condicional apropiado (consulte las fuentes) para usar Microsoft.Speech en el código (afecta principalmente a las cláusulas using, el resto del código es idéntico)
George Birbilis
1
el SpeechLib mencionado en el comentario anterior se ha trasladado a github.com/zoomicon/SpeechLib (ya que Codeplex está congelado al modo de archivo ahora)
George Birbilis