Jaka jest różnica między System.Speech.Recognition a Microsoft.Speech.Recognition?

79

Istnieją dwie podobne przestrzenie nazw i zestawy do rozpoznawania mowy w .NET. Próbuję zrozumieć różnice i kiedy należy użyć jednego lub drugiego.

Istnieje System.Speech.Recognition z zestawu System.Speech (w System.Speech.dll). System.Speech.dll jest podstawową biblioteką DLL w bibliotece klas .NET Framework 3.0 i nowszych

Istnieje również Microsoft.Speech.Recognition z zestawu Microsoft.Speech (w microsoft.speech.dll). Microsoft.Speech.dll jest częścią pakietu UCMA 2.0 SDK

Uważam, że dokumenty są zagmatwane i mam następujące pytania:

System.Speech.Recognition mówi, że jest przeznaczony dla „Technologii mowy pulpitu systemu Windows”, czy to oznacza, że ​​nie można jej używać w systemie operacyjnym serwera lub nie można jej używać do aplikacji na dużą skalę?

Zestaw SDK Speech UCMA 2.0 ( http://msdn.microsoft.com/en-us/library/dd266409%28v=office.13%29.aspx ) mówi, że wymaga Microsoft Office Communications Server 2007 R2 jako warunku wstępnego. Jednak na konferencjach i spotkaniach powiedziano mi, że jeśli nie potrzebuję funkcji OCS, takich jak obecność i przepływ pracy, mogę używać interfejsu API UCMA 2.0 Speech bez OCS. Czy to prawda?

Jeśli tworzę prostą aplikację do rozpoznawania aplikacji serwerowej (powiedzmy, że chcę automatycznie transkrybować wiadomości głosowe) i nie potrzebuję funkcji OCS, jakie są różnice między tymi dwoma interfejsami API?

Michael Levy
źródło

Odpowiedzi:

102

Krótka odpowiedź jest taka, że ​​Microsoft.Speech.Recognition używa wersji serwerowej SAPI, podczas gdy System.Speech.Recognition używa wersji SAPI na komputery stacjonarne.

Interfejsy API są w większości takie same, ale silniki bazowe są różne. Zazwyczaj silnik serwera jest zaprojektowany tak, aby akceptować dźwięk o jakości telefonicznej w zastosowaniach związanych z dowodzeniem i kontrolą; Silnik Desktop został zaprojektowany tak, aby akceptować dźwięk wyższej jakości zarówno w aplikacjach dowodzenia i kontroli, jak i dyktowania.

Możesz używać System.Speech.Recognition w systemie operacyjnym serwera, ale nie jest on zaprojektowany do skalowania prawie tak dobrze, jak Microsoft.Speech.Recognition.

Różnice polegają na tym, że silnik serwera nie wymaga szkolenia i będzie działał z dźwiękiem o niższej jakości, ale będzie miał niższą jakość rozpoznawania niż silnik komputera stacjonarnego.

Eric Brown
źródło
52

Odpowiedź Erica okazała się bardzo pomocna, chciałem tylko dodać więcej szczegółów, które znalazłem.

System.Speech.Recognition może służyć do programowania rozpoznawania pulpitu. Rozpoznawanie SAPI i Desktop zostało dostarczone w produktach:

  • Windows XP: SAPI v5.1 bez rozpoznawania
  • Windows XP Tablet Edition: SAPI 5.1 i Recognizer 6.1
  • Windows Vista: SAPI 5.3 i Recognizer 8.0
  • Windows 7: SAPI v5.4 i Recognizer v8.0?

Serwery są dostarczane z SAPI, ale bez rozpoznawania:

  • Windows Server 2003: SAPI v5.1 bez rozpoznawania
  • Windows Server 2008 i 2008 R2: SAPI v5.3? i bez rozpoznawania

Rozpoznawanie komputerów stacjonarnych zostało również dostarczone w produktach, takich jak Office.

  • Microsoft Office 2003: Recognizer, wersja 6.1

Microsoft.Speech.Recognition może służyć do programowania mechanizmów rozpoznawania serwera. Rozpoznawanie serwerów zostało dostarczone w produktach:

  • Speech Server (różne wersje)
  • Office Communications Server (OCS) (różne wersje)
  • UCMA - który jest zarządzanym interfejsem API dla OCS, który (jak sądzę) zawierał redystrybucyjny element rozpoznawczy
  • Platforma Microsoft Server Speech - narzędzie rozpoznające w wersji 10.2

Kompletny zestaw SDK dla wersji Microsoft Server Speech Platform 10.2 jest dostępny pod adresem http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4 . Silnik mowy można pobrać bezpłatnie. Wersja 11 jest już dostępna pod adresem http://www.microsoft.com/download/en/details.aspx?id=27226 .

Aby uzyskać informacje i pliki do pobrania dotyczące zestawu SDK 11 platformy Microsoft Speech Platform, zobacz:

Rozpoznawanie komputerów stacjonarnych jest przeznaczone do działania w trybie inproc lub udostępnionym. Współdzielone aparaty rozpoznawcze są przydatne na pulpicie, gdzie polecenia głosowe służą do sterowania otwartymi aplikacjami. Rozpoznawanie serwera może działać tylko w trybie inproc. Moduły rozpoznawania Inproc są używane, gdy pojedyncza aplikacja korzysta z aparatu rozpoznawania lub gdy pliki wav lub strumienie audio muszą zostać rozpoznane (współdzielone aparaty rozpoznawcze nie mogą przetwarzać plików audio, tylko dźwięk z urządzeń wejściowych).

Tylko stacjonarne programy rozpoznawania mowy zawierają gramatykę dyktowania (gramatykę dostarczaną przez system, używaną do dyktowania dowolnego tekstu). Klasa System.Speech.Recognition.DictationGrammar nie ma dopełnienia w przestrzeni nazw Microsoft.Speech.

Możesz użyć interfejsów API, aby zapytać o zainstalowane rekongizery

  • Pulpit: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()
  • Serwer: Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()

Odkryłem, że mogę również zobaczyć, jakie aparaty rozpoznawcze są zainstalowane, patrząc na klucze rejestru:

  • Rozpoznawanie pulpitu: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Recognizers \ Tokens
  • Rozpoznawanie serwera: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech Server \ v10.0 \ Recognizers \ Tokens

--- Aktualizacja ---

Jak omówiono w sekcji Rozpoznawanie mowy firmy Microsoft - jakie odniesienie muszę dodać? , Microsoft.Speech jest również interfejsem API używanym przez aparat rozpoznawania Kinect. Jest to udokumentowane w artykule MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx

Michael Levy
źródło
3
Jeśli dobrze przeczytałem dokumentację, tylko programy rozpoznawania mowy dla komputerów stacjonarnych zawierają gramatykę dyktowania (gramatyka dostarczona przez system do dyktowania dowolnego tekstu). Klasa System.Speech.Recognition.DictationGrammar nie ma dopełnienia w przestrzeni nazw Microsoft.Speech.
Michael Levy
Zgodnie z MSDN API jest DictationGrammar i WildcardGrammar w C # (i używam go). Ale nie wiem, jak go aktywować przez XML (parser hakerski?) Zobacz także: stackoverflow.com/questions/12101120/ ...
Jean-Philippe Encausse
Zainstalowałem język włoski pobrany z microsoft.com/en-us/download/details.aspx?id=27224, ale System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers pokazuje en-US jako jedyny aktywny język do rozpoznawania mowy. Tęsknię za czymś?
POW
7

Oto łącze do biblioteki mowy (platforma MS Server Speech):

Wydano Microsoft Server Speech Platform 10.1 (SR i TTS w 26 językach)

Zmień handel
źródło
2
10.2 również został niedawno wydany. microsoft.com/downloads/en/…
Michael Levy
Dzięki za informację. Widzę, że teraz zawiera walidator gramatyki. Łamałem głowę, próbując znaleźć błędy w tych, które tworzę. Gdzie powinienem nadal szukać wiadomości o przyszłych wydaniach?
Switch Commerce
„Gdzie powinienem nadal oglądać wiadomości o przyszłych wydaniach?” to świetne pytanie !!! Witryna microsoft.com/speech/developers.aspx jest nieaktualna. Blogi z mową, takie jak blogs.msdn.com/b/speak i blogs.msdn.com/b/speech , nie zawsze zawierają najnowsze aktualizacje. Możesz spróbować gotspeech.net lub powiązanych witryn, takich jak gotuc.net . Ale jak widać, również nie znalazłem dobrego źródła, aby być na bieżąco.
Michael Levy
1
najnowszą w chwili pisania tego tekstu jest wersja 11 - microsoft.com/en-us/download/details.aspx?id=27225
George Birbilis
btw, ponieważ wyżej wspomniano o walidatorze gramatyki, zobacz msdn.microsoft.com/en-us/library/hh378407%28v=office.14%29.aspx, aby uzyskać listę narzędzi gramatycznych
George Birbilis,
4

Wygląda na to, że Microsoft napisał artykuł wyjaśniający różnice między Microsoft Speech Platform i Windows SAPI - https://msdn.microsoft.com/en-us/library/jj127858.aspx . Różnica, którą znalazłem podczas konwersji kodu rozpoznawania mowy dla Kinect z Microsoft.Speech do System.Speech (patrz http://github.com/birbilis/Hotspotizer ), polegała na tym, że ten pierwszy obsługuje gramatyki SGRS z tag-format = semantics / 1.0- literały, podczas gdy ten drugi nie i musisz przekonwertować na semantykę / 1.0, zmieniając x na out = "x"; na tagach

George Birbilis
źródło
3
przy okazji, mój kod SpeechLib może być przydatny ( SpeechLib.codeplex.com ). Możesz usunąć stąd odwołanie System.Speech i zamiast tego użyć Microsoft.Speech i ustawić odpowiedni symbol kompilacji warunkowej (zobacz źródła), aby używać Microsoft.Speech w kodzie (głównie dotyczy klauzul using, reszta kodu jest identyczna)
George Birbilis,
1
SpeechLib wspomniany w powyższym komentarzu został przeniesiony na github.com/zoomicon/SpeechLib (ponieważ Codeplex jest teraz zamrożony w trybie archiwum)
George Birbilis