umetaro36
@umetaro36 (ume)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

HoloLens2で得た視線座標をWebSocketSharpを使ってClientPCに送りたい

解決したいこと

HoloLens2のEyeTrackingで得た視点の座標データをcsvファイルをWebSocket-Sharpを使用してClient側のUnityプロジェクトに送信したいです。

(プロジェクトの詳しい内容に関して)
HoloLens2でアプリが起動して、閉じるまで視線の座標をとり続けます。
そのデータをcsvに起こし、PCで分析したいと考えています。
HoloLens2では視線の座標をEyeGazeProviderより取得し、その結果から視線の毎フレームごとの距離や総視線移動距離を算出し、それらも含めcsvファイルに起こしServer側のPCにファイルのまま送りたいと考えています。

csvファイル作成のスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Text;
using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;

//csv形式にして視線の座標位置を書き出す
public class Log : MonoBehaviour
{
    public string fileName;
    private StreamWriter streamWriter;
    private IMixedRealityGazeProvider gazeProvider;
    private Vector3 previousPosition;
    private Vector3 totalDistance;

    void Start()
    {
        //CSVファイルを開いて書き込みモードに。Asset下にファイルを出力。
        streamWriter = new StreamWriter(Application.dataPath + "/" + fileName);

        // ヘッダー行を書き込む
        streamWriter.WriteLine("タイムスタンプ,フレーム数,x,y,z,1フレームでの距離,移動総距離");

        //視点初期位置
        previousPosition = transform.position;
    }

    void Update()
    {
        //現在の視点座標を取得
        Vector3 cursorCurrentPosition = gazeProvider.GazeCursor.Position;
        float flameDistance = Vector3.Distance(cursorCurrentPosition, previousPosition);    //1フレームでの視点移動距離
        
        streamWriter.WriteLine(Time.frameCount + "," +
            cursorrCurrentPosition.x + "," +
            cursorrCurrentPosition.y + "," +
            cursorrCurrentPosition.z + "," +
            flameDistance + "," +
            totalDistance
            );
    }

    void OnDestroy()
    {
        streamWriter.Close();
    }
}

WebSocketSharpのClient側(データをServerへ送信)のスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp;
using System.IO;

public class ClientTest : MonoBehaviour
{
    private GameObject logObj;
    private WebSocket ws;

    void Start()
    {
        Log log = logObj.GetComponent<Log>();
        string fileName = log.fileName;
        string filePath = "Assets/" + fileName;

        //WebSocket
        ws = new WebSocket("ws://Server側のIPアドレス:3000/");

        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("<color=cyan>WebSocket通信開始</color>");
        };

        ws.OnMessage += (sender, e) =>
        {
            Debug.Log(e.Data);
        };

        ws.OnError += (sender, e) =>
        {
            Debug.Log("WebSocket Error Message: " + e.Message);
        };

        ws.OnClose += (sender, e) =>
        {
            Debug.Log("<color=cyan>WebSocket通信終了</color>");
        };

        ws.ConnectAsync();
    }

    void OnDestroy()
    {
        if (ws != null)
        {
            ws.CloseAsync();
            ws = null;
        }
    }
}

自分で試したこと

ClientTest.csの方で以下のコードを書いてあげるべきとは思うのですが、テキストではなくファイルの転送にはどうしたら良いか分からず御指南いただけたら幸いです。

ws.Send();
0

No Answers yet.

Your answer might help someone💌