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
- Komputer Windows 10 skonfigurowany z zainstalowanymi odpowiednimi narzędziami.
- Niektóre podstawowe możliwości programowania w języku C#.
- Należy ukończyć 101 podstawowe informacje o języku MR.
- Należy ukończyć dane wejściowe MR 210.
- Należy ukończyć dane wejściowe MR 211.
- Urządzenie HoloLens skonfigurowane do programowania.
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
- Uruchom środowisko Unity.
- Wybierz pozycję Otwórz.
- Przejdź do folderu HolographicAcademy-Holograms-212-Voice , który wcześniej nie został zarchiwizowany.
- Znajdź i wybierz folder Uruchamianie/Eksploratora modeli .
- Kliknij przycisk Wybierz folder .
- W panelu Projekt rozwiń folder Sceny .
- Kliknij dwukrotnie scenę ModelExplorer , aby załadować ją w środowisku Unity.
Kompilowanie
- W środowisku Unity wybierz pozycję Ustawienia kompilacji pliku>.
- Jeśli sceny/modelExplorer nie są wymienione w sekcji Sceny w kompilacji, kliknij przycisk Dodaj otwarte sceny , aby dodać scenę.
- Jeśli specjalnie opracowujesz urządzenie HoloLens, ustaw opcję Urządzenie docelowe na HoloLens. W przeciwnym razie pozostaw go na dowolnym urządzeniu.
- 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).
- Kliknij pozycję Skompiluj.
- Utwórz nowy folder o nazwie "App".
- Jednym kliknięciem folderu Aplikacja .
- 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.
- Otwórz folder Aplikacja .
- Otwórz rozwiązanie ModelExplorer Visual Studio.
W przypadku wdrażania na urządzeniu HoloLens:
- 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.
- Kliknij strzałkę listy rozwijanej obok przycisku Maszyna lokalna, a następnie wybierz pozycję Maszyna zdalna.
- 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>.
- 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.
- Po wdrożeniu aplikacji odrzuć aplikację Fitbox za pomocą gestu wyboru.
W przypadku wdrażania w immersywnym zestawie słuchawkowym:
- 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.
- Upewnij się, że element docelowy wdrożenia ma ustawioną wartość Maszyna lokalna.
- Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
- 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:
- Przejdź wstecz
- Narzędzie przewijania
- Narzędzie powiększania
- Przeciągnij narzędzie
- Dostosować
- 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.
- W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do pozycji "Edytuj > odtwarzacz ustawień > projektu"
- Kliknij kartę "platforma uniwersalna systemu Windows"
- 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.
- W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do pozycji "Edytuj > odtwarzacz ustawień > projektu"
- Kliknij kartę "platforma uniwersalna systemu Windows"
- 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:
- Po naciśnięciu przycisku Rekorduruchomimy polecenie DictationRecognizer.
- Pokaż hipotezę tego, co zrozumiał DictationRecognizer.
- Zablokuj wyniki tego, co zrozumiał DictationRecognizer.
- Sprawdź limity czasu z elementu DictationRecognizer.
- Po naciśnięciu przycisku Zatrzymaj lub przekroczeniu limitu czasu sesji mikrofonu zatrzymaj element DictationRecognizer.
- 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.
- W edytorze aparatu Unity przejdź do ustawień odtwarzacza, przechodząc do pozycji "Edytuj > odtwarzacz ustawień > projektu"
- Kliknij kartę "platforma uniwersalna systemu Windows"
- W sekcji "Możliwości ustawień > publikowania" sprawdź możliwości mikrofonu
Instrukcje
- W panelu Hierarchia wyszukaj Jetpack_Center i wybierz ją.
- Poszukaj skryptu akcji Tagalong w panelu Inspector (Inspektor ).
- Kliknij mały okrąg po prawej stronie pola Obiekt do tagowania .
- W wyświetlonym oknie wyszukaj pozycję SRGSToolbox i wybierz ją z listy.
- Zapoznaj się z plikiem SRGSColor.xml w folderze StreamingAssets .
- 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.