HoloLens (1. generacja) Input 212: Voice

Ważne

Samouczki Mixed Reality Academy zostały zaprojektowane z myślą o HoloLens (1. generacji), Unity 2017 i Mixed Reality immersywnych nagłownych. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków dla deweloperów, którzy nadal szukają wskazówek dotyczących opracowywania aplikacji dla tych urządzeń. Te samouczki nie zostaną zaktualizowane o najnowsze zestawy narzędzi ani interakcje używane w wersji HoloLens 2 i mogą nie być zgodne z nowszą wersjami aparatu Unity. Będą one utrzymywane w celu kontynuowania pracy na obsługiwanych urządzeniach. Opublikowano nową serię samouczków dla HoloLens 2.

Wprowadzanie głosu daje nam inny sposób interakcji z naszymi hologramami. Polecenia głosowe działają w bardzo naturalny i łatwy sposób. Zaprojektuj polecenia głosowe tak, aby były:

  • Naturalne
  • Łatwo zapamiętać
  • Kontekst odpowiedni
  • Wystarczająco różne od innych opcji w tym samym kontekście

W wersji MR Basics 101umyliśmy słowo kluczowe KeywordRecognizer do skompilowania dwóch prostych poleceń głosowych. W danych wejściowych MR 212 bardziej zagłębimy się w informacje i dowiesz się, jak:

  • Zaprojektuj polecenia głosowe zoptymalizowane pod kątem aparatu HoloLens mowy.
  • Uwiadom użytkownika, jakie polecenia głosowe są dostępne.
  • Potwierdzić, że słyszeliśmy polecenie głosowe użytkownika.
  • Dowiedz się, co mówi użytkownik, używając rozpoznawania dyktowania.
  • Użyj rozpoznawania gramatyki, aby nasłuchiwać poleceń na podstawie pliku SRGS lub specyfikacji gramatyki rozpoznawania mowy.

W tym kursie ponownie dotrzemy do Eksploratora modeli, który sbudowaliśmy w danych wejściowych mr Input 210 i MR Input 211.

Ważne

Filmy wideo osadzone w poszczególnych rozdziałach poniżej zostały zarejestrowane przy użyciu starszej wersji aparatu Unity i zestawu Mixed Reality Toolkit. Instrukcje krok po kroku są dokładne i aktualne, ale w odpowiednich filmach wideo, które są aktualne, możesz zobaczyć skrypty i wizualizacje. Filmy wideo pozostają dołączone dla plakatu i ponieważ te koncepcje nadal mają zastosowanie.

Obsługa urządzeń

Kurs HoloLens Immersywne zestawy nagłow
MR Input 212: Voice ✔️ ✔️

Przed rozpoczęciem

Wymagania wstępne

Project plików

  • Pobierz pliki wymagane przez projekt. Wymaga aparatu Unity 2017.2 lub nowszego.
  • Zarchiwizuj pliki na pulpicie lub w innej łatwo dostępnej lokalizacji.

Uwaga

Jeśli chcesz sprawdzić kod źródłowy przed pobraniem, jest on dostępny naGitHub .

Errata i uwagi

  • Opcja "Włącz Tylko mój kod" musi byćwyłączona (niezaznaczone) w programie Visual Studio w obszarze Narzędzia->Opcje->Debugowanie, aby trafić punkty przerwania w kodzie.

Konfiguracja aparatu Unity

Instrukcje

  1. Uruchom platformę Unity.
  2. Wybierz pozycję Otwórz.
  3. Przejdź do folderu HolographicAcademy-Hologramy-212-Voice, który został wcześniej zarchiwizowany.
  4. Znajdź i wybierz folder Starting / Model Explorer (Uruchamianie Eksploratora modeli).
  5. Kliknij przycisk Wybierz folder.
  6. Na panelu Project rozwiń folder Scenes (Sceny).
  7. Kliknij dwukrotnie scenę ModelExplorer, aby załadować ją do aparatu Unity.

Kompilowanie

  1. W a aparatu Unity wybierz pozycję File > Build Ustawienia.
  2. Jeśli scenes/modelExplorer nie znajduje się na liście Scenes In Build(Sceny w kompilacji), kliknij pozycję Add Open Scenes (Dodaj otwarte sceny), aby dodać scenę.
  3. Jeśli specjalnie opracowujesz dla aplikacji HoloLens, dla ustawienia Urządzenie docelowe ustaw wartość HoloLens. W przeciwnym razie pozostaw je na dowolnym urządzeniu.
  4. Upewnij się, że dla ustawienia Typ kompilacji ustawiono wartość D3D, a dla zestawu SDK ustawiono najnowszą wersję zainstalowaną (która powinna być zestawem SDK w wersji 16299 lub nowszej).
  5. Kliknij pozycję Build (Kompilacja).
  6. Utwórz nowy folder o nazwie "App".
  7. Kliknij pojedynczo folder App.
  8. Naciśnij pozycję Wybierz folder, a unity rozpocznie tworzenie projektu dla Visual Studio.

Gdy unity zostanie gotowe, zostanie Eksplorator plików okno.

  1. Otwórz folder Aplikacja.
  2. Otwórz rozwiązanie ModelExplorer Visual Studio .

W przypadku wdrażania w HoloLens:

  1. Korzystając z górnego paska narzędzi w Visual Studio, zmień element docelowy z Debugowanie na Wydanie i z ARM na x86.
  2. Kliknij strzałkę listy rozwijanej obok przycisku Komputer lokalny, a następnie wybierz pozycję Maszyna zdalna.
  3. Wprowadź adres IP HoloLens i ustaw tryb uwierzytelniania na wartość Uniwersalny (protokół niezaszyfrowany). Kliknij pozycję Wybierz. Jeśli nie znasz adresu IP urządzenia, sprawdź w te Ustawienia > Network & Internet > Advanced Options ( Opcje zaawansowane).
  4. Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij bez debugowania lub naciśnij klawisze Ctrl +F5. Jeśli jest to pierwsze wdrożenie na urządzeniu, należy je sparować z Visual Studio .
  5. Po wdrożeniu aplikacji odrzuć opcję Fitbox za pomocą gestu wyboru.

W przypadku wdrażania do immersywnego zestawu nagłownego:

  1. Korzystając z górnego paska narzędzi w Visual Studio, zmień element docelowy z Debugowanie na Wydanie i z ARM na x64.
  2. Upewnij się, że element docelowy wdrożenia został ustawiony na wartość Komputer lokalny.
  3. Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij bez debugowania lub naciśnij klawisze Ctrl +F5.
  4. Po wdrożeniu aplikacji odrzuć aplikację Fitbox, ściągając wyzwalacz na kontroler ruchu.

Uwaga

Niektóre czerwone błędy można zauważyć na panelu Visual Studio Błędów. Można je bezpiecznie zignorować. Przejdź do panelu Dane wyjściowe, aby wyświetlić rzeczywisty postęp kompilacji. Błędy w panelu Dane wyjściowe będą wymagać poprawki (najczęściej są one spowodowane błędem w skrypcie).

Rozdział 1 — Świadomość

Cele

  • Zapoznaj się z tematami Dos (Dos) i Don'ts of voice command design (Nie robisz tego projektu za pomocą poleceń głosowych).
  • Użyj słowa kluczowegoRecognizer, aby dodać polecenia głosowe oparte na spojrzeniach.
  • Uwiadom użytkowników o poleceniach głosowych przy użyciu opinii kursora.

Projekt poleceń głosowych

W tym rozdziale dowiesz się więcej na temat projektowania poleceń głosowych. Podczas tworzenia poleceń głosowych:

DO

  • Utwórz zwięzłe polecenia. Nie chcesz używać opcji "Odtwarzaj aktualnie wybrane wideo", ponieważ to polecenie nie jest zwięzłe i łatwo zostanie zapomniane przez użytkownika. Zamiast tego należy użyć: "Odtwarzanie wideo", ponieważ jest zwięzłe i ma wiele elementów edytowalnych.
  • Użyj prostego słownictwa. Zawsze należy próbować używać typowych słów i fraz, które użytkownik może łatwo odnaleźć i zapamiętać. Jeśli na przykład aplikacja ma obiekt notatki, który może być wyświetlany lub ukrywany w widoku, nie należy używać polecenia "Pokaż Terazard", ponieważ "wszystko" jest rzadko używanym terminem. Zamiast tego należy użyć polecenia "Pokaż notatkę", aby wyświetlić notatkę w aplikacji.
  • Należy zapewnić spójność. Polecenia głosowe powinny być spójne w całej aplikacji. Imagine, że w aplikacji znajdują się dwie sceny, a obie zawierają przycisk do zamykania aplikacji. Jeśli pierwsza scena użyła polecenia "Exit" w celu wyzwolenia przycisku, ale druga scena użyła polecenia "Zamknij aplikację", wówczas użytkownik będzie się bardzo mylić. Jeśli ta sama funkcja będzie się powtarzać w wielu scenach, do jej wyzwolenia należy użyć tego samego polecenia głosowego.

NIE

  • Użyj pojedynczych poleceń programowalnych. Jeśli na przykład tworzysz polecenie głosowe do odtwarzania wideo, unikaj używania prostego polecenia "Play", ponieważ jest to tylko jedna aplikacja, a system może go łatwo pominąć. Zamiast tego należy użyć: "Odtwarzanie wideo", ponieważ jest zwięzłe i ma wiele elementów edytowalnych.
  • Użyj poleceń systemowych. Polecenie "Select" jest zarezerwowane przez system w celu wyzwolenia zdarzenia naciśnięcia dla obiektu aktualnie ukierunkowanego. Nie używaj ponownie polecenia "Select" w selektorze słów kluczowych lub frazie, ponieważ może ono nie działać zgodnie z oczekiwaniami. Jeśli na przykład polecenie głosowe służące do wybierania sześcianu w aplikacji to "Wybierz sześcian", a użytkownik patrzył na sferę podczas wypowiedzi polecenia, zamiast tego zostałaby wybrana sfera. Podobnie polecenia paska aplikacji są włączone głosem. W widoku CoreWindow View nie używaj następujących poleceń mowy:
    1. Przejdź wstecz
    2. Narzędzie przewijania
    3. Narzędzie powiększania
    4. Narzędzie przeciągania
    5. Dostosować
    6. Usuń
  • Używaj podobnych dźwięków. Staraj się unikać używania poleceń głosowych, które są wytłaczane. Jeśli masz aplikację zakupową, która obsługuje polecenia "Pokaż sklep" i "Pokaż więcej" jako polecenia głosowe, możesz wyłączyć jedno z poleceń, gdy inne były w użyciu. Na przykład możesz użyć przycisku "Pokaż sklep", aby otworzyć sklep, a następnie wyłączyć to polecenie podczas wyświetlania sklepu, aby można było użyć polecenia "Pokaż więcej" do przeglądania.

Instrukcje

  • W panelu Hierarchy (Hierarchia) aparatu Unity użyj narzędzia wyszukiwania, aby holoComm_screen_mesh obiekt .
  • Kliknij dwukrotnie obiekt holoComm_screen_mesh, aby wyświetlić go w scenie. Jest to zegarek astronauty, który będzie reagować na nasze polecenia głosowe.
  • Na panelu Inspector (Inspektor) znajdź składnik Speech Input Source (Script).
  • Rozwiń sekcję Słowa kluczowe, aby wyświetlić obsługiwane polecenie głosowe: Otwórz Communicator.
  • Kliknij ikonę z prawej strony, a następnie wybierz pozycję Edytuj skrypt.
  • Zapoznaj się z plikiem SpeechInputSource.cs, aby dowiedzieć się, jak używa on funkcji KeywordRecognizer do dodawania poleceń głosowych.

Wdróż i konfiguruj

  • W a aparatu Unity użyj > kompilowania Ustawienia, aby ponownie skompilować aplikację.
  • Otwórz folder Aplikacja.
  • Otwórz rozwiązanie ModelExplorer Visual Studio .

(Jeśli ten projekt został już stanowany/wdrożony w programie Visual Studio podczas konfigurowanie, możesz otworzyć to wystąpienie programu VS i kliknąć pozycję "Załaduj ponownie wszystko" po wyświetleniu monitu).

  • W Visual Studio kliknij pozycję Debuguj -> Uruchom bez debugowania lub naciśnij klawisze Ctrl +F5.
  • Po wdrożeniu aplikacji w HoloLens odrzuć pole dopasowania przy użyciu gestu naciśnięcia w powietrzu.
  • Spojrzenie na zegarek astronauty.
  • Gdy zegarek ma fokus, sprawdź, czy kursor zmieni się na mikrofon. Dzięki temu można uzyskać informacje zwrotne, że aplikacja nasłuchuje poleceń głosowych.
  • Sprawdź, czy na zegarku jest wyświetlana etykietka narzędzia. Ułatwia to użytkownikom odnajdywanie polecenia "Otwórz Communicator".
  • Gdy spojrzysz na zegarek, powiedz "Open Communicator" (Otwórz Communicator), aby otworzyć panel sterowania.

Rozdział 2 — Potwierdzenie

Cele

  • Zanotuj komunikat przy użyciu danych wejściowych mikrofonu.
  • Przekazać użytkownikowi opinię na temat tego, że aplikacja nasłuchuje swojego głosu.

Uwaga

Możliwość mikrofonu musi być zadeklarowana, aby aplikacja rejestrowała z mikrofonu. Jest to realizowane już w przypadku danych wejściowych MR 212, ale należy pamiętać o tym w przypadku własnych projektów.

  1. W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do ustawienia "Edytuj > Project Ustawienia > Player"
  2. Kliknij kartę "Universal Windows Platform" (Platforma uniwersalna)
  3. W sekcji "Publishing Ustawienia > Capabilities" (Możliwości Ustawienia > publikowania) sprawdź możliwość mikrofonu

Instrukcje

  • Na panelu Hierarchy (Hierarchia) aparatu Unity sprawdź, holoComm_screen_mesh jest wybrany obiekt .
  • Na panelu Inspector (Inspektor) znajdź składnik Astronaut Watch (Script).
  • Kliknij mały niebieski sześcian, który jest ustawiony jako wartość Communicator Prefab.
  • Na panelu Project panelu Communicator fokus.
  • Kliknij ikonę Communicator w panelu Project, aby wyświetlić jego składniki w inspektorze.
  • Przyjrzyjmy się składnikowi Microphone Manager (Script), który umożliwi nam rejestrowanie głosu użytkownika.
  • Zwróć uwagę, Communicator obiekt ma składnik obsługi wprowadzania mowy (Script) do odpowiadania na polecenie Send Message.
  • Przyjrzyj się Communicator (skrypt) i kliknij dwukrotnie skrypt, aby otworzyć go w Visual Studio.

Communicator.cs jest odpowiedzialny za ustawianie odpowiednich stanów przycisków na urządzeniu komunikatora. Umożliwi to naszym użytkownikom rejestrowanie wiadomości, odtwarzanie jej i wysyłanie wiadomości do astronauty. Spowoduje to również uruchomienie i zatrzymanie animowanego formularza falowego, aby potwierdzić użytkownikowi, że jego głos został wysłuchany.

  • W Communicator.cs usuń następujące wiersze (81 i 82) z metody Start. Spowoduje to włączenie przycisku "Record" (Rekord) na koatorze.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);

Wdróż i konfiguruj

  • W Visual Studio ponownie skompilować aplikację i wdrożyć ją na urządzeniu.
  • Zaglądaj na zegarek kosmonautów i powiedz "Open Communicator" (Otwórz Communicator), aby pokazać komentatora.
  • Naciśnij przycisk Nagraj (mikrofon), aby rozpocząć nagrywanie słownego komunikatu dla astronauty.
  • Zacznij mówić i sprawdź, czy animacja falowa odtwarza się na komunikatorze, co zapewnia użytkownikowi opinię o tym, że jego głos jest słyszany.
  • Naciśnij przycisk Zatrzymaj (lewy kwadrat) i sprawdź, czy animacja falowa przestała działać.
  • Naciśnij przycisk Odtróć (trójkąt prawy), aby odtworzyć zarejestrowany komunikat i słyszeć go na urządzeniu.
  • Naciśnij przycisk Zatrzymaj (prawy kwadrat), aby zatrzymać odtwarzanie zarejestrowanego komunikatu.
  • Powiedz "Send Message" (Wyślij wiadomość), aby zamknąć komentator i otrzymać odpowiedź "Odebrano komunikat" od astronauty.

Rozdział 3 — Opis i rozpoznawanie dyktowania

Cele

  • Użyj rozpoznawania dyktowania, aby przekonwertować mowę użytkownika na tekst.
  • Pokaż hipotezę i końcowe wyniki rozpoznawania dyktowania w komunizatorze.

W tym rozdziale użyjemy funkcji rozpoznawania dyktowania, aby utworzyć wiadomość dla astronauty. Podczas korzystania z rozpoznawania dyktowania należy pamiętać, że:

  • Aby aparat rozpoznawania dyktowania działał, musisz mieć połączenie z siecią Wi-Fi.
  • Limity czasu występują po upływie ustawionego czasu. Istnieją dwa limity czasu, o których należy pamiętać:
    • Jeśli aparat rozpoznawania uruchomi się i nie usłyszy żadnego dźwięku przez pierwsze pięć sekund, uchybni limit czasu.
    • Jeśli aparat rozpoznawania podał wynik, ale następnie usłyszy ciszę przez 20 sekund, limit czasu zostanie uściskany.
  • Jednocześnie można uruchomić tylko jeden typ rozpoznawania (słowo kluczowe lub dyktowanie).

Uwaga

Możliwość mikrofonu musi być zadeklarowana, aby aplikacja rejestrowała z mikrofonu. Jest to realizowane już w przypadku danych wejściowych MR 212, ale należy pamiętać o tym w przypadku własnych projektów.

  1. W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do ustawienia "Edytuj > Project Ustawienia > Player"
  2. Kliknij kartę "Universal Windows Platform" (Platforma uniwersalna)
  3. W sekcji "Publishing Ustawienia > Capabilities" (Możliwości Ustawienia > publikowania) sprawdź możliwość mikrofonu

Instrukcje

Będziemy edytować zestaw MicrophoneManager.cs, aby używać rozpoznawania dyktowania. To właśnie dodamy:

  1. Po naciśnięciu przycisku Record (Rekord) zaczniemy od DictationRecognizer.
  2. Pokaż hipotezę, co rozumie DictationRecognizer.
  3. Zablokuj wyniki tego, co zrozumiał DictationRecognizer.
  4. Sprawdź limity czasu z DictationRecognizer.
  5. Po naciśnięciu przycisku Zatrzymaj lub przestój sesji mikrofonu zatrzymaj klawisz DictationRecognizer.
  6. Uruchom ponownie narzędzie KeywordRecognizer, które nasłuchuje polecenia Wyślij komunikat.

Zaczynajmy. Wykonaj wszystkie ćwiczenia programistyczne dla wersji 3.a w pliku MicrophoneManager.cs lub skopiuj i wklej gotowy kod znaleziony poniżej:

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Windows.Speech;

namespace Academy
{
    public class MicrophoneManager : MonoBehaviour
    {
        [Tooltip("A text area for the recognizer to display the recognized strings.")]
        [SerializeField]
        private Text dictationDisplay;

        private DictationRecognizer dictationRecognizer;

        // Use this string to cache the text currently displayed in the text box.
        private StringBuilder textSoFar;

        // Using an empty string specifies the default microphone.
        private static string deviceName = string.Empty;
        private int samplingRate;
        private const int messageLength = 10;

        // Use this to reset the UI once the Microphone is done recording after it was started.
        private bool hasRecordingStarted;

        void Awake()
        {
            /* TODO: DEVELOPER CODING EXERCISE 3.a */

            // 3.a: Create a new DictationRecognizer and assign it to dictationRecognizer variable.
            dictationRecognizer = new DictationRecognizer();

            // 3.a: Register for dictationRecognizer.DictationHypothesis and implement DictationHypothesis below
            // This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far.
            dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

            // 3.a: Register for dictationRecognizer.DictationResult and implement DictationResult below
            // This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

            // 3.a: Register for dictationRecognizer.DictationComplete and implement DictationComplete below
            // This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.
            dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

            // 3.a: Register for dictationRecognizer.DictationError and implement DictationError below
            // This event is fired when an error occurs.
            dictationRecognizer.DictationError += DictationRecognizer_DictationError;

            // Query the maximum frequency of the default microphone. Use 'unused' to ignore the minimum frequency.
            int unused;
            Microphone.GetDeviceCaps(deviceName, out unused, out samplingRate);

            // Use this string to cache the text currently displayed in the text box.
            textSoFar = new StringBuilder();

            // Use this to reset the UI once the Microphone is done recording after it was started.
            hasRecordingStarted = false;
        }

        void Update()
        {
            // 3.a: Add condition to check if dictationRecognizer.Status is Running
            if (hasRecordingStarted && !Microphone.IsRecording(deviceName) && dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                // Reset the flag now that we're cleaning up the UI.
                hasRecordingStarted = false;

                // This acts like pressing the Stop button and sends the message to the Communicator.
                // If the microphone stops as a result of timing out, make sure to manually stop the dictation recognizer.
                // Look at the StopRecording function.
                SendMessage("RecordStop");
            }
        }

        /// <summary>
        /// Turns on the dictation recognizer and begins recording audio from the default microphone.
        /// </summary>
        /// <returns>The audio clip recorded from the microphone.</returns>
        public AudioClip StartRecording()
        {
            // 3.a Shutdown the PhraseRecognitionSystem. This controls the KeywordRecognizers
            PhraseRecognitionSystem.Shutdown();

            // 3.a: Start dictationRecognizer
            dictationRecognizer.Start();

            // 3.a Uncomment this line
            dictationDisplay.text = "Dictation is starting. It may take time to display your text the first time, but begin speaking now...";

            // Set the flag that we've started recording.
            hasRecordingStarted = true;

            // Start recording from the microphone for 10 seconds.
            return Microphone.Start(deviceName, false, messageLength, samplingRate);
        }

        /// <summary>
        /// Ends the recording session.
        /// </summary>
        public void StopRecording()
        {
            // 3.a: Check if dictationRecognizer.Status is Running and stop it if so
            if (dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                dictationRecognizer.Stop();
            }

            Microphone.End(deviceName);
        }

        /// <summary>
        /// This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far.
        /// </summary>
        /// <param name="text">The currently hypothesized recognition.</param>
        private void DictationRecognizer_DictationHypothesis(string text)
        {
            // 3.a: Set DictationDisplay text to be textSoFar and new hypothesized text
            // We don't want to append to textSoFar yet, because the hypothesis may have changed on the next event
            dictationDisplay.text = textSoFar.ToString() + " " + text + "...";
        }

        /// <summary>
        /// This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.
        /// </summary>
        /// <param name="text">The text that was heard by the recognizer.</param>
        /// <param name="confidence">A representation of how confident (rejected, low, medium, high) the recognizer is of this recognition.</param>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // 3.a: Append textSoFar with latest text
            textSoFar.Append(text + ". ");

            // 3.a: Set DictationDisplay text to be textSoFar
            dictationDisplay.text = textSoFar.ToString();
        }

        /// <summary>
        /// This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.
        /// Typically, this will simply return "Complete". In this case, we check to see if the recognizer timed out.
        /// </summary>
        /// <param name="cause">An enumerated reason for the session completing.</param>
        private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
        {
            // If Timeout occurs, the user has been silent for too long.
            // With dictation, the default timeout after a recognition is 20 seconds.
            // The default timeout with initial silence is 5 seconds.
            if (cause == DictationCompletionCause.TimeoutExceeded)
            {
                Microphone.End(deviceName);

                dictationDisplay.text = "Dictation has timed out. Please press the record button again.";
                SendMessage("ResetAfterTimeout");
            }
        }

        /// <summary>
        /// This event is fired when an error occurs.
        /// </summary>
        /// <param name="error">The string representation of the error reason.</param>
        /// <param name="hresult">The int representation of the hresult.</param>
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            // 3.a: Set DictationDisplay text to be the error string
            dictationDisplay.text = error + "\nHRESULT: " + hresult;
        }

        /// <summary>
        /// The dictation recognizer may not turn off immediately, so this call blocks on
        /// the recognizer reporting that it has actually stopped.
        /// </summary>
        public IEnumerator WaitForDictationToStop()
        {
            while (dictationRecognizer != null && dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                yield return null;
            }
        }
    }
}

Wdróż i konfiguruj

  • Ponownie skompilować Visual Studio i wdrożyć na urządzeniu.
  • Odrzuć pole dopasowania za pomocą gestu naciśnięcia w powietrzu.
  • Spojrz na zegarek astronauty i powiedz "Open Communicator"(Otwórz Communicator).
  • Wybierz przycisk Rekord (mikrofon), aby zarejestrować komunikat.
  • Zacznij mówić. Aparat rozpoznawania dyktowania zinterpretuje Twoją mowę i pokaże hipotezę tekstu w komunikacie.
  • Spróbuj powiedzieć "Wyślij wiadomość" podczas rejestrowania wiadomości. Zwróć uwagę, że aparat rozpoznawania słów kluczowych nie odpowiada, ponieważ rozpoznawanie dyktowania jest nadal aktywne.
  • Przestań mówić na kilka sekund. Zobacz, jak aparat rozpoznawania dyktowania kończy hipotezę i pokazuje wynik końcowy.
  • Zacznij mówić, a następnie wstrzymaj na 20 sekund. Spowoduje to przeoczanie limitu czasu przez aparat rozpoznawania dyktowania.
  • Zwróć uwagę, że rozpoznawanie słów kluczowych jest ponownie włączone po powyższym przeoczaniu limitu czasu. Teraz komunikator będzie odpowiadać na polecenia głosowe.
  • Powiedz "Send Message" (Wyślij wiadomość), aby wysłać wiadomość do astronauty.

Rozdział 4 — Rozpoznawanie gramatyki

Cele

  • Użyj rozpoznawania gramatyki, aby rozpoznawać mowę użytkownika zgodnie z plikiem SRGS lub specyfikacją gramatyki rozpoznawania mowy.

Uwaga

Możliwość mikrofonu musi być zadeklarowana, aby aplikacja rejestrowała z mikrofonu. Jest to realizowane już w przypadku danych wejściowych MR 212, ale należy pamiętać o tym w przypadku własnych projektów.

  1. W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do ustawienia "Edytuj > Project Ustawienia > Player"
  2. Kliknij kartę "Universal Windows Platform" (Platforma uniwersalna)
  3. W sekcji "Publishing Ustawienia > Capabilities" (Możliwości Ustawienia > publikowania) sprawdź możliwość mikrofonu

Instrukcje

  1. W panelu Hierarchy (Hierarchia) wyszukaj Jetpack_Center i wybierz go.
  2. Poszukaj skryptu akcji Tagalong w panelu Inspector (Inspektor).
  3. Kliknij mały okrąg po prawej stronie pola Obiekt do tagu.
  4. W oknie, które zostanie otwarte, wyszukaj pozycję SRGSToolbox i wybierz ją z listy.
  5. Przyjrzyj się plikowiSRGSColor.xml w folderze StreamingAssets.
    1. Specyfikację projektu SRGS można znaleźć w witrynie internetowej W3C tutaj.

W naszym pliku SRGS mamy trzy typy reguł:

  • Reguła, która pozwala powiedzieć jeden kolor z listy z 12 kolorów.
  • Trzy reguły, które nasłuchują kombinacji reguły koloru i jednego z trzech kształtów.
  • Reguła główna, colorChooser, która nasłuchuje dowolnej kombinacji trzech reguł "kolor + kształt". Kształty można powiedzieć w dowolnej kolejności i w dowolnej ilości od jednej do wszystkich trzech. Jest to jedyna reguła, która jest nasłuchiwać, ponieważ jest określona jako reguła główna w górnej części pliku w początkowym < tagu > gramatyki.

Wdróż i konfiguruj

  • Skompilowanie aplikacji w a unity, a następnie skompilowanie i Visual Studio w celu obsługi aplikacji na HoloLens.
  • Odrzuć pole dopasowania za pomocą gestu naciśnięcia w powietrzu.
  • Zaglądaj na pakiet jetpack kosmonautów i wykonaj gest naciśnięcia w powietrzu.
  • Zacznij mówić. Aparat rozpoznawanie gramatyki zinterpretuje Twoją mowę i zmieni kolory kształtów na podstawie rozpoznawania. Przykładowe polecenie to "niebieski okrąg, żółty kwadrat".
  • Wykonaj inny gest naciśnięcia w powietrzu, aby odrzucić przybornik.

Koniec

Gratulacje! Ukończono Mr Input 212: Voice (Dane wejściowe MR 212: głos).

  • Znasz polecenia "Dos" i "Nie" dla poleceń głosowych.
  • Zobaczyliśmy, w jaki sposób etykietki narzędzi zostały stosowane w celu uwiadomień użytkowników o poleceniach głosowych.
  • Po raz pierwszy zobaczyliśmy kilka typów opinii, które potwierdzały, że głos użytkownika został wysłuchany.
  • Wiesz, jak przełączać się między aparatem rozpoznawania słów kluczowych i aparatem rozpoznawania dyktowania oraz jak te dwie funkcje rozumieją i interpretują Twój głos.
  • Wiesz już, jak używać pliku SRGS i rozpoznawania gramatyki do rozpoznawania mowy w aplikacji.