https://www.microsoft.com/microsoft-hololens/en-us
ということで、Azureと連携したものを作ってみるのですが、せっかくなのでCognitiveServicesを使ってみます。
https://azure.microsoft.com/ja-jp/services/cognitive-services/
開発環境はこちらを見て構築します。
https://developer.microsoft.com/en-us/windows/holographic/install_the_tools
どうしても日本語が好きな人は、世界のやまささんのブログを参考に。
セッティング方法自体はあってます。
http://blog.nnasaki.com/entry/2016/04/02/105956
今回は、HoloLensについているカメラの画像を撮影して、それをCognitive Services の Emotion API で解析してJSONを受け取るものを作ります。
なお、すべてのコーディングはUnity側で行っています。
細かいセッティングなどは後日詳細を説明しますが、C#入門2週間の私が困ったスクリプトについてを今回はかいつまんで。
Cognitive Services のSDKはすでに公開されているので、これを使おうと思ったのですが...
https://github.com/Microsoft/Cognitive-emotion-windows
Unityでうまくコンパイルできなかったので、WWWクラスで直接 REST API を叩きます。
そのC#スクリプトはこちら。
using UnityEngine;
using System.Collections;
// ここから下5行を追加で読み込み
// ここから下5行を追加で読み込み
using System.Collections.Generic;
using System.Text;
using System.IO;
using UnityEngine.UI;
using System;
public class CapScreen : MonoBehaviour {
public WebCamTexture webcam;
public Texture2D texture;
public Text res;
// Use this for initialization
void Start () {
// カメラからの画像を取得開始
// カメラからの画像を取得開始
WebCamDevice[] devices = WebCamTexture.devices;
if (devices.Length > 0)
{
webcam = new WebCamTexture(devices[0].name, 320, 240, 10);
webcam.Play();
}
}
// Update is called once per frame
void Update() {
}
// onClock event
public void OnClick () {
// カメラより画像をキャプチャ
// カメラより画像をキャプチャ
Color32[] pixels = webcam.GetPixels32();
if (texture) Destroy(texture);
texture = new Texture2D(webcam.width, webcam.height);
texture.SetPixels32(pixels);
// Cognitive Services Emotion API をコール
StartCoroutine(WaitForRes());
}
// WWWクラスを使って Emotion API を呼び出す関数
IEnumerator WaitForRes()
{
// 画像をJPEGとして取り出す
// 画像をJPEGとして取り出す
Byte[] bytes = texture.EncodeToJPG();
// Emotion REST API
// Emotion REST API
string url = "https://api.projectoxford.ai/emotion/v1.0/recognize";
// リクエストヘッダー
Dictionary
header.Add("Content-Type", "application/octet-stream");
header.Add("Ocp-Apim-Subscription-Key", "自身のサブスクリプションキー");
// リクエストする
// リクエストする
WWW www = new WWW(url, bytes, header);
// 非同期なのでレスポンスを待つ
// 非同期なのでレスポンスを待つ
yield return www;
// エラーじゃなければ解析結果のJSONを取得
// エラーじゃなければ解析結果のJSONを取得
if (www.error == null)
{
res.text = www.text;
}
}
}
次に続きます。