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

Hay dos espacios de nombres y conjuntos similares para el reconocimiento de voz en .NET. Intento 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 .NET Framework 3.0 y posterior

También hay Microsoft.Speech.Recognition del ensamblado Microsoft.Speech (en microsoft.speech.dll). Microsoft.Speech.dll es parte del SDK de 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?

El SDK de voz de UCMA 2.0 ( 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, me han dicho en conferencias y reuniones que si no necesito funciones de OCS como presencia y flujo de trabajo, puedo usar la API de voz de UCMA 2.0 sin OCS. ¿Es esto cierto?

Si estoy construyendo 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 las características de OCS, ¿cuáles son las diferencias entre las dos API?

La respuesta corta es que Microsoft.Speech.Recognition utiliza la versión de servidor de SAPI, mientras que System.Speech.Recognition utiliza 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 de 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 comando y control y de dictado.

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

Las diferencias son que el motor del Servidor no necesitará capacitación y funcionará con audio de menor calidad, pero tendrá una calidad de reconocimiento inferior a la del motor de Escritorio.

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

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

  • Windows XP: SAPI v5.1 y sin reconocedor
  • Edición de Windows XP Tablet: 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 no 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 envían en productos como la oficina.

  • Microsoft Office 2003: Recognizer v6.1

Microsoft.Speech.Recognition se puede usar para progtwigr los reconocedores de servidor. Los reconocedores de servidor se han enviado 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 de Microsoft Server – reconocedor v10.2

El SDK completo para la versión de Microsoft Server Speech Platform 10.2 está disponible en http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4 . El motor de voz es una descarga gratuita. La versión 11 ya 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 inproc o compartidos. Los reconocedores compartidos son útiles en el escritorio donde los comandos de voz se usan para controlar cualquier aplicación abierta. Los reconocedores de servidor solo pueden ejecutarse inproc. Los reconocedores de Inproc se usan cuando una sola aplicación usa el reconocedor o cuando se deben reconocer archivos wav o 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 utilizada para el dictado de texto libre). La clase System.Speech.Recognition.DictationGrammar no tiene complemento en el espacio de nombres Microsoft.Speech.

Puedes utilizar las API para consultar determinar tus reconfiguradores 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 menciona en Microsoft Speech Recognition, ¿qué referencia debo agregar? , Microsoft.Speech es también la API utilizada para el reconocedor Kinect. Esto está documentado en el artículo de MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx

Aquí está el enlace para Speech Library (MS Server Speech Platform):

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

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 admite gramáticas SGRS con tag-format = semántica / 1.0- literales, mientras que el último no y usted tiene que convertir a semántica / 1.0 cambiando x a out = “x”; en las tags