2010-06-04 12 views
66

Hay dos espacios de nombres y conjuntos similares para reconocimiento de voz en .NET. Intento entender las diferencias y cuándo es apropiado usar una u otra.¿Cuál es la diferencia entre System.Speech.Recognition y Microsoft.Speech.Recognition?

Hay System.Speech.Recognition desde el conjunto de 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 2.0 UCMA

puedo encontrar la documentación confuso y tengo las siguientes preguntas:

System.Speech.Recognition dice que es para "El escritorio de Windows Speech Technology", hace esto significa 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, 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?

Respuesta

89

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

Las API son en su mayoría iguales, pero los motores subyacentes son diferentes. Por lo general, el motor del servidor está diseñado para aceptar audio de calidad telefónica para las aplicaciones de control &; el motor de escritorio está diseñado para aceptar audio de mayor calidad para las aplicaciones de comando y dictado &.

Usted puede utilizar 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 necesita entrenamiento, y trabajará con el audio de baja calidad, pero tendrá una calidad de reconocimiento más baja que el motor de escritorio.

46

He encontrado Eric’s answer muy útil, yo sólo quería añadir algunos detalles más que he encontrado.

System.Speech.Recognition se puede utilizar para programar los reconocedores de escritorio. SAPI de Escritorio y reconocedores han enviado en los productos:

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

servidores vienen con SAPI, pero sin reconocedor:

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

Los reconocedores de escritorio también se envían en productos como la oficina.

  • Microsoft Office 2003: el reconocedor v6.1

Microsoft.Speech.Recognition se puede utilizar para programar los reconocedores de servidor. reconocedores de servidores 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) incluido un reconocedor redistribuible
  • plataforma de Microsoft Speech Server - v10.2 reconocedor

el SDK completo para la versión de Microsoft Speech Platform servidor 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 Microsoft Speech SDK de la plataforma 11 de información y descargas, 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.

Puede utilizar utilizar las API para consultar a determinar sus recongizers instalados

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

encontré que también puedo ver lo reconocedores están instalados mirando las claves de registro:

  • reconocedores de Escritorio: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Reconocedores \ Fichas
  • reconocedores de servidor: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech Server \ v10.0 \ reconocedores \ Fichas

--- actualización ---

Como se discutió en Microsoft Speech Recognition - what reference do I have to add?, Microsoft.Speech es también la API utilizada para el reconocedor Kinect. Esto se documenta en el artículo de MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx

+2

Si leo los documentos correctamente, solo los reconocedores de voz de escritorio incluyen la 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. –

+0

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: http://stackoverflow.com/questions/12101120/matching-wildcard-dictation-in-microsoft-speech-grammar –

6

Aquí está el enlace para la Biblioteca del habla (Speech Platform MS Server):

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

+1

10.2 fue lanzado recientemente también. http://www.microsoft.com/downloads/en/details.aspx?FamilyID=bb0f72cb-b86b-46d1-bf06-665895a313c7 –

+0

Gracias por la información. Veo que ahora incluye un validador de gramática. Estaba rompiéndome la cabeza tratando de encontrar errores en los que estoy creando. ¿Dónde debería seguir buscando noticias sobre lanzamientos futuros? –

+0

"¿Dónde debería seguir buscando noticias sobre lanzamientos futuros?" es una gran pregunta! http://www.microsoft.com/speech/developers.aspx está desactualizado. Los blogs de habla como http://blogs.msdn.com/b/speak/ y http://blogs.msdn.com/b/speech/ no siempre tienen las últimas actualizaciones. Puede probar http://gotspeech.net/ o los sitios relacionados como http://gotuc.net/. Pero como pueden ver, tampoco he encontrado una gran fuente para estar al día. –

2

Parece Microsoft escribió un artículo que aclara las cosas con respecto a las diferencias entre Microsoft Plataforma de voz 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 segundo no y tienes que convertir a semántica/1.0 cambiando x a out = "x"; en las etiquetas

+1

Por cierto, puede encontrar que mi código SpeechLib es útil (http://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 (ver las fuentes) para usar Microsoft.Speech en el código (afecta principalmente a las cláusulas de uso, el resto del código es idéntico) –

Cuestiones relacionadas