HoloLens (1. nesil) ve Azure 301: Dil çevirisi


Not

Karma Gerçeklik Akademi öğreticileri, HoloLens (1. nesil) ve Karma Gerçeklik Çevreleyici Mikrofonlu Bu nedenle, bu cihazlar için geliştirme konusunda rehberlik arayan geliştiriciler için bu öğreticileri yerinde bırakmanın önemli olduğunu hissetmeyiz. Bu öğreticiler, 2. sürüm için kullanılan en son araç kümeleri veya etkileşimler HoloLens güncelleştirilmez. Desteklenen cihazlar üzerinde çalışmaya devam etmek için bunlar korunur. Gelecekte 2. bir uygulama için geliştirmeyi gösteren yeni bir öğretici serisi HoloLens. Bu bildirim, gönderildikleri zaman bu öğreticilerin bir bağlantısıyla güncelleştirilir.


Bu kursta, Azure Bilişsel Hizmetler Metin API'si ile karma gerçeklik uygulamasına çeviri özellikleri Çeviri öğrenirsiniz.

Son ürün

Metin Çeviri API'si, neredeyse gerçek zamanlı olarak çalışan bir çeviri hizmetidir. Hizmet bulut tabanlıdır ve bir REST API çağrısı kullanarak, bir uygulama metni başka bir dile çevirmek için nöral makine çevirisi teknolojisini kullanabilir. Daha fazla bilgi için Azure Çeviri Metin API'si sayfasını ziyaret edin.

Bu kursu tamamlandıktan sonra, aşağıdaki işlemleri gerçekleştirecek bir karma gerçeklik uygulamasına sahip oluruz:

  1. Kullanıcı, çevreleyici (VR) başlığına (veya sanal sanal ağların yerleşik mikrofonuna) bağlı bir mikrofonla HoloLens.
  2. Uygulama dikteyi yakalar ve Azure Çeviri Metin API'sini gönderir.
  3. Çeviri sonucu Unity Sahnesinde basit bir kullanıcı arabirimi grubunda görüntülenir.

Bu kursta, Çeviri Service'den alınan sonuçları Unity tabanlı bir örnek uygulamaya nasıl alalın öğreteceğiz. Bu kavramları oluşturmakta olabileceğiniz özel bir uygulamaya uygulamak size göre olacaktır.

Cihaz desteği

Kurs HoloLens Çevreleyici başlığı
MR ve Azure 301: Dil çevirisi ✔️ ✔️

Not

Bu kurs öncelikle çevreleyici (VR) Windows Mixed Reality başlığına odaklansa da, bu kursta edinilenleri Microsoft HoloLens. Kursu takip ettiyken, bu adımları desteklemek için ihtiyacınız olan tüm değişikliklerle ilgili HoloLens. Bu HoloLens, ses yakalama sırasında bazı yankılar fark olabilir.

Önkoşullar

Not

Bu öğretici Unity ve C# ile ilgili temel deneyime sahip geliştiriciler için tasarlanmıştır. Ayrıca, bu belge içindeki önkoşulların ve yazılan yönergelerin, yazıldığı sırada test edilen ve doğrulananları (Mayıs 2018) temsil etmelerini de unutmayın. Araçları yükleme makalesinde listelenen en son yazılımları kullanabilirsiniz, ancak bu kursta yer alan bilgilerin aşağıda listelenenlerden daha yeni yazılımlarda bulunanlarla mükemmel bir şekilde eş olacağını varsaymanız gerekir.

Bu kurs için aşağıdaki donanım ve yazılımları öneririz:

Başlamadan önce

  • Bu projeyi oluşturma sorunlarıyla karşılaşmamak için, bu öğreticide bahsedilen projeyi kök veya köke yakın bir klasörde oluşturmanız önemle önerilir (uzun klasör yolları derleme zamanında soruna neden olabilir).

  • Bu öğreticide yer alan kod, bilgisayarınıza bağlı varsayılan mikrofon cihazından kaydetmenize olanak sağlar. Varsayılan mikrofon cihazınızın sesinizi yakalamak için kullanmayı planlayan cihaza ayarlanmış olduğundan emin olun.

  • Bilgisayarınızın dikteyi etkinleştirmesine izin vermek için Gizlilik > Ayarlar'e & gidin, yazma ve Konuşma hizmetlerini aç düğmesini seçin >

  • Başlığınıza bağlı (veya yerleşik) mikrofon ve mikrofonlu mikrofon kullanıyorsanız, Karma gerçeklik Ses ve Konuşma'da "Başlığımı takacak, mikrofonlu mikrofona geç" seçeneğinin Ayarlar emin > olun.

    Karma gerçeklik ayarları

    Mikrofon ayarı

Uyarı

Bu laboratuvar için çevreleyici bir mikrofonlu başlığı geliştiriyorsanız ses çıkış cihazı sorunlarıyla karşılayabilirsiniz. Bunun nedeni Unity'nin sonraki sürümlerinde (Unity 2018.2) düzeltilen Unity sorunudur. Bu sorun Unity'nin çalışma zamanında varsayılan ses çıkışını değiştirmesini önlemektedir. Sorunu gidermek için yukarıdaki adımları tamamlayanın ve bu sorun ortaya çıkarken Düzenleyiciyi kapatıp yeniden açın.

Bölüm 1 – Azure Portalı

Azure Çeviri API'sini kullanmak için, hizmetinizin bir örneğini uygulamanıza açık olacak şekilde yapılandırmanız gerekir.

  1. Azure Portal'da oturum açın.

    Not

    Henüz bir Azure hesabınız yoksa bir tane oluşturmanız gerekir. Bu öğreticiyi bir sınıf veya laboratuvar ortamında takip ediyorsanız, eğitmenden veya eğitmenden birinin yeni hesabı ayarlarken yardım istemesini sorun.

  2. Oturum açtıktan sonra sol üst köşedeki Yeni'ye tıklayın ve "metin Çeviri" araması yazın. Enter tarak seçin.

    Yeni Kaynak

    Not

    Yeni sözcüğü, daha yeni portallarda Kaynak oluşturile değiştirilmiş olabilir.

  3. Yeni sayfa, Metin Metin API'si Çeviri bir açıklama sağlar. Bu sayfanın sol alt kısmında Oluştur düğmesini seçerek bu Hizmetle bir ilişki oluşturun.

    Metin Çeviri API Hizmeti Oluşturma

  4. Oluştur'a tıkladıktan sonra:

    1. Bu Hizmet örneği için istediğiniz Adı girin.

    2. Uygun bir Abonelik seçin.

    3. İlk kez bir Çeviri MetinHizmeti oluşturuyorsanız, sizin için uygun Fiyatlandırma Katmanını seçin. Ücretsiz katmanın (F0 adlı) kullanılabilir olması gerekir.

    4. Bir Kaynak Grubu seçin veya yeni bir tane oluşturun. Kaynak grubu, Bir Azure varlık koleksiyonu için faturalamayı izleme, erişimi denetleme, sağlama ve yönetme için bir yol sağlar. Tek bir projeyle ilişkili tüm Azure Hizmetlerinin (örneğin, bu laboratuvarlar gibi) ortak bir kaynak grubu altında tutularak kullanılması önerilir.

      Azure Kaynak Grupları hakkında daha fazla bilgi için lütfen kaynak grubu makalesine bakın.

    5. Kaynak grubu için Konum belirleme (yeni bir Kaynak Grubu oluşturuyorsanız). Konum ideal olarak uygulamanın çalıştırılaca bölgede olur. Bazı Azure varlıkları yalnızca belirli bölgelerde kullanılabilir.

    6. Ayrıca, bu Hizmete uygulanan Hüküm ve Koşulları anlanızı da onaylamanız gerekir.

    7. Oluştur’u seçin.

      Oluştur düğmesini seçin.

  5. Oluştur'a tıkladıktansonra, Hizmetin oluşturulacak olması için beklemelisiniz, bu bir dakika kadar zaman alır.

  6. Hizmet örneği oluşturulduktan sonra portalda bir bildirim görüntülenir.

    Azure Hizmeti oluşturma bildirimi

  7. Yeni Hizmet örneğinizi keşfetmek için bildirime tıklayın.

    Kaynak açılan menüsüne gidin.

  8. Yeni Hizmet örneğinizi keşfetmek için bildirimde Kaynağa git düğmesine tıklayın. Yeni Metin Çeviri API'si Hizmeti örneğine gelirsiniz.

    Çeviri Metin Api'si Hizmeti sayfası

  9. Bu öğreticide, uygulamanın Hizmetinize çağrılar yapmaları gerekir ve bu çağrı hizmetinizin Abonelik Anahtarı kullanılarak yapılır.

  10. Çeviri Metin Hizmeti'nizin Hızlı başlangıç sayfasında, ilk adım olan Anahtarlarınızı al'a gidin ve Anahtarlar'a tıklayın .Hizmetler gezinti menüsünde bulunan ve anahtar simgesiyle birlikte mavi renkli Anahtarlar'a tıklayarak da bunu yapabilirsiniz. Bu, Hizmet Anahtarlarınızı ortaya çıkar.

  11. Görüntülenen anahtarlardan birinin bir kopyasını kopyalayın çünkü buna daha sonra projeniz içinde ihtiyacınız olacak.

Bölüm 2 – Unity projesini ayarlama

Karma Gerçeklik derinlikli kulaklığınızın kurulumunu yapın ve test edin.

Not

Bu kurs için hareket denetleyicilerine ihtiyacınız olmayacaktır. Modern bir kulaklık kurmayı desteklemek istiyorsanız lütfen aşağıdaki adımları izleyin.

Aşağıda, karma gerçeklik ile geliştirme için tipik bir kurulum verilmiştir ve bu, diğer projelere yönelik iyi bir şablondur:

  1. Unity 'yi açın ve Yeni' ye tıklayın.

    Yeni Unity projesi başlatın.

  2. şimdi bir Unity Project adı sağlamanız gerekir. MR_Translationekleyin. Proje türünün 3Bolarak ayarlandığından emin olun. Konumu sizin için uygun bir yere ayarlayın (unutmayın, kök dizinlerin yakınına daha iyi). Ardından proje oluştur' a tıklayın.

    Yeni Unity projesinin ayrıntılarını sağlayın.

  3. Unity açık olduğunda, varsayılan komut dosyası düzenleyicisininVisual Studioolarak ayarlanmış olması gerekir. Tercihleri Düzenle ' ye gidin ve sonra yeni penceresinden dış araçlar' a gidin. dış betik düzenleyicisiniVisual Studio 2017olarak değiştirin. Tercihler penceresini kapatın.

    Güncelleştirme betiği Düzenleyicisi tercihi.

  4. ardından, dosya derleme Ayarlar gidin ve platformu değiştir düğmesine tıklayarak platformu Evrensel Windows Platformu.

    Ayarlar pencere oluşturun, platformu UWP 'e geçirin.

  5. dosya derleme Ayarlar gidin ve şunları yaptığınızdan emin olun:

    1. Hedef cihazherhangi bir cihazaayarlanmış.

      Microsoft HoloLens için hedef cihazıHoloLensolarak ayarlayın.

    2. Yapı türüD3D olarak ayarlandı

    3. SDKen son yüklü olarak ayarlandı

    4. Visual Studio sürümüen son yüklü olarak ayarlandı

    5. Oluşturma ve çalıştırma , yerel makine olarak ayarlandı

    6. Sahneyi kaydedin ve yapıya ekleyin.

      1. Açık sahneler Ekleseçeneğini belirleyerek bunu yapın. Bir Kaydet penceresi görüntülenir.

        Açık sahneler Ekle düğmesine tıklayın

      2. Bu, yeni klasör oluşturmak için yeni bir klasör oluşturun ve gelecekte yeni bir klasör seçin.

        Yeni betikler klasörü oluştur

      3. Yeni oluşturulan sahneler klasörünüzü açın ve ardından dosya adı: metin alanına MR_TranslationSceneyazın ve ardından Kaydet' e basın.

        Yeni sahneye bir ad verin.

        , Unity Project ilişkili olmaları gerektiği için Unity sahneleri varlıklar klasörü içine kaydetmeniz gerekir. Sahneler klasörünü oluşturma (ve diğer benzer klasörler), Unity projesini yapılandırmak için tipik bir yoldur.

    7. yapı Ayarlariçindeki kalan ayarlar şimdilik varsayılan olarak bırakılmalıdır.

  6. derleme Ayarlar penceresinde, Player Ayarlar düğmesine tıklayın, bu işlem ilgili paneli ınspector 'ın bulunduğu alanda açar.

    Oynatıcı ayarları 'nı açın.

  7. Bu panelde, bazı ayarların doğrulanması gerekir:

    1. diğer Ayarlar sekmesinde:

      1. Betik çalışma zamanı sürümükararlı olmalıdır (.NET 3,5 eşdeğeri).

      2. Komut dosyası arka ucu.net olmalıdır

      3. API Uyumluluk düzeyi.NET 4,6 olmalıdır

        Diğer ayarları güncelleştirin.

    2. yayımlama Ayarlar sekmesi içinde, yetenekleraltında şunları denetleyin:

      1. InternetClient

      2. Mikrofon

        Yayımlama ayarları güncelleştiriliyor.

    3. panelin daha aşağısında, xr Ayarlar (aşağıda yayımla Ayarlarbulunur), sanal gerçeklik desteklenir, Windows Mixed Reality SDK 'nın eklendiğinden emin olun.

      X R Ayarlar güncelleştirin.

  8. derleme Ayarlaryeniden, Unity C# projeleri artık gri değildir; bunun yanındaki onay kutusunu işaretleyin.

  9. derleme Ayarlar penceresini kapatın.

  10. sahninizi ve Project kaydedin (dosya sahneyi kaydet/dosya > projeyi kaydet).

Bölüm 3 – ana kamera kurulumu

Önemli

Bu kursun Unity kümesi bileşenini atlamak ve koda doğrudan kod ile devam etmek istiyorsanız, bu. unitypackage' ı indirebilir, projenize özel bir paketolarak içeri aktarın ve ardından Bölüm 5' ten devam edin. Yine de bir Unity Project oluşturmanız gerekir.

  1. Hiyerarşi panelinde, ana kameraadlı bir nesne bulacaksınız. bu nesne, uygulamanızın "içindeyken" bir kez "baş" görünüm noktasını temsil eder.

  2. Sizin için Unity panosu sayesinde ana kamera Oyunnesnesi' ni seçin. Inspector panelinin (genellikle sağ tarafta, pano içinde bulunur), bu oyun nesnesinin, en üstte dönüştürme , ardından Kamerave diğer bazı bileşenler gibi çeşitli bileşenlerini gösterdiğine fark edersiniz. Ana kameranın dönüşümünü sıfırlamanız gerekir, bu nedenle doğru konumlandırıldı.

  3. Bunu yapmak için kameranın dönüştürme bileşeninin yanındaki dişli simgesini seçin ve Sıfırlaseçeneğini belirleyin.

    Ana kamera dönüşümünü sıfırlayın.

  4. Dönüştürme bileşeni daha sonra şöyle görünmelidir:

    1. Konum0, 0, 0 olarak ayarlandı

    2. Döndürme0, 0, 0 olarak ayarlandı

    3. Ve Ölçek1, 1, 1 olarak ayarlandı

      Kamera için dönüşüm bilgileri

  5. Ardından, ana kamera nesnesi seçiliyken, Inspector panelininen altında bulunan bileşen ekleme düğmesine bakın.

  6. Aşağıda gösterildiği gibi, bu düğmeyi seçip (ses kaynağını arama alanına yazarak veya bölümlerle gezinerek) ses kaynağı adı verilen bileşen için arama yapın.

  7. Ana kamerayaaşağıda gösterildiği gibi bir ses kaynağı bileşeni eklenecektir.

    Bir ses kaynağı bileşeni ekleyin.

    Not

    Microsoft HoloLens için, ana kameranızdakikamera bileşeninin bir parçası olan aşağıdakileri de değiştirmeniz gerekir:

    • Işaretleri temizle: Düz renk.
    • Arka plan ' Black, Alpha 0 ' – onaltılı renk: #00000000.

Bölüm 4 – hata ayıklama tuvali kurulumu

Çeviri giriş ve çıkışını göstermek için temel bir kullanıcı arabiriminin oluşturulması gerekir. Bu kurs için, verileri göstermek üzere çeşitli ' metin ' nesneleriyle birlikte bir tuval UI nesnesi oluşturacaksınız.

  1. Hiyerarşi panelininboş bir alanına sağ tıklayın, Kullanıcı arabirimi' nin altında bir tuvalekleyin.

    Yeni tuval Kullanıcı arabirimi nesnesi Ekle.

  2. Tuval nesnesi seçili olan Inspector panelinde (' tuval ' bileşeni içinde), Işleme modunudünya alanıolarak değiştirin.

  3. Sonra, Inspector panelinin Rect dönüşümündenaşağıdaki parametreleri değiştirin:

    1. POSX 0 Y 0 Z 40

    2. Genişlik -500

    3. Yükseklik -300

    4. ÖlçekX 0,13 Y 0,13 Z 0,13

      Tuval için Rect dönüşümünü güncelleştirin.

  4. Hiyerarşi panelinde, Kullanıcı arabirimi' nin altında tuvale sağ tıklayın ve bir panelekleyin. Bu panel , sahnede görüntülenecek metin için bir arka plan sağlar.

  5. Hiyerarşi panelindepaneli ve Kullanıcı arabirimi' nin altındaki panele sağ tıklayın ve bir metin nesnesiekleyin. Toplam olarak dört Kullanıcı arabirimi metin nesnesi oluşturana kadar aynı işlemi yineleyin (Ipucu: ilk ' metin ' nesneniz seçiliyse, çoğaltmak için yalnızca ' Ctrl ' + ve 'tuşlarına basmanız yeterlidir.

  6. Her metin nesnesiiçin, bunu seçin ve Inspector panelindeparametreleri ayarlamak için aşağıdaki tabloları kullanın.

    1. Rect Transform bileşeni için:

      Name Dönüştürme konumu Width Height
      MicrophoneStatusLabel 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. Metin (Betik) bileşeni için:

      Name Metin Yazı Tipi Boyutu
      MicrophoneStatusLabel Mikrofon Durumu: 20
      AzureResponseLabel Azure Web Yanıtı 20
      DictationLabel Az önce şunları söyledi: 20
      TranslationResultLabel Çeviri: 20

      UI etiketleri için karşılık gelen değerleri girebilirsiniz.

    3. Ayrıca Yazı Tipi Stilini Kalın hale de iletin. Bu, metnin daha kolay okunmalarını sağlar.

      Kalın Yazı Tipi.

  7. Bölüm 5'te oluşturulan her kullanıcı arabirimi metin nesnesi içinyeni bir alt kullanıcı arabirimi Metin nesnesi oluşturun. Bu çocuklar uygulamanın çıkışını görüntüler. Amaçlanan üst öğenize sağ tıklayarak alt nesneler oluşturun (ör. MikrofonDurumLabel) ve ardından Kullanıcı Arabirimi'ne ve ardından Metin'i seçin.

  8. Bu alt tabloların her biri için seçin ve Aşağıdaki tabloları kullanarak Denetçi Paneli'nin parametrelerini ayarlayın.

    1. Rect Transform bileşeni için:

      Name Dönüştürme - Konum Width Height
      MicrophoneStatusText 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. Metin (Betik) bileşeni için:

      Name Metin Yazı Tipi Boyutu
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      DictationText ?? 20
      TranslationResultText ?? 20
  9. Ardından, her metin bileşeni için 'merkez' hizalama seçeneğini belirleyin:

    metni hizala.

  10. Alt kullanıcı arabirimi Metin nesnelerinin kolayca okunabilir olduğundan emin olmak için renklerini değiştirebilirsiniz. Bunun için Color'ın yanındaki çıtaya (şu anda 'Siyah' olarak) tıklayın.

    UI metin çıkışları için karşılık gelen değerleri girin.

  11. Ardından, yeni, küçük Renk penceresinde,Hex Color'ı şu şekilde değiştirebilirsiniz: 0032EAFF

    Rengi maviye güncelleştirin.

  12. Kullanıcı arabiriminin nasıl olması gerektiği aşağıda verilmiştir.

    1. Hiyerarşi Panelinde:

      Sağlanan yapıda hiyerarşiye sahip olmalıdır.

    2. Sahne ve OyunGörünümlerde:

      Sahne ve oyun görünümlerinin aynı yapıda olması.

Bölüm 5 – Results sınıfını oluşturma

Oluşturmanız gereken ilk betik, çeviri sonuçlarını görmek için bir yol sağlamakla sorumlu olan Results sınıfıdır. Sınıf şunları depolar ve görüntüler:

  • Azure'dan gelen yanıt sonucu.
  • Mikrofon durumu.
  • Diktenin sonucu (metne ses).
  • Çevirinin sonucu.

Bu sınıfı oluşturmak için:

  1. Dosya Paneli'ne sağ Project veardından Klasör Oluştur'a tıklayın. Klasöre Betikler adını girin.

    Betikler klasörü oluşturun.

    scripts klasörünü açın.

  2. Betikler klasörü oluşturularak açmak için çift tıklayın. Ardından bu klasörün içinde sağ tıklayın ve Oluştur'u ve ardından C# Betiği'yi seçin. Betiği Sonuçlar olarak adlandır.

    İlk betiği oluşturun.

  3. Yeni Sonuçlar betiğine çift tıklar ve öğesini Visual Studio.

  4. Aşağıdaki ad alanlarını ekleyin:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Sınıfının içine aşağıdaki değişkenleri girin:

        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. Ardından sınıf başlatıcısı çağrılan Awake() yöntemini ekleyin.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Son olarak, çeşitli sonuç bilgilerini kullanıcı arabirimine çıkışından sorumlu olan yöntemleri ekleyin.

        /// <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. Unity'ye dönmeden önce değişikliklerinizi Visual Studio emin olun.

Bölüm 6 – MicrophoneManager sınıfını oluşturma

Oluşturacak ikinci sınıf MikrofonManager'dır.

Bu sınıf şunların sorumluluğundadır:

  • Başlığın veya makinenin bağlı olduğu kayıt cihazı (varsayılan değer hangisidir) algılanabilir.
  • Sesi (sesi) yakalama ve dikte ile dize olarak depolama.
  • Ses duraklatıldıktan sonra dikteyi Çeviri gönderin.
  • İsterseniz ses yakalamayı durduracak bir yöntem barındırabilirsiniz.

Bu sınıfı oluşturmak için:

  1. Betikler klasörüne çift tıklayın ve açın.

  2. Betikler klasörünün içine sağ tıklayın,C# Betiği Oluştur'a tıklayın. MikrofonManager betiğine adını girin.

  3. Yeni betiği çift tıklar ve yeni betikle Visual Studio.

  4. Ad alanlarını, MikrofonManager sınıfının en üstünde aşağıdakiyle aynı olacak şekilde güncelleştirin:

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Ardından, MikrofonManager sınıfının içine aşağıdaki değişkenleri ekleyin:

        // 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. Artık Awake() veStart() yöntemleri için kod ekleniyor. Bunlar, sınıf başlatılırken çağrılır:

        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. Update() yönteminisilebilirsiniz çünkü bu sınıf bunu kullanmaz.

  8. Şimdi Uygulamanın ses yakalamayı başlatmak ve durdurmak için kullandığı yöntemlere ihtiyacınız var ve bunu yakında Çeviri sınıfına geçirmeniz gerekiyor. Aşağıdaki kodu kopyalayın ve Start() yönteminin altına yapıştırın.

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

    İpucu

    Bu uygulama bunu kullanmayacak olsa da, uygulamanıza ses yakalamayı durdurma yeteneği uygulamak istemeniz gerekirken Burada StopCapturingAudio() yöntemi de sağlanmıştır.

  9. Şimdi ses durduğunda çağrılan bir Dikte İşleyicisi eklemeniz gerekir. Bu yöntem daha sonra dikte edilen metni Çeviri iletir.

        /// <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. Unity'ye geri dönmeden önce değişikliklerinizi Visual Studio emin olun.

Uyarı

Bu noktada Unity Düzenleyicisi Konsol Paneli'nde bir hata görüntülenir ("'Çeviri' adı yok..."). Bunun nedeni, kodun Çeviri bölümde oluşturacakları Çeviri sınıfına başvurarak oluşturmasıdır.

Bölüm 7 – Azure'a ve çevirmen hizmetine çağrı

Oluşturmanız gereken son betik, Çeviri sınıfıdır.

Bu sınıf şunların sorumluluğundadır:

  • Kimlik Doğrulama Belirteci karşılığında Azureile Uygulamanın Kimlik Doğrulaması.
  • Çevrilen metni (MikrofonManager Sınıfından alınan) göndermek için Kimlik Doğrulama Belirteci'nin kullanın.
  • Çevrilmiş sonucu alır ve kullanıcı arabiriminde görselleştirilen Sonuçlar Sınıfına iletir.

Bu Sınıfı oluşturmak için:

  1. Daha önce oluşturduğunuz Scripts klasörüne gidin.

  2. Panelde sağ tıklayın Project , C# Betiği Oluştur. betiği Çeviri.

  3. yeni dosya betiğine çift Çeviri ve ile Visual Studio.

  4. Aşağıdaki ad alanlarını dosyanın en üstüne ekleyin:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Ardından aşağıdaki değişkenleri Çeviri ekleyin:

        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; 
    

    Not

    • Dillerin numaralarına eklenen diller yalnızca örnektir. Isterseniz daha fazla ekleme yapmaktan rahat olursanız; API, 60'ın üzerinde dili destekler (The dahil)!
    • Kullanılabilir dilleri kapsayandaha etkileşimli bir sayfa vardır, ancak sayfanın yalnızca site dili '' olarak ayarlanmışsa (ve Microsoft sitesi büyük olasılıkla yerel dilinize yeniden yönlendirecekse) çalışıyor gibi göründüğüne dikkat edin. Sayfanın alt kısmından veya URL'yi değiştirerek site dilini değiştirebilirsiniz.
    • Yukarıdaki kod parçacığında yer alan authorizationKey değeri, Azure Çeviri Text API'sini abone olurken almış olmanız gerekir. Bu, Bölüm 1'de ele almaktadır.
  6. Artık Awake() veStart() yöntemleri için kod ekleniyor.

  7. Bu durumda kod, belirteç almak için yetkilendirme Anahtarını kullanarak Azure'a bir çağrı yapacaktır.

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

    Not

    Belirteci 10 dakika sonra süresi dolar. Uygulamanıza uygun senaryoya bağlı olarak, aynı zaman çizgisi çağrısını birden çok kez yapmak zorunda olabilir.

  8. Belirteci elde etmek için coroutine aşağıdaki gibidir:

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

    Uyarı

    IEnumerator metodu GetTokenCoroutine()adını düzenlersanız, yukarıdaki kodda StartCoroutine ve StopCoroutine çağrı dizesi değerlerini güncelleştirmeniz gerekir. Unity belgelerine göre,belirli bir Coroutine'i durdurmakiçin dize değeri yöntemini kullanabilirsiniz.

  9. Ardından, MikrofonManager sınıfı tarafından alınan metnin çevirisini almak için coroutine 'i (hemen altına "destek" akış yöntemiyle) ekleyin. Bu kod, Azure Çeviri MetinAPI'sini göndermek için bir sorgu dizesi oluşturur ve ardından sorgu dizesiyle uç noktasına bir 'Get' çağrısı yapmak için iç Unity UnityWebRequest sınıfını kullanır. Sonuç daha sonra Results nesnenizde çeviriyi ayarlamak için kullanılır. Aşağıdaki kodda uygulama gösterilmiştir:

        /// <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. Unity'ye dönmeden önce değişikliklerinizi Visual Studio emin olun.

Bölüm 8 – Unity Sahneyi Yapılandırma

  1. Unity Düzenleyicisi'ne geri dönüp Betikler klasöründeki Sonuçlarsınıfına tıklayın ve hiyerarşi panelindeki Ana Kamera nesnesine sürükleyin.

  2. Ana Kamera'ya tıklayın ve Denetçi Paneli'ne bakın. Yeni eklenen Betik bileşeni içinde boş değerlere sahip dört alan olduğunu fark edersiniz. Bunlar, kodda özelliklere yapılan çıkış başvurularıdır.

  3. Aşağıdaki resimde gösterildiği gibi Hiyerarşi Panelinden uygun Metin nesnelerini bu dört yuvaya sürükleyin.

    Hedef başvuruları belirtilen değerlerle güncelleştirin.

  4. Ardından, Komut Dosyaları klasöründen Çeviri sınıfına tıklayın ve hiyerarşi panelindeki Ana Kamera nesnesine sürükleyin.

  5. Ardından, Scripts klasöründen MicrophoneManager sınıfına tıklayın ve hiyerarşipanelindeki Ana Kamera nesnesine sürükleyin.

  6. Son olarak Ana Kamera'ya tıklayın ve Denetçi Paneli'ne bakın. Sürüklediği betikte dilleri ayarlamaya olanak sağlayan iki açılan kutu olduğunu farkedersiniz.

    Hedeflenen çeviri dillerin giriş olduğundan emin olmak.

Bölüm 9 – Karma gerçeklikte test

Bu noktada Sahne'nin düzgün bir şekilde uygulandığını test etmek gerekir.

Sağlamak:

  • Bölüm 1'de belirtilen tüm ayarlar doğru şekilde ayarlanmıştır.
  • Sonuçlar , Çevirive MikrofonManager, betikleri Ana Kamera nesnesine ekli.
  • Azure Metin Çeviri API'si Hizmet Anahtarı'nı Çeviri Script içindeki authorizationKeydeğişkenine yerleştirebilirsiniz.
  • Ana Kamera Denetçisi Panelindeki tüm alanlar düzgün şekilde atanır.
  • Mikrofonunuz sahnenizi çalışırken çalışıyor (çalışmıyorsa, bağlı mikrofonunuz varsayılan cihaz olup olmadığını ve mikrofonunuz içinde doğru şekilde ayar Windows).

Unity Düzenleyicisi'nde Oynat düğmesine basarak çevreleyici başlığı test edin. Uygulamanın ekli çevreleyici başlığı aracılığıyla çalışıyor olması gerekir.

Uyarı

Unity konsolunda varsayılan ses aygıtının değişeceği hakkında bir hata görüyorsanız sahne beklendiği gibi çalışmayabilirsiniz. Bunun nedeni, karma gerçeklik portalının sahip olduğu mikrofonlu mikrofonlu mikrofonlarla uğraşmaktır. Bu hatayı görüyorsanız sahneyi durdurarak yeniden başlatarak her şeyin beklendiği gibi çalışması gerekir.

Bölüm 10 – Yerel makinede UWP çözümünü ve sideload'i derleme

Bu projenin Unity bölümü için gereken her şey artık tamamlandı, bu nedenle bunu Unity'den oluşturmanın zamanı geldi.

  1. Build Ayarlar: File Build Ayarlar...

  2. Derleme Ve Ayarlar'atıklayın.

    Unity sahneyi oluşturma.

  3. Henüz yoksa Unity C# Projeleri'ne tıklar.

  4. Derleme'ye tıklayın. Unity bir Dosya Gezgini penceresi açar ve burada uygulamayı derlemek için bir klasör seçmeniz gerekir. Bu klasörü şimdi oluşturun ve App olarak ad girin. Ardından Uygulama klasörü seçiliyken Klasör Seç'e basın.

  5. Unity projenizi App klasörüne oluşturmaya başlar.

  6. Unity derlemeyi tamamladikten sonra (biraz zaman alır), derlemenizin bulunduğu konumda bir Dosya Gezgini penceresi açar (görev çubuğuna bakın çünkü her zaman pencerenizin üzerinde görünse de yeni bir pencerenin ekini size bildirecek).

Bölüm 11 – Uygulamanızı dağıtma

Uygulamanızı dağıtmak için:

  1. Yeni Unity derlemenize (App klasörüne) gidin ve Visual Studio.

  2. Çözüm Yapılandırması'da Hata Ayıkla'ya seçin.

  3. Çözüm Platformu'nda x86, Yerel Makine'yi seçin.

    Bu Microsoft HoloLens, bilgisayarınıza bağlı olmadığınız için bunu Uzak Makine olarak ayarlamayı daha kolay bulabilirsiniz. Ancak, şunları da yapmak gerekir:

    • Ayarlar Ağ İnterneti Wi-Fi Gelişmiş Seçenekler'de bulunan ip adresini HoloLens ip adresini bilirsiniz; IPv4, kullanmanız gereken adrestir. >>
    • Geliştirici Modunun On olduğundan emin olun; geliştiricileri için Ayarlar Update Security'de bulunur.

    Çözümü Visual Studio.

  4. Uygulamayı bilgisayarınıza yüklemek için Derleme menüsüne gidin ve Çözümü Dağıt'a tıklayın.

  5. Artık Uygulamanız, kullanıma hazır, yüklü uygulamalar listesinde görünse de görünür.

  6. Uygulama başlatıldıktan sonra Mikrofona erişim yetkisi vermeniz istenir. EVET düğmesine tıklayın.

  7. Artık çeviriye başlamaya hazır mısınız?

Bitmiş Çeviri Metni API'si uygulamanız

Tebrikler, konuşmayı çevrilmiş metne dönüştürmek için Azure Çeviri Metni API'sini kullanan bir karma gerçeklik uygulaması gerçekleştirdiniz.

Son ürün.

Ek alıştırmalar

Alıştırma 1

Döndürülen metnin konuşulmalarını sağlamak için uygulamaya metin konuşma işlevi ekleyebilir misiniz?

Alıştırma 2

Kullanıcının uygulamanın içindeki kaynak ve çıkış dillerini ('from' ve 'to') değiştirmesini mümkün hale gelir, bu nedenle dil değiştirmek istediğiniz her zaman uygulamanın yeniden oluşturulmuş olması gerekmeyecektir.