現在、リアルタイムの顔認識データをUnityで処理するプログラムを作成しています。
その際に、Windowsでウェブカメラから得た表情データを下記のように配列にし、
UDP通信でUnity上のMonoBehaviourを継承したクラスを用いたゲームオブジェクトに送信しています。
C++
1 picojson::object obj; 2 //顔位置X座標 3 obj.emplace(std::make_pair("horizontal_pos", actor.horizontal_pos)); 4 picojson::array mouse; 5 for (unsigned int i = 0; i < FACIAL_POINTS; ++i) 6 { 7 //Listであるcoordにpush_backで尻に要素を足していく 8 picojson::array coord; 9 coord.push_back(picojson::value((double)shape.part(i).x())); 10 coord.push_back(picojson::value((double)shape.part(i).y())); 11 mouse.push_back(picojson::value(coord)); 12 13 } 14 obj.emplace(std::make_pair("obj", picojson::value(mouse))); 15 //文字列に変換 16 picojson::value val(obj); 17 18 //シリアライズ 19 std::string msg = val.serialize(); 20 //送信 sendto(ソケット, 送信するデータ, データのバイト数, フラグ, アドレス情報, アドレス情報のサイズ); 21 sendto(sock, msg.c_str(), msg.size(), 0, (struct sockaddr*)&addr, sizeof(addr));
上記のプログラムによって、下記のようにデータの受信が完了していますが、この受信した数値をそのまま使用しようとすると、
キャストができないと言うエラーが発生しました。
{"horizontal_pos":0.23046875,"obj":[[238,191],[279,186]],"pitch":-0.024254007264971733,"yow":8.5937318801879883}
そのため、受信側では下記のように型変換を行うことで処理可能な状態に変更することを考えています。
しかし、double型であるhorizontal_posとは異なり、objは型変換がうまくいきませんでした。(arrayやListは型ではないため)
下記プログラムのobjの要素を取り出し、数値データとして処理するには、どのように型変換すればよいのでしょうか。
C#
1 Dictionary<string, object> FaceInformation = Json.Deserialize(text2) as Dictionary<string, object>; 2 var horizontal_pos = FaceInformation["horizontal_pos"]; //顔位置X座標 3 var obj = FaceInformation["obj"]; //表情データ 4 5 Debug.Log(horizontal_pos.GetType()); //結果はSystem.Double 6 Debug.Log(obj.GetType()); //結果はSystem.Collections.Generic.List`1[System.Object] 7 8 double d_horizontal_pos = (double)horizontal_pos;
回答1件
あなたの回答
tips
プレビュー