Dane wejściowe urządzenia HoloLens (1. generacji) 212: Głos

Ważne

Samouczki dotyczące akademii Mixed Reality zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji), Unity 2017 i Mixed Reality immersywnych zestawów słuchawkowych. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków w miejscu dla deweloperów, którzy nadal szukają wskazówek dotyczących opracowywania tych urządzeń. Te samouczki nie zostaną zaktualizowane przy użyciu najnowszych zestawów narzędzi ani interakcji używanych do HoloLens 2 i mogą nie być zgodne z nowszymi 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, aby były następujące:

  • Naturalne
  • Łatwe do zapamiętania
  • Odpowiedni kontekst
  • Wystarczająco różni się od innych opcji w tym samym kontekście

W języku MR Basics 101 użyliśmy słowa kluczowegoRecognizer do kompilowania dwóch prostych poleceń głosowych. W danych wejściowych MR 212 dowiemy się więcej i dowiesz się, jak:

  • Projektowanie poleceń głosowych zoptymalizowanych pod kątem aparatu mowy HoloLens.
  • Dowiedz się, jakie polecenia głosowe są dostępne przez użytkownika.
  • Potwierdź, że słyszeliśmy polecenie głosowe użytkownika.
  • Dowiedz się, co użytkownik mówi przy użyciu rozpoznawania dyktowania.
  • Użyj rozpoznawania gramatyki, aby nasłuchiwać poleceń opartych na specyfikacji SRGS lub specyfikacji gramatyki rozpoznawania mowy, pliku.

W tym kursie wrócimy do Eksploratora modeli, który utworzyliśmy w danych wejściowych MR 210 i MR Input 211.

Ważne

Filmy wideo osadzone w każdym z poniższych rozdziałów zostały nagrane przy użyciu starszej wersji aparatu Unity i zestawu narzędzi Mixed Reality Toolkit. Chociaż instrukcje krok po kroku są dokładne i aktualne, możesz zobaczyć skrypty i wizualizacje w odpowiednich filmach wideo, które są nieaktualne. Filmy wideo pozostają dołączone do potomności i dlatego, że omówione koncepcje nadal mają zastosowanie.

Obsługa urządzeń

Kurs HoloLens Immersyjne zestawy słuchawkowe
Dane wejściowe MR 212: Głos ✔️ ✔️

Przed rozpoczęciem

Wymagania wstępne

Pliki projektu

  • Pobierz pliki wymagane przez projekt. Wymaga aparatu Unity 2017.2 lub nowszego.
  • Usuń zarchiwizuj pliki na pulpicie lub innym łatwym w osiągnięciu lokalizacji.

Uwaga

Jeśli chcesz przejrzeć kod źródłowy przed pobraniem, jest on dostępny w witrynie GitHub.

Errata i notatki

  • Opcja "Włącz tylko mój kod" musi być wyłączona (niezaznaczone) w programie Visual Studio w obszarze Narzędzia-Opcje-Debugowanie>> w celu osiągnięcia punktów przerwania w kodzie.

Konfiguracja aparatu Unity

Instrukcje

  1. Uruchom środowisko Unity.
  2. Wybierz pozycję Otwórz.
  3. Przejdź do folderu HolographicAcademy-Holograms-212-Voice , który wcześniej nie został zarchiwizowany.
  4. Znajdź i wybierz folder Uruchamianie/Eksploratora modeli .
  5. Kliknij przycisk Wybierz folder .
  6. W panelu Projekt rozwiń folder Sceny .
  7. Kliknij dwukrotnie scenę ModelExplorer , aby załadować ją w środowisku Unity.

Kompilowanie

  1. W środowisku Unity wybierz pozycję Ustawienia kompilacji pliku>.
  2. Jeśli sceny/modelExplorer nie są wymienione w sekcji Sceny w kompilacji, kliknij przycisk Dodaj otwarte sceny , aby dodać scenę.
  3. Jeśli specjalnie opracowujesz urządzenie HoloLens, ustaw opcję Urządzenie docelowe na HoloLens. W przeciwnym razie pozostaw go na dowolnym urządzeniu.
  4. Upewnij się, że dla opcji Typ kompilacji ustawiono wartość D3D , a zestaw SDK ma wartość Najnowsza (która powinna być zestawem SDK 16299 lub nowszym).
  5. Kliknij pozycję Skompiluj.
  6. Utwórz nowy folder o nazwie "App".
  7. Jednym kliknięciem folderu Aplikacja .
  8. Naciśnij pozycję Wybierz folder , a aparat Unity rozpocznie kompilowanie projektu dla programu Visual Studio.

Po zakończeniu działania aparatu Unity zostanie wyświetlone okno Eksplorator plików.

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

W przypadku wdrażania na urządzeniu HoloLens:

  1. Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z usługi ARM na x86.
  2. Kliknij strzałkę listy rozwijanej obok przycisku Maszyna lokalna, a następnie wybierz pozycję Maszyna zdalna.
  3. Wprowadź adres IP urządzenia HoloLens i ustaw opcję Tryb uwierzytelniania na uniwersalny (protokół niezaszyfrowany). Kliknij pozycję Wybierz. Jeśli nie znasz adresu IP urządzenia, zapoznaj się z > ustawieniami sieci & opcje zaawansowane internetu>.
  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 go sparować z programem Visual Studio.
  5. Po wdrożeniu aplikacji odrzuć aplikację Fitbox za pomocą gestu wyboru.

W przypadku wdrażania w immersywnym zestawie słuchawkowym:

  1. Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z usługi ARM na x64.
  2. Upewnij się, że element docelowy wdrożenia ma ustawioną wartość Maszyna lokalna.
  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 kontrolerze ruchu.

Uwaga

W panelu Błędy programu Visual Studio mogą wystąpić pewne czerwone błędy. 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 wymagają naprawienia (najczęściej są one spowodowane błędem w skrypcie).

Rozdział 1 — Świadomość

Cele

  • Poznaj rozwiązania Dos i Nie należy projektować poleceń głosowych.
  • Użyj słowa kluczowegoRecognizer , aby dodać polecenia głosowe oparte na spojrzeniu.
  • Użytkownicy powinni wiedzieć o poleceniach głosowych przy użyciu opinii kursora.

Projekt poleceń głosowych

W tym rozdziale poznasz projektowanie poleceń głosowych. Podczas tworzenia poleceń głosowych:

DO

  • Utwórz zwięzłe polecenia. Nie chcesz używać polecenia "Odtwórz aktualnie wybrane wideo", ponieważ to polecenie nie jest zwięzłe i łatwo zostanie zapomniane przez użytkownika. Zamiast tego należy użyć: "Odtwórz wideo", ponieważ jest zwięzły i ma wiele sylab.
  • Użyj prostego słownictwa. Zawsze staraj się używać typowych słów i fraz, które są łatwe dla użytkownika do odnajdywania i zapamiętywania. Jeśli na przykład aplikacja miała obiekt notatek, który może być wyświetlany lub ukryty z widoku, nie należy używać polecenia "Show Placard", ponieważ "placard" jest rzadko używanym terminem. Zamiast tego użyj polecenia : "Pokaż notatkę", aby wyświetlić notatkę w aplikacji.
  • Bądź spójny. Polecenia głosowe powinny być spójne w całej aplikacji. Załóżmy, że masz dwie sceny w aplikacji, a obie sceny zawierają przycisk umożliwiający zamknięcie aplikacji. Jeśli pierwsza scena użyła polecenia "Exit" w celu wyzwolenia przycisku, ale druga scena użyła polecenia "Zamknij aplikację", użytkownik będzie bardzo zdezorientowany. Jeśli ta sama funkcja będzie się powtarzać w wielu scenach, należy użyć tego samego polecenia głosowego, aby je wyzwolić.

NIE

  • Użyj poleceń z pojedynczą sylabą. Na przykład, jeśli tworzysz polecenie głosowe do odtwarzania wideo, należy unikać używania prostego polecenia "Play", ponieważ jest to tylko jedna sylaable i może być łatwo pominięta przez system. Zamiast tego należy użyć: "Odtwórz wideo", ponieważ jest zwięzły i ma wiele sylab.
  • Użyj poleceń systemowych. Polecenie "Select" jest zarezerwowane przez system, aby wyzwolić zdarzenie Tap dla aktualnie ukierunkowanego obiektu. Nie używaj ponownie polecenia "Select" w słowie kluczowym lub frazie, ponieważ może nie działać zgodnie z oczekiwaniami. Jeśli na przykład polecenie głosowe do wybrania modułu w aplikacji miało wartość "Wybierz moduł", ale użytkownik patrzył na sferę po wypowiedzeniu polecenia, zamiast tego zostanie wybrana kula. Podobnie polecenia paska aplikacji są włączone głosowo. Nie używaj następujących poleceń mowy w widoku CoreWindow View:
    1. Przejdź wstecz
    2. Narzędzie przewijania
    3. Narzędzie powiększania
    4. Przeciągnij narzędzie
    5. Dostosować
    6. Usuń
  • Użyj podobnych dźwięków. Spróbuj uniknąć używania poleceń głosowych, które rymują. Jeśli masz aplikację do zakupów, która obsługiwała polecenie "Pokaż sklep" i "Pokaż więcej" jako polecenia głosowe, należy wyłączyć jedno z poleceń, podczas gdy druga była używana. Na przykład możesz użyć przycisku "Pokaż sklep" , aby otworzyć sklep, a następnie wyłączyć to polecenie, gdy sklep był wyświetlany, aby można było użyć polecenia "Pokaż więcej" do przeglądania.

Instrukcje

  • W panelu Hierarchia aparatu Unity użyj narzędzia wyszukiwania, aby znaleźć obiekt holoComm_screen_mesh .
  • Kliknij dwukrotnie obiekt holoComm_screen_mesh , aby wyświetlić go w scenie. Jest to watch astronauty, który odpowie na nasze polecenia głosowe.
  • W 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 komunikator.
  • Kliknij koła zębatego po prawej stronie, a następnie wybierz pozycję Edytuj skrypt.
  • Zapoznaj się z tematem SpeechInputSource.cs , aby dowiedzieć się, jak używa polecenia KeywordRecognizer do dodawania poleceń głosowych.

Wdróż i konfiguruj

  • W środowisku Unity użyj ustawień kompilacji plików>, aby ponownie skompilować aplikację.
  • Otwórz folder Aplikacja .
  • Otwórz rozwiązanie ModelExplorer Visual Studio.

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

  • W programie Visual Studio kliknij pozycję Debuguj —> rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
  • Po wdrożeniu aplikacji na urządzeniu HoloLens odrzuć pole dopasowania przy użyciu gestu naciśnięcia powietrza .
  • Spójrz na watch astronauty.
  • Gdy watch ma fokus, sprawdź, czy kursor zmieni się na mikrofon. Zapewnia to opinię, że aplikacja nasłuchuje poleceń głosowych.
  • Sprawdź, czy etykietka narzędzia jest wyświetlana w watch. Ułatwia to użytkownikom odnajdywanie polecenia "Open Communicator".
  • Patrząc na watch, powiedz "Open Communicator", aby otworzyć panel komunikatora.

Rozdział 2 — potwierdzenie

Cele

  • Zarejestruj komunikat przy użyciu danych wejściowych mikrofonu.
  • Przekaż opinię użytkownikowi, że aplikacja nasłuchuje głosu.

Uwaga

Możliwość mikrofonu musi być zadeklarowana, aby aplikacja rejestrowała nagrania z mikrofonu. Jest to wykonywane już w narzędziu MR Input 212, ale należy pamiętać o tym we własnych projektach.

  1. W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do pozycji "Edytuj > odtwarzacz ustawień > projektu"
  2. Kliknij kartę "platforma uniwersalna systemu Windows"
  3. W sekcji "Możliwości ustawień > publikowania" sprawdź możliwości mikrofonu

Instrukcje

  • Na panelu Hierarchia aparatu Unity sprawdź, czy wybrano obiekt holoComm_screen_mesh .
  • Na panelu Inspector (Inspektor) znajdź składnik Astronaut Watch (Script).
  • Kliknij mały, niebieski moduł, który jest ustawiony jako wartość właściwości Communicator Prefab .
  • W panelu Project (Projekt ) prefab (Prefab komunikatora ) powinien mieć teraz fokus.
  • Kliknij prefab komunikatora w panelu Projekt , aby wyświetlić jego składniki w Inspektorze.
  • Przyjrzyjmy się składnikowi Menedżer mikrofonów (skrypt), dzięki temu będziemy mogli rejestrować głos użytkownika.
  • Zwróć uwagę, że obiekt Communicator ma składnik obsługi wprowadzania mowy (script) do odpowiadania na polecenie Wyślij komunikat .
  • Przyjrzyj się składnikowi Communicator (skrypt) i kliknij dwukrotnie skrypt, aby otworzyć go w programie Visual Studio.

Communicator.cs jest odpowiedzialny za ustawienie odpowiednich stanów przycisku na urządzeniu komunikatora. Dzięki temu nasi użytkownicy będą mogli rejestrować wiadomość, odtwarzać ją i wysyłać wiadomość do astronauty. Rozpocznie się również animowany formularz falowy, aby potwierdzić użytkownikowi, że ich głos został wysłuchany.

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

Wdróż i konfiguruj

  • W programie Visual Studio skompiluj aplikację i wdróż na urządzeniu.
  • Spójrz na watch astronauty i powiedz "Open Communicator", aby pokazać komunikator.
  • Naciśnij przycisk Nagraj (mikrofon), aby rozpocząć nagrywanie słownego komunikatu dla astronauty.
  • Zacznij mówić i sprawdź, czy animacja fala gra na komunikatorze, który dostarcza opinii użytkownikowi, że ich głos jest słyszany.
  • Naciśnij przycisk Zatrzymaj (lewy kwadrat) i sprawdź, czy animacja falowa przestaje działać.
  • Naciśnij przycisk Odtwórz (trójkąt w prawo), aby odtworzyć nagrany komunikat i usłyszeć go na urządzeniu.
  • Naciśnij przycisk Zatrzymaj (prawy kwadrat), aby zatrzymać odtwarzanie nagranego komunikatu.
  • Powiedz "Wyślij wiadomość", aby zamknąć komunikator i otrzymać odpowiedź "Odebrano wiadomość" od astronauty.

Rozdział 3 . Omówienie i rozpoznawanie dyktowania

Cele

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

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

  • Aby rozpoznawanie dyktowania działało, musisz nawiązać połączenie z siecią Wi-Fi.
  • Przekroczenia limitu czasu występują po określonym przedziale czasu. Istnieją dwa limity czasu, o których należy pamiętać:
    • Jeśli rozpoznawanie zostanie uruchomione i nie usłyszy żadnego dźwięku przez pierwsze pięć sekund, upłynął limit czasu.
    • Jeśli rozpoznawanie dało wynik, ale następnie słyszy milczenie przez dwadzieścia sekund, zostanie przekroczony limit czasu.
  • W danym momencie może działać tylko jeden typ rozpoznawania (słowo kluczowe lub dyktowanie).

Uwaga

Możliwość mikrofonu musi być zadeklarowana, aby aplikacja rejestrowała nagrania z mikrofonu. Jest to wykonywane już w narzędziu MR Input 212, ale należy pamiętać o tym we własnych projektach.

  1. W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do pozycji "Edytuj > odtwarzacz ustawień > projektu"
  2. Kliknij kartę "platforma uniwersalna systemu Windows"
  3. W sekcji "Możliwości ustawień > publikowania" sprawdź możliwości mikrofonu

Instrukcje

Edytujemy plik MicrophoneManager.cs , aby użyć rozpoznawania dyktowania. To właśnie dodamy:

  1. Po naciśnięciu przycisku Rekorduruchomimy polecenie DictationRecognizer.
  2. Pokaż hipotezę tego, co zrozumiał DictationRecognizer.
  3. Zablokuj wyniki tego, co zrozumiał DictationRecognizer.
  4. Sprawdź limity czasu z elementu DictationRecognizer.
  5. Po naciśnięciu przycisku Zatrzymaj lub przekroczeniu limitu czasu sesji mikrofonu zatrzymaj element DictationRecognizer.
  6. Uruchom ponownie słowo kluczoweRecognizer, które będzie nasłuchiwać polecenia Wyślij komunikat .

Zaczynajmy. Ukończ wszystkie ćwiczenia kodowania dla wersji 3.a w pliku MicrophoneManager.cs lub skopiuj i wklej gotowy kod znajdujący się 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

  • Ponowne kompilowanie w programie Visual Studio i wdrażanie na urządzeniu.
  • Odrzuć pole dopasowania za pomocą gestu naciśnięcia powietrza.
  • Spójrz na watch astronauty i powiedz "Open Communicator".
  • Wybierz przycisk Nagraj (mikrofon), aby zarejestrować wiadomość.
  • Zacznij mówić. Rozpoznawanie dyktowania zinterpretuje mowę i pokaże hipotezę tekstową w komunikatorze.
  • Spróbuj powiedzieć "Wyślij wiadomość" podczas rejestrowania wiadomości. Zwróć uwagę, że rozpoznawanie słów kluczowych nie odpowiada, ponieważ rozpoznawanie dyktowania jest nadal aktywne.
  • Przestań mówić przez kilka sekund. Obejrzyj, jak rozpoznawanie dyktowania kończy swoją hipotezę i pokazuje końcowy wynik.
  • Zacznij mówić, a następnie wstrzymaj się przez 20 sekund. Spowoduje to przekroczenie limitu czasu rozpoznawania dyktowania .
  • Zwróć uwagę, że rozpoznawanie słów kluczowych jest ponownie włączone po przekroczeniu powyższego limitu czasu. Komunikator odpowie teraz na polecenia głosowe.
  • Powiedz "Wyślij wiadomość", aby wysłać wiadomość do astronauty.

Rozdział 4 . Rozpoznawanie gramatyki

Cele

  • Rozpoznawanie gramatyki służy do rozpoznawania mowy użytkownika zgodnie ze specyfikacją SRGS lub specyfikacją gramatyki rozpoznawania mowy.

Uwaga

Możliwość mikrofonu musi być zadeklarowana, aby aplikacja rejestrowała nagrania z mikrofonu. Jest to wykonywane już w narzędziu MR Input 212, ale należy pamiętać o tym we własnych projektach.

  1. W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do pozycji "Edytuj > odtwarzacz ustawień > projektu"
  2. Kliknij kartę "platforma uniwersalna systemu Windows"
  3. W sekcji "Możliwości ustawień > publikowania" sprawdź możliwości mikrofonu

Instrukcje

  1. W panelu Hierarchia wyszukaj Jetpack_Center i wybierz ją.
  2. Poszukaj skryptu akcji Tagalong w panelu Inspector (Inspektor ).
  3. Kliknij mały okrąg po prawej stronie pola Obiekt do tagowania .
  4. W wyświetlonym oknie wyszukaj pozycję SRGSToolbox i wybierz ją z listy.
  5. Zapoznaj się z plikiem SRGSColor.xml w folderze StreamingAssets .
    1. Specyfikację projektu SRGS można znaleźć na stronie internetowej W3C tutaj.

W naszym pliku SRGS mamy trzy typy reguł:

  • Reguła, która pozwala powiedzieć jeden kolor z listy dwunastu kolorów.
  • Trzy reguły, które nasłuchują kombinacji reguły koloru i jednej 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 jednego do wszystkich trzech. Jest to jedyna reguła, która jest nasłuchiwany, ponieważ jest określona jako reguła główna w górnej części pliku w początkowym <tagu gramatyki> .

Wdróż i konfiguruj

  • Skompiluj ponownie aplikację w środowisku Unity, a następnie skompiluj i wdróż z poziomu programu Visual Studio, aby korzystać z aplikacji na urządzeniu HoloLens.
  • Odrzuć pole dopasowania za pomocą gestu naciśnięcia powietrza.
  • Spójrz na jetpack astronauty i wykonaj gest naciśnięcia powietrza.
  • Zacznij mówić. Rozpoznawanie gramatyki zinterpretuje 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 powietrza, aby odrzucić przybornik.

Koniec

Gratulacje! Ukończono dane wejściowe MR 212: Głos.

  • Znasz polecenia Dos i Nie rób poleceń głosowych.
  • Zobaczyliśmy, jak zastosowano etykietki narzędzi, aby umożliwić użytkownikom rozpoznawanie poleceń głosowych.
  • Zobaczyliśmy kilka rodzajów opinii używanych do potwierdzenia, że głos użytkownika został wysłuchany.
  • Wiesz, jak przełączać się między rozpoznawaniem słów kluczowych i rozpoznawaniem 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.