2016年7月17日日曜日

【Microsott HoloLens + Cognitive Services】撮影したイメージをCognitiveServicesへ、というスクリプト

HoloLens、楽しそうですよね。
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行を追加で読み込み
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として取り出す
        Byte[] bytes = texture.EncodeToJPG();

        // Emotion REST API


        string url = "https://api.projectoxford.ai/emotion/v1.0/recognize";

        // リクエストヘッダー
        Dictionary header = new 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を取得
        if (www.error == null)
        {
            res.text = www.text;
        }
    }
}

次に続きます。


1 件のコメント:

callinicustaddeo さんのコメント...

Casino Games - DrmCD
Casino 서울특별 출장샵 Games. 성남 출장마사지 The 화성 출장마사지 gaming floor at DrmCD brings you the best 광양 출장샵 in casino gaming 김제 출장마사지 for the We are your largest-ever team and can be your one stop shop for