HoloLens (1. gen) i Azure 301: tłumaczenie języka


Uwaga

Samouczki dotyczące akademii Mixed Reality zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji) 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. Będą one utrzymywane w celu kontynuowania pracy na obsługiwanych urządzeniach. W przyszłości zostanie opublikowana nowa seria samouczków, które pokażą, jak opracowywać HoloLens 2. To powiadomienie zostanie zaktualizowane za pomocą linku do tych samouczków po ich opublikowaniu.


W tym kursie dowiesz się, jak dodać możliwości tłumaczenia do aplikacji rzeczywistości mieszanej przy użyciu usług Azure Cognitive Services za pomocą interfejsu API tłumaczenia tekstu w usłudze Translator.

Produkt końcowy

Interfejs API tłumaczenia tekstu w usłudze Translator to usługa tłumaczenia, która działa niemal w czasie rzeczywistym. Usługa jest oparta na chmurze, a przy użyciu wywołania interfejsu API REST aplikacja może wykorzystać technologię neuronowego tłumaczenia maszynowego do tłumaczenia tekstu na inny język. Aby uzyskać więcej informacji, odwiedź stronę interfejsu API tłumaczenia tekstu w usłudze Azure Translator.

Po ukończeniu tego kursu będziesz mieć aplikację rzeczywistości mieszanej, która będzie mogła wykonać następujące czynności:

  1. Użytkownik będzie przemawiać do mikrofonu podłączonego do immersyjnego zestawu słuchawkowego (VR) (lub wbudowanego mikrofonu urządzenia HoloLens).
  2. Aplikacja przechwyci dyktowanie i wyśle ją do interfejsu API tłumaczenia tekstu w usłudze Azure Translator.
  3. Wynik tłumaczenia zostanie wyświetlony w prostej grupie interfejsu użytkownika w scenie aparatu Unity.

W tym kursie nauczysz się, jak uzyskać wyniki z usługi Translator w przykładowej aplikacji opartej na środowisku Unity. Będzie to konieczne, aby zastosować te pojęcia do aplikacji niestandardowej, którą możesz utworzyć.

Obsługa urządzeń

Kurs HoloLens Immersyjne zestawy słuchawkowe
MR i Azure 301: tłumaczenie języka ✔️ ✔️

Uwaga

Chociaż ten kurs koncentruje się przede wszystkim na zestawach słuchawkowych Windows Mixed Reality immersywnych (VR), możesz również zastosować to, czego nauczysz się w tym kursie, aby Microsoft HoloLens. Zgodnie z kursem zobaczysz notatki dotyczące wszelkich zmian, które mogą być konieczne, aby obsługiwać urządzenie HoloLens. Podczas korzystania z urządzenia HoloLens można zauważyć echo podczas przechwytywania głosu.

Wymagania wstępne

Uwaga

Ten samouczek jest przeznaczony dla deweloperów, którzy mają podstawowe doświadczenie w językach Unity i C#. Należy również pamiętać, że wymagania wstępne i pisemne instrukcje zawarte w tym dokumencie reprezentują to, co zostało przetestowane i zweryfikowane w momencie pisania (maj 2018 r.). Możesz bezpłatnie korzystać z najnowszego oprogramowania, jak pokazano w artykule dotyczącym instalacji narzędzi , choć nie należy zakładać, że informacje w tym kursie doskonale pasują do tego, co znajdziesz w nowszym oprogramowaniu niż wymienione poniżej.

Na potrzeby tego kursu zalecamy następujące oprogramowanie i sprzęt:

Przed rozpoczęciem

  • Aby uniknąć problemów z kompilowaniem tego projektu, zdecydowanie zaleca się utworzenie projektu wymienionego w tym samouczku w folderze głównym lub niemal głównym (długie ścieżki folderów mogą powodować problemy w czasie kompilacji).

  • Kod w tym samouczku umożliwi rejestrowanie z domyślnego urządzenia mikrofonu podłączonego do komputera. Upewnij się, że domyślne urządzenie mikrofonu jest ustawione na urządzenie, którego planujesz użyć do przechwytywania głosu.

  • Aby umożliwić komputerowi włączenie dyktowania, przejdź do pozycji Ustawienia > Mowa o ochronie prywatności > , pisma odręcznego & wpisywania i wybierania przycisku Włącz usługi mowy i wpisywania sugestii.

  • Jeśli używasz mikrofonu i słuchawek połączonych z zestawem słuchawkowym (lub wbudowanym), upewnij się, że opcja "Gdy nosim mój zestaw słuchawkowy, przełącznik do mikrofonu nagłownego" jest włączona w obszarze Ustawienia > Mixed Reality > Audio i mowa.

    Ustawienia rzeczywistości mieszanej

    Ustawienie mikrofonu

Ostrzeżenie

Należy pamiętać, że jeśli opracowujesz immersywny zestaw słuchawkowy dla tego laboratorium, mogą wystąpić problemy z urządzeniem wyjściowym audio. Jest to spowodowane problemem z aparatem Unity, który został rozwiązany w nowszych wersjach aparatu Unity (Unity 2018.2). Problem uniemożliwia aparatowi Unity zmianę domyślnego urządzenia wyjściowego audio w czasie wykonywania. Aby obejść ten problem, upewnij się, że wykonano powyższe kroki, a następnie zamknij i otwórz ponownie edytor, gdy ten problem się przedstawia.

Rozdział 1 — witryna Azure Portal

Aby korzystać z interfejsu API usługi Azure Translator, należy skonfigurować wystąpienie usługi, które ma zostać udostępnione aplikacji.

  1. Zaloguj się do witryny Azure Portal.

    Uwaga

    Jeśli nie masz jeszcze konta platformy Azure, musisz go utworzyć. Jeśli obserwujesz ten samouczek w sytuacji w klasie lub laboratorium, poproś instruktora lub jednego z opiekunów o pomoc w skonfigurowaniu nowego konta.

  2. Po zalogowaniu kliknij pozycję Nowy w lewym górnym rogu i wyszukaj ciąg "Interfejs API tłumaczenia tekstu w usłudze Translator". Wybierz klawisz Enter.

    Nowy zasób

    Uwaga

    Wyraz Nowy mógł zostać zastąpiony ciągiem Create a resource (Utwórz zasób) w nowszych portalach.

  3. Nowa strona zawiera opis usługi interfejsu API tłumaczenia tekstu w usłudze Translator. W lewym dolnym rogu tej strony wybierz przycisk Utwórz , aby utworzyć skojarzenie z tą usługą.

    Tworzenie usługi API tłumaczenia tekstu w usłudze Translator

  4. Po kliknięciu pozycji Utwórz:

    1. Wstaw żądaną nazwę dla tego wystąpienia usługi.

    2. Wybierz odpowiednią subskrypcję.

    3. Wybierz odpowiednią dla Ciebie warstwę cenową , jeśli jest to pierwszy raz podczas tworzenia usługi tłumaczenia tekstu w usłudze Translator, powinna być dostępna warstwa bezpłatna (o nazwie F0).

    4. Wybierz grupę zasobów lub utwórz nową. Grupa zasobów umożliwia monitorowanie, kontrolowanie dostępu, aprowizowania i zarządzania rozliczeniami dla kolekcji zasobów platformy Azure. Zaleca się zachowanie wszystkich usług platformy Azure skojarzonych z jednym projektem (np. takich jak te laboratoria) w ramach wspólnej grupy zasobów.

      Jeśli chcesz dowiedzieć się więcej na temat grup zasobów platformy Azure, odwiedź artykuł dotyczący grupy zasobów.

    5. Określ lokalizację grupy zasobów (jeśli tworzysz nową grupę zasobów). Lokalizacja najlepiej byłaby znajdować się w regionie, w którym aplikacja zostanie uruchomiona. Niektóre zasoby platformy Azure są dostępne tylko w niektórych regionach.

    6. Musisz również potwierdzić, że rozumiesz warunki i postanowienia zastosowane do tej usługi.

    7. Wybierz przycisk Utwórz.

      Wybierz przycisk Utwórz.

  5. Po kliknięciu pozycji Utwórz trzeba będzie poczekać, aż usługa zostanie utworzona, może to potrwać minutę.

  6. Po utworzeniu wystąpienia usługi w portalu zostanie wyświetlone powiadomienie.

    Powiadomienie o tworzeniu usługi platformy Azure

  7. Kliknij powiadomienie, aby zapoznać się z nowym wystąpieniem usługi.

    Przejdź do menu podręcznego zasobu.

  8. Kliknij przycisk Przejdź do zasobu w powiadomieniu, aby zapoznać się z nowym wystąpieniem usługi. Nastąpi przekierowanie do nowego wystąpienia usługi interfejsu API tłumaczenia tekstu w usłudze Translator.

    Strona usługi API tłumaczenia tekstu w usłudze Translator

  9. W ramach tego samouczka aplikacja będzie musiała wykonywać wywołania usługi, co odbywa się za pomocą klucza subskrypcji usługi.

  10. Na stronie Szybki start usługi tłumaczenia tekstu w usłudze Translator przejdź do pierwszego kroku, Pobierz klucze i kliknij pozycję Klucze (możesz to również osiągnąć, klikając niebieskie klucze hiperłącza znajdujące się w menu nawigacji Usługi, oznaczone ikoną klucza). Spowoduje to ujawnienie kluczy usługi.

  11. Utwórz kopię jednego z wyświetlanych kluczy, ponieważ będzie to potrzebne później w projekcie.

Rozdział 2 — Konfigurowanie projektu aparatu Unity

Skonfiguruj i przetestuj immersywny zestaw słuchawkowy rzeczywistości mieszanej.

Uwaga

Na potrzeby tego kursu nie będą potrzebne kontrolery ruchu. Jeśli potrzebujesz pomocy technicznej dotyczącej konfigurowania immersyjnego zestawu słuchawkowego, wykonaj następujące kroki.

Poniżej przedstawiono typową konfigurację do tworzenia przy użyciu rzeczywistości mieszanej, a w związku z tym jest to dobry szablon dla innych projektów:

  1. Otwórz aparat Unity i kliknij pozycję Nowy.

    Uruchom nowy projekt aparatu Unity.

  2. Teraz musisz podać nazwę projektu aparatu Unity. Wstaw MR_Translation. Upewnij się, że typ projektu ma ustawioną wartość 3D. Ustaw lokalizację na odpowiednią dla Ciebie (pamiętaj, że bliżej katalogów głównych jest lepiej). Następnie kliknij pozycję Utwórz projekt.

    Podaj szczegóły nowego projektu aparatu Unity.

  3. Po otwarciu aparatu Unity warto sprawdzić domyślny edytor skryptów ustawiony na program Visual Studio. Przejdź do pozycji Edytuj > preferencje , a następnie w nowym oknie przejdź do pozycji Narzędzia zewnętrzne. Zmień edytor skryptów zewnętrznych na Visual Studio 2017. Zamknij okno Preferencje .

    Aktualizowanie preferencji edytora skryptów.

  4. Następnie przejdź do pozycji Ustawienia kompilacji plików > i przełącz platformę na platforma uniwersalna systemu Windows, klikając przycisk Przełącz platformę.

    Okno Ustawienia kompilacji, przełącz platformę na platformę UWP.

  5. Przejdź do pozycji Ustawienia kompilacji pliku > i upewnij się, że:

    1. Urządzenie docelowe jest ustawione na dowolne urządzenie.

      W przypadku Microsoft HoloLens ustaw wartość Urządzenie docelowe na HoloLens.

    2. Typ kompilacji jest ustawiony na D3D

    3. Zestaw SDK jest ustawiony na najnowszą zainstalowaną

    4. Wersja programu Visual Studio jest ustawiona na najnowszą zainstalowaną

    5. Kompilowanie i uruchamianie jest ustawione na komputer lokalny

    6. Zapisz scenę i dodaj ją do kompilacji.

      1. Zrób to, wybierając pozycję Dodaj otwarte sceny. Zostanie wyświetlone okno zapisywania.

        Kliknij przycisk Dodaj otwarte sceny

      2. Utwórz nowy folder dla tego i dowolnego przyszłego sceny, a następnie wybierz przycisk Nowy folder , aby utworzyć nowy folder, nadaj mu nazwę Sceny.

        Tworzenie nowego folderu skryptów

      3. Otwórz nowo utworzony folder Sceny , a następnie w polu Nazwa pliku: tekst wpisz MR_TranslationScene, a następnie naciśnij przycisk Zapisz.

        Nadaj nowej scenie nazwę.

        Pamiętaj, że musisz zapisać sceny aparatu Unity w folderze Assets , ponieważ muszą być skojarzone z projektem aparatu Unity. Tworzenie folderu scen (i innych podobnych folderów) to typowy sposób tworzenia struktury projektu aparatu Unity.

    7. Pozostałe ustawienia w obszarze Ustawienia kompilacji powinny być pozostawione jako domyślne na razie.

  6. W oknie Ustawienia kompilacji kliknij przycisk Ustawienia odtwarzacza , spowoduje to otwarcie powiązanego panelu w obszarze, w którym znajduje się inspektor .

    Otwórz ustawienia odtwarzacza.

  7. W tym panelu należy zweryfikować kilka ustawień:

    1. Na karcie Inne ustawienia :

      1. Wersja środowiska uruchomieniowego skryptów powinna być stabilna (odpowiednik platformy.NET 3.5).

      2. Zaplecze skryptów powinno mieć wartość .NET

      3. Poziom zgodności interfejsu API powinien mieć wartość .NET 4.6

        Zaktualizuj inne ustawienia.

    2. Na karcie Ustawienia publikowania w obszarze Możliwości sprawdź:

      1. InternetClient

      2. Mikrofon

        Aktualizowanie ustawień publikowania.

    3. W dalszej części panelu w obszarze Ustawienia XR (znajdujące się poniżej ustawień publikowania) zaznacz opcję Virtual Reality Supported (Obsługa rzeczywistości wirtualnej), upewnij się, że dodano zestaw SDK Windows Mixed Reality.

      Zaktualizuj ustawienia X R.

  8. Po powrocie do ustawień kompilacjiprojekty języka C# aparatu Unity nie są już wyszarzone; zaznacz pole wyboru obok tego.

  9. Zamknij okno Build Settings (Ustawienia kompilacji).

  10. Zapisz scenę i projekt (PLIK > ZAPISZ SCENĘ / PLIK > ZAPISZ PROJEKT).

Rozdział 3 — Konfiguracja głównej kamery

Ważne

Jeśli chcesz pominąć składnik Unity Set up tego kursu i kontynuować bezpośrednio w kodzie, możesz pobrać ten pakiet unitypackage, zaimportować go do projektu jako pakiet niestandardowy, a następnie kontynuować z rozdziału 5. Nadal trzeba będzie utworzyć projekt aparatu Unity.

  1. W panelu hierarchii znajdziesz obiekt o nazwie Kamera główna, ten obiekt reprezentuje punkt widzenia "head" po "wewnątrz" aplikacji.

  2. Z pulpitem nawigacyjnym aparatu Unity przed tobą wybierz obiekt Main Camera GameObject. Zauważysz, że panel inspektora (zazwyczaj znajduje się po prawej stronie pulpitu nawigacyjnego) wyświetli różne składniki tego obiektu GameObject z przekształceniem u góry, a następnie aparatem i innymi składnikami. Konieczne będzie zresetowanie przekształcenia kamery głównej, aby była poprawnie umieszczona.

  3. W tym celu wybierz ikonę Koła zębatego obok składnika Przekształcanie aparatu, a następnie wybierz pozycję Resetuj.

    Zresetuj przekształcenie aparatu głównego.

  4. Następnie składnik Transform powinien wyglądać następująco:

    1. Pozycja jest ustawiona na 0, 0, 0

    2. Obrót jest ustawiony na wartość 0, 0, 0

    3. Skalowanie jest ustawione na 1, 1, 1

      Przekształcanie informacji o aparacie

  5. Następnie po wybraniu obiektu Main Camera (Główny aparat) zobacz przycisk Add Component (Dodaj składnik ) znajdujący się w dolnej części Panelu inspektora.

  6. Wybierz ten przycisk i wyszukaj (wpisując źródło audio w polu wyszukiwania lub przechodząc do sekcji) dla składnika o nazwie Źródło audio , jak pokazano poniżej, i wybierz go (naciśnięcie klawisza Enter na nim również działa).

  7. Składnik Źródło dźwięku zostanie dodany do aparatu głównego, jak pokazano poniżej.

    Dodaj składnik Źródło audio.

    Uwaga

    W przypadku Microsoft HoloLens należy również zmienić następujące elementy, które są częścią składnika Aparat główny:

    • Wyczyść flagi: Kolor stały.
    • Tle "Czarny, Alfa 0" — kolor szesnastkowy: #00000000.

Rozdział 4 — Konfigurowanie kanwy debugowania

Aby pokazać dane wejściowe i wyjściowe tłumaczenia, należy utworzyć podstawowy interfejs użytkownika. Na potrzeby tego kursu utworzysz obiekt interfejsu użytkownika kanwy z kilkoma obiektami "Text", aby pokazać dane.

  1. Kliknij prawym przyciskiem myszy pusty obszar panelu hierarchii w obszarze Interfejs użytkownika, dodaj kanwę.

    Dodaj nowy obiekt interfejsu użytkownika kanwy.

  2. Po wybraniu obiektu Kanwy w panelu inspektora (w składniku Kanwy) zmień tryb renderowania na Obszar światowy.

  3. Następnie zmień następujące parametry w przekształceniu panelu inspektora:

    1. POZ - X 0 Y 0 Z 40

    2. Szerokość — 500

    3. Wysokość — 300

    4. Skali - X 0.13 Y 0.13 Z 0.13

      Zaktualizuj przekształcenie rect dla kanwy.

  4. Kliknij prawym przyciskiem myszy kanwę w panelu hierarchii w obszarze Interfejs użytkownika i dodaj panel. W tym panelu zostanie wyświetlone tło tekstu, który będzie wyświetlany w scenie.

  5. Kliknij prawym przyciskiem myszy panel w panelu hierarchii w obszarze Interfejs użytkownika i dodaj obiekt Text. Powtórz ten sam proces, dopóki nie utworzono w sumie czterech obiektów tekstowych interfejsu użytkownika (wskazówka: jeśli wybrano pierwszy obiekt "Text", możesz po prostu nacisnąć klawisze "Ctrl" + "D", aby go zduplikować, dopóki nie masz czterech w sumie).

  6. Dla każdego obiektu tekstowego wybierz go i użyj poniższych tabel, aby ustawić parametry w Panelu inspektora.

    1. Dla składnika Przekształć rect :

      Nazwa Przekształcanie — położenie Width Height
      MikrofonStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      DictationLabel X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Dla składnika Text (Script) :

      Nazwa Tekst Rozmiar czcionki
      MikrofonStatusLabel Stan mikrofonu: 20
      AzureResponseLabel Odpowiedź internetowa platformy Azure 20
      DictationLabel Właśnie powiedziałeś: 20
      TranslationResultLabel Translacja: 20

      Wprowadź odpowiednie wartości dla etykiet interfejsu użytkownika.

    3. Ponadto ustaw styl czcionki jako pogrubiony. Ułatwi to czytanie tekstu.

      Czcionka pogrubiona.

  7. Dla każdego obiektu tekstowego interfejsu użytkownika utworzonego w rozdziale 5 utwórz nowy podrzędnyobiekt tekstowy interfejsu użytkownika. Te elementy podrzędne będą wyświetlać dane wyjściowe aplikacji. Utwórz obiekty podrzędne , klikając prawym przyciskiem myszy zamierzony element nadrzędny (np. MikrofonStatusLabel), a następnie wybierz pozycję Interfejs użytkownika, a następnie wybierz pozycję Tekst.

  8. Dla każdego z tych elementów podrzędnych wybierz ją i użyj poniższych tabel, aby ustawić parametry w Panelu inspektora.

    1. Dla składnika Przekształć rect :

      Nazwa Przekształcanie — położenie Width Height
      MikrofonStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      DictationText X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Dla składnika Text (Script) :

      Nazwa Tekst Rozmiar czcionki
      MikrofonStatusText ?? 20
      AzureResponseText ?? 20
      DictationText ?? 20
      TranslationResultText ?? 20
  9. Następnie wybierz opcję wyrównania w środku dla każdego składnika tekstowego:

    wyrównaj tekst.

  10. Aby upewnić się, że podrzędne obiekty tekstowe interfejsu użytkownika są łatwo czytelne, zmień ich kolor. Zrób to, klikając pasek (obecnie "Czarny") obok pozycji Kolor.

    Wprowadź odpowiednie wartości dla danych wyjściowych tekstu interfejsu użytkownika.

  11. Następnie w nowym, małym oknie Kolor zmień kolor szesnastkowy na : 0032EAFF

    Zaktualizuj kolor na niebieski.

  12. Poniżej przedstawiono sposób wyglądu interfejsu użytkownika .

    1. W panelu Hierarchia:

      Mają hierarchię w podanej strukturze.

    2. W scenie i widokach gier:

      Widok sceny i gry w tej samej strukturze.

Rozdział 5 — tworzenie klasy Results

Pierwszym skryptem, który należy utworzyć, jest klasa Results , która jest odpowiedzialna za zapewnienie sposobu, aby zobaczyć wyniki tłumaczenia. Magazyny klas i wyświetlają następujące elementy:

  • Wynik odpowiedzi z platformy Azure.
  • Stan mikrofonu.
  • Wynik dyktowania (głos do tekstu).
  • Wynik tłumaczenia.

Aby utworzyć tę klasę:

  1. Kliknij prawym przyciskiem myszy panel projektu, a następnie pozycję Utwórz > folder. Nadaj nazwę skryptom folderu.

    Utwórz folder skryptów.

    Otwórz folder scripts.

  2. Po utworzeniu folderu Scripts kliknij go dwukrotnie, aby go otworzyć. Następnie w tym folderze kliknij prawym przyciskiem myszy i wybierz polecenie Utwórz > , a następnie pozycję Skrypt języka C#. Nadaj skryptowi nazwę Wyniki.

    Utwórz pierwszy skrypt.

  3. Kliknij dwukrotnie nowy skrypt Wyniki , aby otworzyć go za pomocą programu Visual Studio.

  4. Wstaw następujące przestrzenie nazw:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Wewnątrz klasy wstaw następujące zmienne:

        public static Results instance;
    
        [HideInInspector] 
        public string azureResponseCode;
    
        [HideInInspector] 
        public string translationResult;
    
        [HideInInspector] 
        public string dictationResult;
    
        [HideInInspector] 
        public string micStatus;
    
        public Text microphoneStatusText;
    
        public Text azureResponseText;
    
        public Text dictationText;
    
        public Text translationResultText;
    
  6. Następnie dodaj metodę Awake(), która zostanie wywołana podczas inicjowania klasy.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Na koniec dodaj metody, które są odpowiedzialne za wyprowadzanie różnych informacji o wynikach do interfejsu użytkownika.

        /// <summary>
        /// Stores the Azure response value in the static instance of Result class.
        /// </summary>
        public void SetAzureResponse(string result)
        {
            azureResponseCode = result;
            azureResponseText.text = azureResponseCode;
        }
    
        /// <summary>
        /// Stores the translated result from dictation in the static instance of Result class. 
        /// </summary>
        public void SetDictationResult(string result)
        {
            dictationResult = result;
            dictationText.text = dictationResult;
        }
    
        /// <summary>
        /// Stores the translated result from Azure Service in the static instance of Result class. 
        /// </summary>
        public void SetTranslatedResult(string result)
        {
            translationResult = result;
            translationResultText.text = translationResult;
        }
    
        /// <summary>
        /// Stores the status of the Microphone in the static instance of Result class. 
        /// </summary>
        public void SetMicrophoneStatus(string result)
        {
            micStatus = result;
            microphoneStatusText.text = micStatus;
        }
    
  8. Pamiętaj, aby zapisać zmiany w programie Visual Studio przed powrotem do aparatu Unity.

Rozdział 6 — tworzenie klasy MicrophoneManager

Druga klasa, którą utworzysz, to MikrofonManager.

Ta klasa jest odpowiedzialna za:

  • Wykrywanie urządzenia rejestrującego dołączonego do zestawu słuchawkowego lub komputera (niezależnie od tego, co jest domyślne).
  • Przechwyć dźwięk (głos) i użyj dyktowania, aby zapisać go jako ciąg.
  • Po wstrzymaniu głosu prześlij dyktowanie do klasy Translator.
  • Hostuj metodę, która w razie potrzeby może zatrzymać przechwytywanie głosu.

Aby utworzyć tę klasę:

  1. Kliknij dwukrotnie folder Scripts (Skrypty ), aby go otworzyć.

  2. Kliknij prawym przyciskiem myszy wewnątrz folderu Scripts (Skrypty ), kliknij pozycję Create C# Script (Utwórz > skrypt języka C#). Nadaj skryptowi nazwę MicrophoneManager.

  3. Kliknij dwukrotnie nowy skrypt, aby otworzyć go za pomocą programu Visual Studio.

  4. Zaktualizuj przestrzenie nazw tak samo jak w poniższej górnej części klasy MicrophoneManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Następnie dodaj następujące zmienne w klasie MicrophoneManager :

        // Help to access instance of this object 
        public static MicrophoneManager instance; 
    
        // AudioSource component, provides access to mic 
        private AudioSource audioSource; 
    
        // Flag indicating mic detection 
        private bool microphoneDetected; 
    
        // Component converting speech to text 
        private DictationRecognizer dictationRecognizer; 
    
  6. Należy teraz dodać kod dla metod Awake() i Start( ). Będą one wywoływane, gdy klasa inicjuje:

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this; 
        } 
    
        void Start() 
        { 
            //Use Unity Microphone class to detect devices and setup AudioSource 
            if(Microphone.devices.Length > 0) 
            { 
                Results.instance.SetMicrophoneStatus("Initialising..."); 
                audioSource = GetComponent<AudioSource>(); 
                microphoneDetected = true; 
            } 
            else 
            { 
                Results.instance.SetMicrophoneStatus("No Microphone detected"); 
            } 
        } 
    
  7. Możesz usunąć metodę Update(), ponieważ ta klasa nie będzie jej używać.

  8. Teraz potrzebujesz metod używanych przez aplikację do uruchamiania i zatrzymywania przechwytywania głosu oraz przekazywania jej do klasy Translator , którą utworzysz wkrótce. Skopiuj poniższy kod i wklej go pod metodą Start().

        /// <summary> 
        /// Start microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StartCapturingAudio() 
        { 
            if(microphoneDetected) 
            {               
                // Start dictation 
                dictationRecognizer = new DictationRecognizer(); 
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult; 
                dictationRecognizer.Start(); 
    
                // Update UI with mic status 
                Results.instance.SetMicrophoneStatus("Capturing..."); 
            }      
        } 
    
        /// <summary> 
        /// Stop microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StopCapturingAudio() 
        { 
            Results.instance.SetMicrophoneStatus("Mic sleeping"); 
            Microphone.End(null); 
            dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult; 
            dictationRecognizer.Dispose(); 
        }
    

    Porada

    Chociaż ta aplikacja nie będzie jej używać, metoda StopCapturingAudio() została również udostępniona tutaj, jeśli chcesz zaimplementować możliwość zatrzymywania przechwytywania dźwięku w aplikacji.

  9. Teraz musisz dodać program obsługi Dyktowania, który zostanie wywołany po zatrzymaniu głosu. Ta metoda przekaże następnie podyktowany tekst do klasy Translator .

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// Debugging message is delivered to the Results class.
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Results.instance.SetDictationResult(text);
    
            // Start the coroutine that process the dictation through Azure 
            StartCoroutine(Translator.instance.TranslateWithUnityNetworking(text));   
        }
    
  10. Pamiętaj, aby zapisać zmiany w programie Visual Studio przed powrotem do aparatu Unity.

Ostrzeżenie

W tym momencie zauważysz błąd wyświetlany w panelu konsoli edytora aparatu Unity ("Nazwa "Translator" nie istnieje..."). Jest to spowodowane tym, że kod odwołuje się do klasy Translator , którą utworzysz w następnym rozdziale.

Rozdział 7 — nawiązywanie połączenia z platformą Azure i usługą translatora

Ostatnim skryptem, który należy utworzyć, jest klasa translatora .

Ta klasa jest odpowiedzialna za:

  • Uwierzytelnianie aplikacji za pomocą platformy Azure w zamian za token uwierzytelniania.
  • Użyj tokenu uwierzytelniania , aby przesłać tekst (odebrany z klasy MikrofonManager ), który ma zostać przetłumaczony.
  • Odbierz przetłumaczony wynik i przekaż go do klasy Wyników , która ma zostać zwizualizowana w interfejsie użytkownika.

Aby utworzyć tę klasę:

  1. Przejdź do utworzonego wcześniej folderu Skrypty .

  2. Kliknij prawym przyciskiem myszy panel projektuUtwórz > skrypt języka C#. Wywołaj usługę Translator skryptu.

  3. Kliknij dwukrotnie nowy skrypt translatora , aby otworzyć go za pomocą programu Visual Studio.

  4. Dodaj następujące przestrzenie nazw na początku pliku:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Następnie dodaj następujące zmienne w klasie Translator :

        public static Translator instance; 
        private string translationTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; 
        private string translationTextEndpoint = "https://api.microsofttranslator.com/v2/http.svc/Translate?"; 
        private const string ocpApimSubscriptionKeyHeader = "Ocp-Apim-Subscription-Key"; 
    
        //Substitute the value of authorizationKey with your own Key 
        private const string authorizationKey = "-InsertYourAuthKeyHere-"; 
        private string authorizationToken; 
    
        // languages set below are: 
        // English 
        // French 
        // Italian 
        // Japanese 
        // Korean 
        public enum Languages { en, fr, it, ja, ko }; 
        public Languages from = Languages.en; 
        public Languages to = Languages.it; 
    

    Uwaga

    • Języki wstawione do wyliczenia języków to tylko przykłady. Możesz dodać więcej, jeśli chcesz; interfejs API obsługuje ponad 60 języków (w tym Klingon)!
    • Istnieje bardziej interaktywna strona obejmująca dostępne języki, choć należy pamiętać, że strona działa tylko wtedy, gdy język witryny jest ustawiony na "" (a witryna firmy Microsoft prawdopodobnie przekierowuje do języka natywnego). Język witryny można zmienić w dolnej części strony lub zmieniając adres URL.
    • Wartość authorizationKey w powyższym fragmencie kodu musi być kluczem otrzymany po zasubskrybowaniu interfejsu API tłumaczenia tekstu w usłudze Azure Translator. Opisano to w rozdziale 1.
  6. Należy teraz dodać kod dla metod Awake() i Start( ).

  7. W takim przypadku kod wykona wywołanie platformy Azure przy użyciu klucza autoryzacji, aby uzyskać token.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton  
            instance = this; 
        } 
    
        // Use this for initialization  
        void Start() 
        { 
            // When the application starts, request an auth token 
            StartCoroutine("GetTokenCoroutine", authorizationKey); 
        }
    

    Uwaga

    Token wygaśnie po 10 minutach. W zależności od scenariusza aplikacji może być konieczne wielokrotne wywołanie tej samej coroutine.

  8. Coroutine do uzyskania tokenu jest następujący:

        /// <summary> 
        /// Request a Token from Azure Translation Service by providing the access key. 
        /// Debugging result is delivered to the Results class. 
        /// </summary> 
        private IEnumerator GetTokenCoroutine(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                throw new InvalidOperationException("Authorization key not set.");
            }
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Post(translationTokenEndpoint, string.Empty))
            {
                unityWebRequest.SetRequestHeader("Ocp-Apim-Subscription-Key", key);
                yield return unityWebRequest.SendWebRequest();
    
                long responseCode = unityWebRequest.responseCode;
    
                // Update the UI with the response code 
                Results.instance.SetAzureResponse(responseCode.ToString());
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Results.instance.azureResponseText.text = unityWebRequest.error;
                    yield return null;
                }
                else
                {
                    authorizationToken = unityWebRequest.downloadHandler.text;
                }
            }
    
            // After receiving the token, begin capturing Audio with the MicrophoneManager Class 
            MicrophoneManager.instance.StartCapturingAudio();
        }
    

    Ostrzeżenie

    Jeśli edytujesz nazwę metody IEnumerator GetTokenCoroutine(), musisz zaktualizować wartości ciągów wywołań StartCoroutine i StopCoroutine w powyższym kodzie. Zgodnie z dokumentacją aparatu Unity, aby zatrzymać określoną metodę Coroutine, musisz użyć metody wartości ciągu.

  9. Następnie dodaj coroutine (z metodą strumienia "support" bezpośrednio poniżej niej), aby uzyskać tłumaczenie tekstu odebranego przez klasę MicrophoneManager . Ten kod tworzy ciąg zapytania do wysyłania do interfejsu API tłumaczenia tekstu w usłudze Azure Translator, a następnie używa wewnętrznej klasy Unity UnityWebRequest do wywołania "Get" do punktu końcowego za pomocą ciągu zapytania. Wynik jest następnie używany do ustawiania tłumaczenia w obiekcie Results. Poniższy kod przedstawia implementację:

        /// <summary> 
        /// Request a translation from Azure Translation Service by providing a string.  
        /// Debugging result is delivered to the Results class. 
        /// </summary> 
        public IEnumerator TranslateWithUnityNetworking(string text)
        {
            // This query string will contain the parameters for the translation 
            string queryString = string.Concat("text=", Uri.EscapeDataString(text), "&from=", from, "&to=", to);
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(translationTextEndpoint + queryString))
            {
                unityWebRequest.SetRequestHeader("Authorization", "Bearer " + authorizationToken);
                unityWebRequest.SetRequestHeader("Accept", "application/xml");
                yield return unityWebRequest.SendWebRequest();
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Debug.Log(unityWebRequest.error);
                    yield return null;
                }
    
                // Parse out the response text from the returned Xml
                string result = XElement.Parse(unityWebRequest.downloadHandler.text).Value;
                Results.instance.SetTranslatedResult(result);
            }
        }
    
  10. Pamiętaj, aby zapisać zmiany w programie Visual Studio przed powrotem do aparatu Unity.

Rozdział 8 — Konfigurowanie sceny aparatu Unity

  1. W edytorze aparatu Unity kliknij i przeciągnij klasę Resultsz folderu Scripts do obiektu Main Camera w panelu hierarchii.

  2. Kliknij aparat główny i spójrz na Panel inspektora. Zauważysz, że w nowo dodanym składniku Skrypt istnieją cztery pola z pustymi wartościami. Są to odwołania wyjściowe do właściwości w kodzie.

  3. Przeciągnij odpowiednie obiekty tekstowe z panelu hierarchii do tych czterech miejsc, jak pokazano na poniższej ilustracji.

    Zaktualizuj odwołania docelowe przy użyciu określonych wartości.

  4. Następnie kliknij i przeciągnij klasę Translator z folderu Scripts do obiektu Main Camera w panelu hierarchii.

  5. Następnie kliknij i przeciągnij klasę MicrophoneManager z folderu Scripts do obiektu Main Camera w panelu hierarchii.

  6. Na koniec kliknij główny aparat i spójrz na Panel inspektora. Zauważysz, że w przeciągniętym skrycie istnieją dwa pola rozwijane, które umożliwią ustawienie języków.

    Upewnij się, że zamierzone języki tłumaczenia są wprowadzane.

Rozdział 9 — Testowanie w rzeczywistości mieszanej

W tym momencie należy sprawdzić, czy scena została prawidłowo zaimplementowana.

Upewnij się, że:

  • Wszystkie ustawienia wymienione w rozdziale 1 są poprawnie ustawione.
  • Skrypty Wyniki, Translator i MikrofonManager są dołączone do obiektu Main Camera.
  • Klucz usługi interfejsu API tłumaczenia tekstu w usłudze Azure Translator został umieszczony w zmiennej authorizationKey w skrycie translatora.
  • Wszystkie pola w głównym panelu inspektora kamery są prawidłowo przypisywane.
  • Mikrofon działa podczas uruchamiania sceny (jeśli nie, sprawdź, czy dołączony mikrofon jest urządzeniem domyślnym i czy został poprawnie skonfigurowany w systemie Windows).

Zestaw słuchawkowy immersywny można przetestować, naciskając przycisk Odtwórz w Edytorze aparatu Unity. Aplikacja powinna działać za pośrednictwem dołączonego immersyjnego zestawu słuchawkowego.

Ostrzeżenie

Jeśli w konsoli aparatu Unity zostanie wyświetlony błąd dotyczący zmiany domyślnego urządzenia audio, scena może nie działać zgodnie z oczekiwaniami. Wynika to ze sposobu, w jaki portal rzeczywistości mieszanej zajmuje się wbudowanymi mikrofonami dla zestawów słuchawkowych, które je mają. Jeśli ten błąd zostanie wyświetlony, po prostu zatrzymaj scenę i uruchom ją ponownie, a wszystko powinno działać zgodnie z oczekiwaniami.

Rozdział 10 — tworzenie rozwiązania platformy UWP i ładowanie bezpośrednie na komputerze lokalnym

Wszystko potrzebne dla sekcji Aparatu Unity tego projektu zostało ukończone, więc nadszedł czas, aby skompilować go z aparatu Unity.

  1. Przejdź do obszaru Ustawienia kompilacji: Ustawienia kompilacji pliku > ...

  2. W oknie Ustawienia kompilacji kliknij pozycję Skompiluj.

    Skompiluj scenę aparatu Unity.

  3. Jeśli jeszcze tego nie zrobiono, zaznacz pozycję Projekty języka C# aparatu Unity.

  4. Kliknij pozycję Kompiluj. Aparat Unity uruchomi okno Eksplorator plików, w którym należy utworzyć, a następnie wybierz folder do skompilowania aplikacji. Utwórz ten folder teraz i nadaj mu nazwę Aplikacja. Następnie po wybraniu folderu Aplikacja naciśnij pozycję Wybierz folder.

  5. Aparat Unity rozpocznie kompilowanie projektu w folderze Aplikacja .

  6. Po zakończeniu kompilowania środowiska Unity (może to trochę potrwać), zostanie otwarte okno Eksplorator plików w lokalizacji kompilacji (sprawdź pasek zadań, ponieważ może nie zawsze pojawiać się nad oknami, ale powiadomi o dodaniu nowego okna).

Rozdział 11 — Wdrażanie aplikacji

Aby wdrożyć aplikację:

  1. Przejdź do nowej kompilacji aparatu Unity (folderu Aplikacja ) i otwórz plik rozwiązania za pomocą programu Visual Studio.

  2. W obszarze Konfiguracja rozwiązania wybierz pozycję Debuguj.

  3. W polu Platforma rozwiązania wybierz pozycję x86, Komputer lokalny.

    W przypadku Microsoft HoloLens można łatwiej ustawić tę opcję na Maszynę zdalną, aby nie być na tym komputerze. Należy jednak również wykonać następujące czynności:

    • Poznaj adres IP urządzenia HoloLens, który można znaleźć w obszarze Ustawienia > & Internet > Wi-Fi > Opcje zaawansowane; adres IPv4 jest adresem, którego należy użyć.
    • Upewnij się, że tryb dewelopera jest włączony; znajduje się w temacie Ustawienia > Aktualizuj & Zabezpieczenia > dla deweloperów.

    Wdróż rozwiązanie z poziomu programu Visual Studio.

  4. Przejdź do menu Kompilacja i kliknij pozycję Wdróż rozwiązanie , aby załadować aplikację bezpośrednio na komputer.

  5. Aplikacja powinna być teraz wyświetlana na liście zainstalowanych aplikacji gotowych do uruchomienia.

  6. Po uruchomieniu aplikacja wyświetli monit o autoryzowanie dostępu do mikrofonu. Pamiętaj, aby kliknąć przycisk TAK .

  7. Teraz możesz rozpocząć tłumaczenie!

Zakończona aplikacja interfejsu API tłumaczenia tekstu

Gratulacje, utworzono aplikację rzeczywistości mieszanej, która korzysta z interfejsu API tłumaczenia tekstu platformy Azure do konwertowania mowy na przetłumaczony tekst.

Produkt końcowy.

Ćwiczenia dodatkowe

Ćwiczenie 1

Czy możesz dodać do aplikacji funkcję zamiany tekstu na mowę, aby zwracany tekst był mówiony?

Ćwiczenie 2

Umożliwia użytkownikowi zmianę języków źródłowych i wyjściowych (od" i "do") w samej aplikacji, więc aplikacja nie musi być odbudowywana za każdym razem, gdy chcesz zmienić języki.