Rozpoznawanie mowy w aplikacjach Windows

Rozpoznawanie mowy umożliwia podawanie danych wejściowych, określanie akcji lub poleceń oraz wykonywanie zadań w aplikacji Zestaw SDK do aplikacji systemu Windows.

Ważna

Rozpoznawanie mowy wymaga tożsamości pakietu MSIX. Interfejsy API Windows.Media.SpeechRecognition są dostępne tylko wtedy, gdy aplikacja działa z identyfikatorem pakietu (spakietowana lub spakietowana z lokalizacją zewnętrzną). Aplikacje rozpakowane nie mogą używać tych interfejsów API.

Kluczowe interfejsy API

Przegląd

Rozpoznawanie mowy składa się ze środowiska uruchomieniowego rozpoznawania mowy, interfejsów API do programowania tego środowiska uruchomieniowego, gotowych do użycia gramatyk do dyktowania i wyszukiwania w sieci Web oraz domyślnego interfejsu użytkownika systemu, który pomaga użytkownikom odkrywać funkcje rozpoznawania mowy i z nich korzystać.

Konfigurowanie rozpoznawania mowy

Aby obsługiwać rozpoznawanie mowy, użytkownik musi nawiązać połączenie i włączyć mikrofon na swoim urządzeniu oraz zaakceptować Microsoft zasady ochrony prywatności udzielające uprawnień do korzystania z aplikacji.

Ustaw możliwość urządzenia Mikrofon w manifeście pakietu aplikacji, aby poprosić użytkownika o zgodę na dostęp do mikrofonu. Aby uzyskać więcej informacji, zobacz Deklaracje możliwości aplikacji.

Jeśli użytkownik udziela dostępu, aplikacja zostanie wyświetlona na liście zatwierdzonych aplikacji na stronie Ustawienia > Mikrofon prywatności>. Ponieważ użytkownik może wyłączyć to ustawienie w dowolnym momencie, upewnij się, że aplikacja ma dostęp do mikrofonu przed podjęciem próby jej użycia.

Jeśli chcesz również obsługiwać funkcję dyktowania lub inne usługi rozpoznawania mowy (takie jak wstępnie zdefiniowana gramatyka zdefiniowana w ograniczeniu tematycznym), upewnij się, że Rozpoznawanie mowy online (Ustawienia > Prywatność > Mowa) jest włączone.

W poniższym przykładzie pokazano, jak sprawdzić, czy mikrofon jest obecny i czy aplikacja ma uprawnienia do korzystania z niego.

public class AudioCapturePermissions
{
    private static int NoCaptureDevicesHResult = -1072845856;

    /// <summary>
    /// Checks whether the microphone is available and the app has permission to use it.
    /// Perform this check every time the app gets focus, because the user can change
    /// the setting while the app is suspended or not in focus.
    /// </summary>
    /// <returns>True if the microphone is available.</returns>
    public static async Task<bool> RequestMicrophonePermission()
    {
        try
        {
            var settings = new MediaCaptureInitializationSettings
            {
                StreamingCaptureMode = StreamingCaptureMode.Audio,
                MediaCategory = MediaCategory.Speech
            };
            var capture = new MediaCapture();
            await capture.InitializeAsync(settings);
        }
        catch (TypeLoadException)
        {
            // Media player components are not available.
            return false;
        }
        catch (UnauthorizedAccessException)
        {
            // Permission to use the audio capture device is denied.
            return false;
        }
        catch (Exception exception)
        {
            if (exception.HResult == NoCaptureDevicesHResult)
            {
                // No audio capture devices are present on this system.
                return false;
            }
            throw;
        }
        return true;
    }
}

Rozpoznawanie danych wejściowych mowy

Ograniczenie definiuje słowa i frazy (słownictwo), które aplikacja rozpoznaje w danych wejściowych mowy. Ograniczenia są podstawą rozpoznawania mowy i zapewniają aplikacji większą kontrolę nad dokładnością rozpoznawania.

Można użyć następujących typów ograniczeń.

Wstępnie zdefiniowane gramatyki

Wstępnie zdefiniowane dyktowanie i gramatyki wyszukiwania w Internecie zapewniają rozpoznawanie mowy bez konieczności tworzenia gramatyki. Gdy używasz tych gramatyki, zdalna usługa internetowa wykonuje rozpoznawanie i zwraca wyniki do urządzenia.

Domyślna gramatyka dyktowania tekstu rozpoznaje większość słów i fraz, które użytkownik może powiedzieć w określonym języku i jest zoptymalizowany pod kątem krótkich fraz. Jeśli nie określisz żadnych ograniczeń dla elementu SpeechRecognizer, zostanie użyta wstępnie zdefiniowana gramatyka dyktowania.

Gramatyka wyszukiwania w Internecie zawiera dużą liczbę wyrazów i fraz zoptymalizowanych pod kątem terminów, które ludzie zwykle używają podczas wyszukiwania w Internecie.

Uwaga / Notatka

Wstępnie zdefiniowane gramatyki dyktowania i wyszukiwania w internecie mogą być duże, a ponieważ działają online (nie na urządzeniu), ich działanie może nie być tak szybkie jak w przypadku niestandardowej gramatyki zainstalowanej lokalnie.

Te wstępnie zdefiniowane gramatyki rozpoznają do 10 sekund danych wejściowych mowy i nie wymagają wysiłku tworzenia. Jednak wymagają one połączenia sieciowego.

Zobacz SpeechRecognitionTopicConstraint.

Ograniczenia listy programowej

Ograniczenia list programowych zapewniają lekkie podejście do tworzenia prostych gramatyk przy użyciu listy wyrazów lub fraz. Ograniczenie listy dobrze sprawdza się w przypadku rozpoznawania krótkich, odrębnych fraz. Określanie wszystkich wyrazów w gramatyce poprawia dokładność rozpoznawania, ponieważ aparat rozpoznawania mowy musi przetwarzać mowę tylko w celu potwierdzenia dopasowania. Listę można również zaktualizować programowo.

Zobacz SpeechRecognitionListConstraint.

Gramatyki SRGS

Gramatyka specyfikacji gramatyki rozpoznawania mowy (SRGS) to statyczny dokument, który używa formatu XML zdefiniowanego przez SRGS w wersji 1.0. Gramatyka SRGS zapewnia największą kontrolę nad środowiskiem rozpoznawania mowy, umożliwiając przechwytywanie wielu semantycznych znaczeń w jednym rozpoznawaniu.

Zobacz SpeechRecognitionGrammarFileConstraint.

Ograniczenia poleceń głosowych

Użyj pliku XML definicji poleceń głosowych (VCD), aby zdefiniować polecenia, które użytkownik może powiedzieć, aby zainicjować akcje podczas aktywowania aplikacji. Zobacz SpeechRecognitionVoiceCommandDefinitionConstraint.

Aby rozpocząć pracę z ograniczeniami, zobacz Definiowanie ograniczeń rozpoznawania niestandardowego.

Przykład podstawowego rozpoznawania

Poniższy przykład tworzy rozpoznawanie mowy, kompiluje domyślne ograniczenia dyktowania i rozpoczyna nasłuchiwanie danych wejściowych mowy.

private async void StartRecognizing_Click(object sender, RoutedEventArgs e)
{
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Compile the default dictation grammar.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeAsync();

    // Display the recognized text.
    if (result.Status == Windows.Media.SpeechRecognition.SpeechRecognitionResultStatus.Success)
    {
        resultTextBlock.Text = result.Text;
    }
}

Uwaga / Notatka

W tym przykładzie użyto RecognizeAsync (bez interfejsu użytkownika). Jeśli chcesz użyć wbudowanego interfejsu rozpoznawania, zamiast tego wywołaj RecognizeWithUIAsync. Zobacz opcje dostosowywania w SpeechRecognizerUIOptions.

Dostosuj interfejs użytkownika rozpoznawania

Gdy aplikacja wywołuje metodę SpeechRecognizer.RecognizeWithUIAsync, system wyświetla kilka ekranów w sekwencji:

  • W przypadku wstępnie zdefiniowanych gramatyk (dyktowanie lub wyszukiwanie w sieci): SłuchaniePrzetwarzanieUsłyszano (lub błąd).
  • W przypadku ograniczeń listy lub SRGS: nasłuchiwanieCzy powiedziałeś (jeśli niejednoznaczne) → Heard powiedziałeś (lub błąd).

Użyj klasy SpeechRecognizerUIOptions (uzyskanej za pośrednictwem SpeechRecognizer.UIOptions), aby dostosować ekran nasłuchiwania :

private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

    var webSearchGrammar = new Windows.Media.SpeechRecognition.SpeechRecognitionTopicConstraint(
        Windows.Media.SpeechRecognition.SpeechRecognitionScenario.WebSearch, "webSearch");

    speechRecognizer.UIOptions.AudiblePrompt = "Say what you want to search for...";
    speechRecognizer.UIOptions.ExampleText = @"Ex. 'weather for London'";
    speechRecognizer.Constraints.Add(webSearchGrammar);

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}