本日はチュートリアルの実施枠です。
Academyの「MR and Azure 301: Language translation」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 7」です。
Chapter 7:Call to Azure and translator service
最後に作成するスクリプトは Translator クラスです。
このクラスは以下を担当します。
・認証トークンと引き換えに、Azure でアプリケーションを認証する。
・認証トークンを使用して、翻訳するテキスト(MicrophoneManager クラスから受信)を送信します。
・翻訳結果を受け取って Results クラスに渡し、UIで視覚化します。
1.Script フォルダを開きます。
2.フォルダ内で右クリックして、Creapte -> C# Script を選択します。
Script の名称は Translator に設定します。
3.新しいスクリプトをダブルクリックしてVisual Studioで開きます。
4-9.以下の通り、スクリプトを編集します。
・Translator.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Collections;
using System.Xml.Linq;
using UnityEngine;
using UnityEngine.Networking;
public class Translator : MonoBehaviour {
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";
private const string authorizationKey = "-InsertYourAuthKeyHere-";
private string authorizationToken;
public enum Languages { en, fr, it, ja, ko };
public Languages from = Languages.en;
public Languages to = Languages.it;
private void Awake()
{
instance = this;
}
void Start()
{
StartCoroutine("GetTokenCoroutine", authorizationKey);
}
<summary>
</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;
Results.instance.SetAzureResponse(responseCode.ToString());
if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
{
Results.instance.azureResponseText.text = unityWebRequest.error;
yield return null;
}
else
{
authorizationToken = unityWebRequest.downloadHandler.text;
}
}
MicrophoneManager.instance.StartCapturingAudio();
}
<summary>
</summary>
public IEnumerator TranslateWithUnityNetworking(string text)
{
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;
}
string result = XElement.Parse(unityWebRequest.downloadHandler.text).Value;
Results.instance.SetTranslatedResult(result);
}
}
}
※ 個人の環境に合わせて "-InsertYourAuthKeyHere-"の値を Chapter 1 で取得した Key 値に修正します。
bluebirdofoz.hatenablog.com
10.Visual Studio で変更を保存して Unity に戻ります。
Chapter 7 はここまでです。
次回は Chapter 8 を実施します。
bluebirdofoz.hatenablog.com