Udostępnij za pośrednictwem


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


Uwaga

Samouczki akademii rzeczywistości mieszanej zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji) i zestawach słuchawkowych immersyjnych rzeczywistości mieszanej. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków na 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 dla urządzenia 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ć urządzenia 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 korzystać z technologii neuronowego tłumaczenia maszynowego w celu 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 mówić 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. Zastosowanie tych pojęć do niestandardowej aplikacji, którą można utworzyć, będzie możliwe.

Obsługa urządzeń

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

Uwaga

Chociaż ten kurs koncentruje się głównie na zestawach nagłownych immersywnych windows Mixed Reality (VR), możesz również zastosować to, czego nauczysz się w tym kursie do urządzenia Microsoft HoloLens. Zgodnie z kursem zobaczysz notatki dotyczące wszelkich zmian, które mogą być konieczne do zastosowania w celu obsługi urządzenia 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 wymieniono w artykule dotyczącym instalacji narzędzi , choć nie należy zakładać, że informacje zawarte 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 podczas tworzenia 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 nagrywanie z domyślnego urządzenia mikrofonu podłączonego do komputera. Upewnij się, że domyślne urządzenie mikrofonu jest ustawione na urządzenie, które ma być używane do przechwytywania głosu.

  • Aby umożliwić komputerowi włączanie dyktowania, przejdź do pozycji Ustawienia > Mowa prywatności > , pisanie odręczne i wpisywanie i wybieranie przycisku Włącz usługi mowy i wpisywanie sugestii.

  • Jeśli używasz mikrofonu i słuchawek podłączonych do zestawu słuchawkowego (lub wbudowanego), upewnij się, że opcja "Kiedy nosim mój zestaw słuchawkowy, przełącznik do mikrofonu nagłownego" jest włączona w obszarze Ustawienia > Dźwięk i mowa rzeczywistości > mieszanej.

    Ustawienia rzeczywistości mieszanej

    Ustawienie mikrofonu

Ostrzeżenie

Pamiętaj, ż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 zostały wykonane powyższe kroki, a następnie zamknij i ponownie otwórz 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 Portalu Azure.

    Uwaga

    Jeśli nie masz jeszcze konta platformy Azure, musisz je utworzyć. Jeśli obserwujesz ten samouczek w sytuacji w klasie lub laboratorium, poproś instruktora lub jednego z opiekunów o pomoc przy konfigurowaniu 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 pozycję 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 interfejsu 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ą warstwę cenową, jeśli po raz pierwszy utworzysz usługę tłumaczenia tekstu w usłudze Translator, powinna być dostępna bezpłatna warstwa (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. tych laboratoriów) w ramach wspólnej grupy zasobów.

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

    5. Określ lokalizację dla grupy zasobów (jeśli tworzysz nową grupę zasobów). Lokalizacja najlepiej znajdować się w regionie, w którym aplikacja będzie uruchamiana. 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 pozycję Utwórz.

      Wybierz przycisk Utwórz.

  5. Po kliknięciu pozycji Utwórz trzeba będzie poczekać na utworzenie usługi. 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 interfejsu 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 wyświetlenie kluczy usługi.

  11. Wykonaj kopię jednego z wyświetlonych kluczy, ponieważ będzie to potrzebne w dalszej części projektu.

Rozdział 2 — Konfigurowanie projektu aparatu Unity

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

Uwaga

W tym kursie nie będą potrzebne kontrolery ruchu. Jeśli potrzebujesz obsługi konfigurowania immersyjnego zestawu słuchawkowego, wykonaj następujące kroki.

Poniżej przedstawiono typową konfigurację do opracowywania za pomocą 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 jest ustawiony na 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ć, czy domyślny edytor skryptów jest 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 urządzenia 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. Dla wersji programu Visual Studio jest ustawiona wartość Najnowsza zainstalowana

    5. Kompilowanie i uruchamianie jest ustawione na komputer lokalny

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

      1. W tym celu wybierz pozycję Dodaj otwarte sceny. Zostanie wyświetlone okno zapisywania.

        Kliknij przycisk Dodaj otwarte sceny

      2. Utwórz nowy folder dla tego i dowolnej przyszłości 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 ustawienia publikowania) zaznacz pole Virtual Reality Supported (Obsługiwane w rzeczywistości wirtualnej), upewnij się, że dodano zestaw WINDOWS Mixed Reality SDK .

      Zaktualizuj ustawienia języka X R.

  8. Po powrocie do ustawień kompilacji projekty 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 kamery głównej

Ważne

Jeśli chcesz pominąć składnik Konfiguracji aparatu Unity 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 Aparat główny, ten obiekt reprezentuje punkt widzenia "head" po "wewnątrz" aplikacji.

  2. Przed tobą na pulpicie nawigacyjnym aparatu Unity wybierz obiekt Main Camera GameObject. Zauważysz, że Panel inspektora (zazwyczaj znajduje się po prawej stronie pulpitu nawigacyjnego) będzie wyświetlać różne składniki tego obiektu GameObject, z przekształceniem u góry, a następnie aparatem i innymi składnikami. Należy zresetować przekształcenie kamery głównej, aby było poprawnie ustawione.

  3. W tym celu wybierz ikonę Koła zębatego obok składnika Przekształć aparat i 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 0, 0, 0

    3. A skala jest ustawiona na 1, 1, 1

      Przekształcanie informacji o aparacie

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

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

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

    Dodaj składnik źródła dźwięku.

    Uwaga

    W przypadku urządzenia Microsoft HoloLens należy również zmienić następujące elementy, które są częścią składnika Aparatu fotograficznego w aparacie głównym:

    • Wyczyść flagi: kolor jednolity.
    • Tło ", Alfa 0" — kolor szesnastkowy: #00000000.

Rozdział 4 — Konfigurowanie kanwy debugowania

Aby wyświetlić 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 wyświetlić 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 "Kanwa") zmień tryb renderowania na Obszar świata.

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

    1. POS - X 0 Y 0 Z 40

    2. Szerokość — 500

    3. Wysokość — 300

    4. Skalowanie - 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. Ten panel będzie zawierać 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 łącznie czterech obiektów tekstowych interfejsu użytkownika (wskazówka: jeśli zaznaczono pierwszy obiekt "Text", możesz po prostu nacisnąć Ctrl + "D", aby go zduplikować, dopóki nie masz łącznie czterech).

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

    1. Dla składnika Przekształcanie rect:

      Nazwisko Przekształcanie — położenie Szerokość Wysokość
      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):

      Nazwisko 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 etykiet interfejsu użytkownika.

    3. Ponadto ustaw styl czcionki na pogrubiony. Ułatwi to odczytanie tekstu.

      Czcionka pogrubiona.

  7. Dla każdego obiektu tekstowego interfejsu użytkownika utworzonego w rozdziale 5 utwórz nowy podrzędny obiekt 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. MicrophoneStatusLabel), 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 je i użyj poniższych tabel, aby ustawić parametry w Panelu inspektora.

    1. Dla składnika Przekształcanie rect:

      Nazwisko Przekształcanie — położenie Szerokość Wysokość
      MikrofonStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Tekst dyktowania X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Dla składnika Text (Script):

      Nazwisko Tekst Rozmiar czcionki
      MikrofonStatusText ?? 20
      AzureResponseText ?? 20
      Tekst dyktowania ?? 20
      TranslationResultText ?? 20
  9. Następnie wybierz opcję wyrównania "środek" 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. W tym celu kliknij pasek (obecnie "") 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 w widokach gier:

      Mają scenę i widoki gier 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 wyświetlenia wyników tłumaczenia. Klasa przechowuje i wyświetla następujące elementy:

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

Aby utworzyć tę klasę:

  1. Kliknij prawym przyciskiem myszy w panelu projektu, a następnie utwórz > folder. Nadaj folderowi nazwę Scripts( Skrypty).

    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ę Results (Wyniki skryptu).

    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. Przed powrotem do aparatu Unity pamiętaj o zapisaniu zmian w programie Visual Studio.

Rozdział 6 — Tworzenie klasy MicrophoneManager

Drugą klasą , którą utworzysz, jest MikrofonManager.

Ta klasa jest odpowiedzialna za:

  • Wykrywanie urządzenia rejestrującego dołączonego do zestawu nagłownego lub maszyny (w zależności od tego, która wartość jest domyślna).
  • 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 Skrypty, aby go otworzyć.

  2. Kliknij prawym przyciskiem myszy wewnątrz folderu Scripts (Skrypty ), kliknij polecenie 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 przypadku następujących elementów w 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. Teraz należy 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 potrzebne są metody używane przez aplikację do uruchamiania i zatrzymywania przechwytywania głosu oraz przekazywania ich do klasy Translator , które zostaną utworzone wkrótce. Skopiuj poniższy kod i wklej go poniżej metody 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(); 
        }
    

    Napiwek

    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 należy dodać program obsługi Dyktowania, który będzie wywoływany 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. Przed powrotem do aparatu Unity pamiętaj o zapisaniu zmian w programie Visual Studio.

Ostrzeżenie

W tym momencie w panelu konsoli edytora aparatu Unity zostanie wyświetlony błąd ("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 Translator .

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 MicrophoneManager), który ma zostać przetłumaczony.
  • Odbierz przetłumaczony wynik i przekaż go do klasy Results , 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 w panelu projektu Utwórz > skrypt języka C#. Wywołaj usługę Translator skryptu.

  3. Kliknij dwukrotnie nowy skrypt usługi Translator , 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ć pamiętaj, że strona działa tylko wtedy, gdy język witryny jest ustawiony na "" (a witryna firmy Microsoft prawdopodobnie przekieruje 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 podczas subskrybowania interfejsu API tłumaczenia tekstu w usłudze Azure Translator. Zostało to omówione w rozdziale 1.
  6. Teraz należy 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 wykonanie tego samego wywołania 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 metodę strumienia "support" (z metodą strumienia "support" bezpośrednio poniżej), 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 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. Przed powrotem do aparatu Unity pamiętaj o zapisaniu zmian w programie Visual Studio.

Rozdział 8 — Konfigurowanie sceny aparatu Unity

  1. Wróć do Edytora aparatu Unity, kliknij i przeciągnij klasę Results z folderu Scripts do obiektu Main Camera w panelu hierarchii.

  2. Kliknij kamerę główną 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 kamerę główną i przyjrzyj się Panelowi inspektora. Zauważysz, że w przeciągniętym skrycie znajdują się dwa pola rozwijane, które umożliwią ustawienie języków.

    Upewnij się, że zamierzone języki tłumaczenia są danymi wejściowymi.

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 Results, Translator i MicrophoneManager są dołączane do obiektu Main Camera.
  • Klucz usługi interfejsu API tłumaczenia tekstu w usłudze Azure Translator został umieszczony w zmiennej authorizationKey w skryfcie translatora.
  • Wszystkie pola w panelu Główny inspektor 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 widzisz ten błąd, po prostu zatrzymaj scenę i uruchom ją ponownie, a wszystko powinno działać zgodnie z oczekiwaniami.

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

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

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

  2. W oknie Ustawienia kompilacji kliknij pozycję Kompiluj.

    Skompiluj scenę aparatu Unity.

  3. Jeśli jeszcze tego nie zrobiono, zaznacz pole Unity C# Projects (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 teraz ten folder i nadaj mu nazwę Aplikacja. Następnie po wybraniu folderu App naciśnij pozycję Wybierz folder.

  5. Aparat Unity rozpocznie kompilowanie projektu w folderze App .

  6. Po zakończeniu kompilowania środowiska Unity (może to zająć trochę czasu), 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 App ) 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 urządzenia Microsoft HoloLens można łatwiej ustawić tę opcję na maszynę zdalną, aby nie być naciągniętym na komputer. 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 > Sieć i Internet > Wi-Fi > Advanced Options. Adres IPv4 jest adresem, którego należy użyć.
    • Upewnij się, że tryb dewelopera jest włączony; znajduje się w obszarze Ustawienia > Aktualizacja i 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 w celu 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, dzięki czemu aplikacja nie musi być ponownie skompilowana za każdym razem, gdy chcesz zmienić języki.