Megosztás a következőn keresztül:


HoloLens (1. generációs) Input 212: Voice

Fontos

A Mixed Reality Academy oktatóanyagait a HoloLens (1. generációs), a Unity 2017 és Mixed Reality modern headsetek szem előtt tartásával terveztük. Ezért fontosnak tartjuk, hogy ezeket az oktatóanyagokat helyben hagyjuk azoknak a fejlesztőknek, akik továbbra is útmutatást keresnek az ilyen eszközök fejlesztéséhez. Ezek az oktatóanyagok nem frissülnek a legújabb eszközkészletekkel vagy interakciókkal, amelyeket a HoloLens 2 használnak, és előfordulhat, hogy nem kompatibilisek a Unity újabb verzióival. A támogatott eszközökön továbbra is működni fognak. A HoloLens 2 új oktatóanyag-sorozatot tett közzé.

A hangbevitel egy másik módot kínál a hologramok használatához. A hangparancsok nagyon természetes és egyszerű módon működnek. A hangparancsokat úgy tervezheti meg, hogy a következők legyenek:

  • Természetes
  • Könnyen megjegyezhető
  • Kontextusnak megfelelő
  • Kellően különbözik az ugyanazon a kontextuson belüli egyéb lehetőségektől

Az MR Basics 101-ben a KeywordRecognizer segítségével két egyszerű hangparancsot hoztunk létre. Az MR Input 212-ben részletesebben is megismerkedünk a következő megoldásokkal:

  • A HoloLens beszédmotorhoz optimalizált hangparancsok tervezése.
  • A felhasználót tájékoztatnia kell arról, hogy milyen hangparancsok érhetők el.
  • Nyugtázza, hogy hallottuk a felhasználó hangparancsát.
  • A Dictation Recognizer használatával megismerheti a felhasználó mondanivalóját.
  • A Nyelvhelyesség-felismerővel figyelheti az SRGS vagy a Beszédfelismerés nyelvhelyességi specifikációja vagy fájlja alapján végzett parancsokat.

Ebben a kurzusban újra megvizsgáljuk a Modellkezelőt, amelyet az MR Input 210 és az MR Input 211 beépített.

Fontos

Az alábbi fejezetekbe ágyazott videókat a Unity egy régebbi verziójával és a Mixed Reality Toolkit eszközzel rögzítettük. Bár a részletes utasítások pontosak és aktuálisak, előfordulhat, hogy a megfelelő videókban elavult szkriptek és vizualizációk jelennek meg. A videók továbbra is szerepelnek az utókor számára, és mivel a tárgyalt fogalmak továbbra is érvényesek.

Eszköztámogatás

Tanfolyam HoloLens Modern headsetek
MR Bemenet 212: Voice ✔️ ✔️

Előkészületek

Előfeltételek

Projektfájlok

  • Töltse le a projekthez szükséges fájlokat . A Unity 2017.2-s vagy újabb verziójára van szükség.
  • Törölje a fájlok archiválását az asztalra vagy más könnyen elérhető helyre.

Megjegyzés

Ha a letöltés előtt szeretné áttekinteni a forráskódot, az elérhető a GitHubon.

Errata és megjegyzések

  • Az "Enable Just My Code" (Csak a kód engedélyezése) elemet le kell tiltani (nincs bejelölve) a Visual Studióban a Tools-Options-Debugging>> területen, hogy töréspontokat találhasson a kódban.

Unity-beállítás

Utasítások

  1. Indítsa el a Unityt.
  2. Válassza a Megnyitás lehetőséget.
  3. Lépjen a Korábban nem archivált HolographicAcademy-Holograms-212-Voice mappába.
  4. Keresse meg és válassza ki a Modellkezelő indítása/ mappát.
  5. Kattintson a Mappa kiválasztása gombra.
  6. A Projekt panelen bontsa ki a Jelenetek mappát.
  7. Kattintson duplán a ModelExplorer jelenetre a Unityben való betöltéséhez.

Épület

  1. A Unityben válassza a Fájl > buildelési beállításai lehetőséget.
  2. Ha a Scenes/ModelExplorer nem szerepel a Jelenetek buildben listában, kattintson a Jelenetek hozzáadása elemre a jelenet hozzáadásához.
  3. Ha kifejezetten a HoloLenshez fejleszt, állítsa a Céleszköz beállítást HoloLens értékre. Ellenkező esetben hagyja a Bármely eszközön.
  4. Győződjön meg arról, hogy a Build Type (Build típusa ) értéke D3D , az SDK pedig a Latest installed (SDK 16299 vagy újabb) értékre van állítva.
  5. Kattintson a Build (Build) elemre.
  6. Hozzon létre egy "App" nevű új mappát .
  7. Kattintson egyszer az Alkalmazás mappára.
  8. Nyomja le a Select Folder (Mappa kiválasztása) gombot , és a Unity elkezdi felépíteni a projektet a Visual Studióhoz.

Amikor a Unity elkészült, megjelenik egy Fájlkezelő ablak.

  1. Nyissa meg az Alkalmazás mappát.
  2. Nyissa meg a ModelExplorer Visual Studio-megoldást.

Ha a HoloLensben történik az üzembe helyezés:

  1. A Visual Studio felső eszköztárának használatával módosítsa a célértéket Hibakeresésről Kiadásra , ARM-ről x86-ra.
  2. Kattintson a Helyi gép gomb melletti legördülő nyílra, és válassza a Távoli gép lehetőséget.
  3. Adja meg a HoloLens-eszköz IP-címét , és állítsa a hitelesítési módot Univerzális (titkosítatlan protokoll) értékre. Kattintson a Kiválasztás elemre. Ha nem ismeri az eszköz IP-címét, tekintse meg a Beállítások > Hálózat & Az internet > speciális beállításai című témakört.
  4. A felső menüsávon kattintson a Hibakeresés –> Indítás hibakeresés nélkül parancsra, vagy nyomja le a Ctrl + F5 billentyűkombinációt. Ha ez az első üzembe helyezés az eszközön, párosítania kell azt a Visual Studióval.
  5. Az alkalmazás üzembe helyezése után egy kijelölési kézmozdulattal zárja be a Fitboxot.

Modern headseten való üzembe helyezés esetén:

  1. A Visual Studio felső eszköztárának használatával módosítsa a célértéket Hibakeresésről Kiadásra , ARM-ről x64-esre.
  2. Győződjön meg arról, hogy az üzembehelyezési cél helyi gépre van állítva.
  3. A felső menüsávon kattintson a Hibakeresés –> Indítás hibakeresés nélkül parancsra, vagy nyomja le a Ctrl + F5 billentyűkombinációt.
  4. Ha az alkalmazás üzembe lett helyezve, zárja be a Fitboxot úgy, hogy lekérte az eseményindítót egy mozgásvezérlőn.

Megjegyzés

Előfordulhat, hogy piros hibát észlel a Visual Studio Hibák paneljén. Nyugodtan figyelmen kívül hagyhatja őket. Váltson a Kimenet panelre a tényleges buildállapot megtekintéséhez. A Kimenet panel hibáinak kijavítása szükséges (leggyakrabban egy szkript hibája okozza őket).

1. fejezet – Tudatosság

Célkitűzések

  • Ismerje meg a Dos and Don'ts of voice command design (Dos and Don'ts of voice command design) című témakört.
  • A KeywordRecognizer használatával tekintetalapú hangparancsokat adhat hozzá.
  • A kurzorvisszajelzések segítségével a felhasználókat a hangparancsokkal is megismertetheti.

Hangparancsok tervezése

Ebben a fejezetben megismerheti a hangparancsok tervezését. Hangparancsok létrehozásakor:

DO

  • Hozzon létre tömör parancsokat. Nem szeretne "Az aktuálisan kiválasztott videó lejátszása" parancsot használni, mert ez a parancs nem tömör, és a felhasználó könnyen elfelejtené. Ehelyett a következőt kell használnia: "Videó lejátszása", mert tömör, és több szótagból áll.
  • Használjon egyszerű szókincset. Mindig olyan gyakori szavakat és kifejezéseket próbáljon használni, amelyeket a felhasználó könnyen felfedezhet és megjegyezhet. Ha például az alkalmazásnak volt egy jegyzetobjektuma, amely megjeleníthető vagy elrejthető a nézetből, nem használhatja a "Placard megjelenítése" parancsot, mert a "placard" egy ritkán használt kifejezés. Ehelyett a "Megjegyzés megjelenítése" paranccsal jelenítse meg a jegyzetet az alkalmazásban.
  • Legyen konzisztens. A hangparancsokat konzisztensen kell kezelni az alkalmazáson belül. Tegyük fel, hogy két jelenet van az alkalmazásban, és mindkét jelenet tartalmaz egy gombot az alkalmazás bezárásához. Ha az első jelenet az "Exit" paranccsal aktiválta a gombot, de a második jelenet az "Alkalmazás bezárása" parancsot használta, akkor a felhasználó nagyon összezavarodik. Ha ugyanaz a funkció több jelenetben is megmarad, akkor ugyanazt a hangparancsot kell használni a aktiválásához.

NEM

  • Használjon egy szótagos parancsokat. Ha például hangparancsot hoz létre egy videó lejátszásához, kerülje az egyszerű "Lejátszás" parancs használatát, mivel ez csak egyetlen szótag, és a rendszer könnyen kihagyhatja. Ehelyett a következőt kell használnia: "Videó lejátszása", mert tömör, és több szótagból áll.
  • Használjon rendszerparancsokat. A rendszer fenntartja a "Select" parancsot, hogy elindítsa a tap eseményt az aktuálisan szűrt objektumhoz. Ne használja újra a "Kiválasztás" parancsot egy kulcsszóban vagy kifejezésben, mert előfordulhat, hogy nem a várt módon működik. Ha például az alkalmazásban egy kocka kiválasztására szolgáló hangparancs a "Kocka kiválasztása" volt, de a felhasználó egy gömböt nézett, amikor kimondta a parancsot, akkor a gömb lesz kiválasztva. Hasonlóképpen, az alkalmazássáv parancsai is engedélyezve vannak. Ne használja a következő beszédparancsokat a CoreWindow nézetben:
    1. Menj vissza
    2. Görgetőeszköz
    3. Nagyítási eszköz
    4. Eszköz húzása
    5. Adjust
    6. Eltávolítás
  • Használjon hasonló hangokat. Próbálja meg elkerülni a rímelt hangparancsok használatát. Ha volt egy bevásárlóalkalmazása, amely hangparancsként támogatta a "Show Store" és a "Show More" parancsot, akkor le szeretné tiltani az egyik parancsot, amíg a másik használatban volt. Például a "Show Store" (Áruház megjelenítése) gombbal megnyithatja az áruházat, majd letilthatja a parancsot az áruház megjelenítésekor, hogy a "Továbbiak megjelenítése" parancs használható legyen a böngészéshez.

Utasítások

  • A Unity Hierarchy paneljén a keresőeszközzel keresse meg a holoComm_screen_mesh objektumot.
  • Kattintson duplán a holoComm_screen_mesh objektumra a Jelenetben való megtekintéséhez. Ez az űrhajós watch, amely reagál a hangparancsainkra.
  • Az Inspector panelen keresse meg a Speech Input Source (Script) összetevőt.
  • Bontsa ki a Kulcsszavak szakaszt a támogatott hangparancs megtekintéséhez: Open Communicator.
  • Kattintson a jobb oldalon lévő fogaskerékre, majd válassza a Szkript szerkesztése lehetőséget.
  • A SpeechInputSource.cs segítségével megtudhatja, hogyan használja a KeywordRecognizert hangparancsok hozzáadásához.

Buildelés és üzembe helyezés

  • A Unityben a Fájl > buildelési beállításaival építse újra az alkalmazást.
  • Nyissa meg az Alkalmazás mappát.
  • Nyissa meg a ModelExplorer Visual Studio-megoldást.

(Ha a telepítés során már létrehozta/üzembe helyezte ezt a projektet a Visual Studióban, akkor megnyithatja a VS-példányt, és a rendszer rákérdezve az "Összes újrabetöltése" elemre kattinthat.

  • A Visual Studióban kattintson a Hibakeresés –> Indítás hibakeresés nélkül elemre, vagy nyomja le a Ctrl + F5 billentyűkombinációt.
  • Miután az alkalmazás üzembe helyezést végzett a HoloLensben, zárja be az illesztődobozt a légkoppintásos kézmozdulattal.
  • Nézze meg az űrhajós watch.
  • Ha a watch fókuszban van, ellenőrizze, hogy a kurzor mikrofonra vált-e. Ez visszajelzést ad arról, hogy az alkalmazás figyeli a hangparancsokat.
  • Ellenőrizze, hogy megjelenik-e elemleírás a watch. Ez segít a felhasználóknak felderíteni a "Communicator megnyitása" parancsot.
  • Miközben a watch néz, mondja ki a "Communicator megnyitása" parancsot a communicator panel megnyitásához.

2. fejezet – Nyugtázás

Célkitűzések

  • Üzenet rögzítése a Mikrofon bemenettel.
  • Küldjön visszajelzést a felhasználónak arról, hogy az alkalmazás figyeli a hangját.

Megjegyzés

A Mikrofon funkciót deklarálni kell ahhoz, hogy egy alkalmazás rögzíthesse a mikrofonból. Ezt már az MR Input 212-ben elvégezték, de ezt tartsa szem előtt a saját projektjei esetében.

  1. A Unity-szerkesztőben lépjen a lejátszó beállításaihoz a "Projektbeállítások > lejátszójának szerkesztése>" elemre kattintva.
  2. Kattintson a "Univerzális Windows-platform" fülre
  3. A "Közzétételi beállítások > képességei" szakaszban ellenőrizze a Mikrofon képességet

Utasítások

  • A Unity Hierarchy paneljén ellenőrizze, hogy a holoComm_screen_mesh objektum van-e kiválasztva.
  • Az Inspector panelen keresse meg az Astronaut Watch (Script) összetevőt.
  • Kattintson a Communicator Prefab tulajdonság értékeként beállított kis, kék kockára.
  • A Projekt panelen a Communicator előlapnak most már a fókuszra kell összpontosítania.
  • Kattintson a Communicator előlapjára a Projekt panelen, és tekintse meg az összetevőket az Inspectorben.
  • Tekintse meg a Mikrofonkezelő (szkript) összetevőt, amely lehetővé teszi a felhasználó hangjának rögzítését.
  • Figyelje meg, hogy a Communicator objektum rendelkezik egy Speech Input Handler (Script) összetevővel az Üzenet küldése parancsra való válaszadáshoz.
  • Tekintse meg a Communicator (Script) összetevőt, és kattintson duplán a szkriptre a Visual Studióban való megnyitásához.

A Communicator.cs felelős a megfelelő gombállapotok beállításáért a communicator eszközön. Így a felhasználók rögzíthetik az üzenetet, lejátszhatják és elküldhetik az üzenetet az űrhajósnak. Az animált hulláműrlapokat is elindítja és leállítja, hogy a felhasználó tudomásul vegye, hogy a hangjukat hallották.

  • A Communicator.cs fájlban törölje a következő sorokat (81 és 82) a Start metódusból. Ezzel engedélyezi a "Rekord" gombot a kommunikátoron.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);

Buildelés és üzembe helyezés

  • A Visual Studióban építse újra az alkalmazást, és helyezze üzembe az eszközön.
  • Nézze meg az űrhajós watch és mondja ki az "Open Communicator" szót, hogy megmutassa a kommunikátort.
  • Nyomja le a Felvétel gombot (mikrofont) az űrhajós szóbeli üzenetének rögzítéséhez.
  • Kezdjen el beszélni, és ellenőrizze, hogy a hullámanimáció lejátssza-e a kommunikátort, amely visszajelzést küld a felhasználónak arról, hogy hallják a hangját.
  • Nyomja le a Leállítás gombot (bal oldali négyzet), és ellenőrizze, hogy a hullámanimáció nem fut-e.
  • Nyomja le a Lejátszás gombot (jobb oldali háromszög) a rögzített üzenet lejátszásához és az eszközön való meghallgatásához.
  • A rögzített üzenet lejátszásának leállításához nyomja le a Leállítás gombot (jobb oldali négyzet).
  • Mondja ki az "Üzenet küldése" parancsot a kommunikátor bezárásához és az űrhajóstól kapott "Üzenet érkezett" válasz fogadásához.

3. fejezet – A diktálás felismerője

Célkitűzések

  • A Diktálásfelismerő használatával szöveggé alakíthatja a felhasználó beszédét.
  • A Dictation Recognizer hipotetizált és végleges eredményeinek megjelenítése a kommunikátorban.

Ebben a fejezetben a Dictation Recognizer használatával fogunk üzenetet létrehozni az űrhajós számára. A Dictation Recognizer használatakor vegye figyelembe a következőket:

  • Ahhoz, hogy a Dictation Recognizer működjön, kapcsolódnia kell a Wi-Fi-hez.
  • Az időtúllépések meghatározott idő elteltével következnek be. Két időtúllépésről kell tudnia:
    • Ha a felismerő elindul, és az első öt másodpercben nem hall hangot, időtúllépés történik.
    • Ha a felismerő eredményt ad, de húsz másodpercig hallgat, időtúllépés történik.
  • Egyszerre csak egy típusú felismerő (kulcsszó vagy diktálás) futtatható.

Megjegyzés

A Mikrofon funkciót deklarálni kell ahhoz, hogy egy alkalmazás rögzíthesse a mikrofonból. Ezt már az MR Input 212-ben elvégezték, de ezt tartsa szem előtt a saját projektjei esetében.

  1. A Unity-szerkesztőben lépjen a lejátszó beállításaihoz a "Projektbeállítások > lejátszójának szerkesztése>" elemre kattintva.
  2. Kattintson a "Univerzális Windows-platform" fülre
  3. A "Közzétételi beállítások > képességei" szakaszban ellenőrizze a Mikrofon képességet

Utasítások

Szerkessze a MicrophoneManager.cs fájlt a Dictation Recognizer használatához. Ezt fogjuk hozzáadni:

  1. A Rekord gomb megnyomásakor elindítjuk a DictationRecognizert.
  2. A DictationRecognizer által értelmezett hipotézis megjelenítése.
  3. A DictationRecognizer által megértett eredmények zárolása.
  4. Ellenőrizze, hogy van-e időtúllépés a DictationRecognizerben.
  5. A Leállítás gomb megnyomásakor vagy a mikrofonos munkamenet időtúllépése esetén állítsa le a DictationRecognizert.
  6. Indítsa újra a KeywordRecognizert, amely figyeli az Üzenet küldése parancsot.

Lássunk neki! Végezze el a 3.a kódolási gyakorlatát a MicrophoneManager.cs fájlban, vagy másolja és illessze be az alábbi kész kódot:

// 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;
            }
        }
    }
}

Buildelés és üzembe helyezés

  • Építse újra a Visual Studiót, és helyezze üzembe az eszközén.
  • Zárja be az illesztődobozt egy légkondentásos kézmozdulattal.
  • Nézze meg az űrhajós watch és mondja ki az "Open Communicator" szót.
  • Válassza a Rögzítés gombot (mikrofont) az üzenet rögzítéséhez.
  • Kezdjen el beszélni. A Diktálásfelismerő értelmezi a beszédet, és megjeleníti a hipotetizált szöveget a kommunikátorban.
  • Üzenet rögzítése közben próbálja meg kimondani az "Üzenet küldése" szöveget. Figyelje meg, hogy a Kulcsszó felismerője nem válaszol, mert a Diktálás felismerője még mindig aktív.
  • Ne beszéljen néhány másodpercig. Figyelje meg, ahogy a Dictation Recognizer befejezi a hipotézist, és megjeleníti a végeredményt.
  • Kezdjen el beszélni, majd szünetet 20 másodpercig. Ez a Dictation Recognizer időtúllépését okozza.
  • Figyelje meg, hogy a kulcsszófelismerő újra engedélyezve van a fenti időtúllépés után. A kommunikátor mostantól válaszol a hangparancsokra.
  • Mondja ki az "Üzenet küldése" parancsot, hogy elküldje az üzenetet az űrhajósnak.

4. fejezet – Nyelvhelyesség-felismerő

Célkitűzések

  • A Grammar Recognizer használatával felismerheti a felhasználó beszédét az SRGS vagy a Beszédfelismerés nyelvhelyességi specifikációja vagy fájlja alapján.

Megjegyzés

A Mikrofon funkciót deklarálni kell ahhoz, hogy egy alkalmazás rögzíthesse a mikrofonból. Ezt már az MR Input 212-ben elvégezték, de ezt tartsa szem előtt a saját projektjei esetében.

  1. A Unity-szerkesztőben lépjen a lejátszó beállításaihoz a "Projektbeállítások > lejátszójának szerkesztése>" elemre kattintva.
  2. Kattintson a "Univerzális Windows-platform" fülre
  3. A "Közzétételi beállítások > képességei" szakaszban ellenőrizze a Mikrofon képességet

Utasítások

  1. A Hierarchia panelen keresse meg a Jetpack_Center , és jelölje ki.
  2. Keresse meg a Tagalong Action szkriptet az Inspector panelen.
  3. Kattintson az Objektumcímke mentén mező jobb oldalán található kis körre.
  4. Az előugró ablakban keressen rá az SRGSToolbox kifejezésre , és válassza ki a listából.
  5. Tekintse meg az SRGSColor.xml fájlt a StreamingAssets mappában.
    1. Az SRGS tervezési specifikációja itt található a W3C webhelyén.

Az SRGS-fájlban háromféle szabály létezik:

  • Egy szabály, amely lehetővé teszi, hogy egy színt mondjon egy tizenkét színből álló listából.
  • Három szabály, amely a színszabály és a három alakzat egyikének kombinációját figyeli.
  • A colorChooser gyökérszabály, amely a három "szín + alakzat" szabály bármely kombinációját figyeli. Az alakzatok bármilyen sorrendben és bármilyen mennyiségben adhatók meg, csak egytől mind a háromig. Ez az egyetlen szabály, amelyet a rendszer figyel, mivel a kezdeti <nyelvtani> címke fájljának tetején található gyökérszabályként van megadva.

Buildelés és üzembe helyezés

  • Építse újra az alkalmazást a Unityben, majd buildelje és telepítse a Visual Studióból, hogy megtapasztalhassa az alkalmazást a HoloLensben.
  • Zárja be az illesztődobozt egy légkondentásos kézmozdulattal.
  • Nézze meg az űrhajós jetpack-jét, és végezzen el egy légkondenzálásos kézmozdulatot.
  • Kezdjen el beszélni. A Nyelvhelyesség-felismerő értelmezi a beszédet, és a felismerés alapján módosítja az alakzatok színeit. Egy példaparancs a "kék kör, sárga négyzet".
  • Az eszközkészlet bezárásához végezzen el egy másik légkoppintásos kézmozdulatot.

Vége

Gratulálunk! Ezzel befejezte az MR Input 212: Voice elemet.

  • Ismeri a Dos és a Don'ts hangparancsokat.
  • Láthatta, hogyan használhatók az elemleírások, hogy a felhasználók tisztában legyenek a hangparancsokkal.
  • Számos visszajelzési típust látott, amelyekkel nyugtázható, hogy a felhasználó hangja hallható.
  • Tudja, hogyan válthat a Kulcsszófelismerő és a Diktálásfelismerő között, és hogy ez a két funkció hogyan értelmezi és értelmezi a hangját.
  • Megtanulta, hogyan használhatja az SRGS-fájlt és a Grammar Recognizert a beszédfelismeréshez az alkalmazásban.