質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • C#

    7102questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    3988questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • AWS(Amazon Web Services)

    2000questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • JSON

    1150questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

UnityでAWS S3 から取得した、Rekognition解析結果ログ入り Jsonファイルから、値を抽出したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 157

kazuh1r010

score 9

こんにちは、私は、現在UnityでAWS サービスを使って画像認識した
情報を取得しようとしています。

S3へPOSTするのをトリガーにRekognitionで
解析した結果をS3へログで保存し、
UnityでそのJsonファイルを読み込むまで、できていますが、
読み込んだJson形式の仕様の影響か、
欲しい値が抽出できません。

 S3からJsonファイルを取得し、欲しい値を抽出して、表示しようとしている部分のプログラム

 public void GetObject(string filename)
    {
        FileName =  filename;

        Client.GetObjectAsync(S3BucketName, FileName, (responseObj) =>
        {
            string data = null;
            var response = responseObj.Response;
            if (response.ResponseStream != null)
            {
                using (StreamReader reader = new StreamReader(response.ResponseStream))
                {
                    data = reader.ReadToEnd();
                }

                JSONObject json = new JSONObject(data);

                JSONObject facedetail = json.GetField("FaceDetails");//ここがNULLでエラーになります
                JSONObject faceinfo = facedetail.GetField("Smile");

                Debug.Log(faceinfo.GetField("vlaue").str);
                Debug.Log(faceinfo.GetField("Confidence").str);

                //FaceData facedata = JsonUtility.FromJson<FaceData>(json);
                //Debug.Log(facedata.Smile);

         //string smile;
                //var jsonData = Json.Deserialize(json) as Dictionary<string, object>;//一層目
                //Debug.Log(jsonData);
                //var FaceDetails =jsonData["FaceDetails"] as Dictionary<string, object>;
                // Debug.Log(FaceDetails);
                //smile = (string)FaceDetails["Smile"];
                //Debug.Log(smile);

            }
            else
            {
                Debug.Log("miss");
            }
        });
    }

 試したこと

上記の様に、JSONObject、また、コメントアウト部分の様に、JsonUtility、MiniJSONなど試しましたが、うまく取得できませんでした。。

 取得Jsonファイル中身

https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/faces.html 
上記URLのDetectFaces API コールのレスポンスが中身になります。試しに抽出しようとしているのが「FaceDetails」中身の「Smile」のvalue,Confidenceです。

どなたか、上記のJson形式でも抽出できる方法がお分かりになられる方、ご教授よろしくお願いいたします。
別のアプローチなどで解決できそうな場合も教えていただければ幸いです。(うっすら考えているのがLamda上のPythonコードで書き換えてしまうなど)
どうぞよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

自己解決されたとのことですが、記載します。

{
   "FaceDetails": [ //←注目
      { 
         // …(中略)
         "Smile": { 
            "Confidence": number,
            "Value": boolean
         },
         // …(中略)
      }
   ], //←注目
   "OrientationCorrection": "string"
}

この場合、"FaceDetails"は、[]で囲まれているので、配列です(中身が1つしかないけど)。

なので、以下のようにすれば、よろしいかと思います。

        JSONObject json = new JSONObject(data);

        JSONObject facedetail = json.GetField("FaceDetails");
        // FaceDetailsの配列の0番目のSmileを取得
        JSONObject faceinfo = facedetail[0].GetField("Smile");

        // ~.strとするとnullになるので修正
        Debug.Log(faceinfo.GetField("Value"));
        Debug.Log(faceinfo.GetField("Confidence"));

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/27 12:08

    回答ありがとうございます。上記のように修正したところ抽出することができました。
    jsonから抽出する際の理解が深まりました。
    こちらの方法が望ましいのでこちらを採用させていただきます!
    ありがとうございました!

    キャンセル

check解決した方法

0

自己解決しました!

読み取れる様に、多少強引ですが、以下のプログラムでjson内の文を
変更したところ抽出することができました。

data = data.Replace("\'", "\"");
data = data.Replace("[", "");
data = data.Replace("]", "");

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    java 記号文字のエスケープ処理について

    前提・実現したいこと javaで禁則文字チェックを作成しています。 禁則文字はプロパティで保持し、javaで取得した際にエスケープが必要な文字が含まれていた場合は その文

  • 解決済

    glassfishからDerbyに接続したい

    前提・実現したいこと derbyへの接続ができずに困っています。 会社から本サイトへ投稿することができないため、恐れ入りますが、返答、バージョンの確認、ソースの開示等、タイムラ

  • 解決済

    UnityのLet's Tweet in Unityを用いた画像ツイート

    Unityの無料Asset、Let's Twitter in Unityを用いTwitterクライアントを製作しています。 このアセットには画像ツイートメソッドは含まれていな

  • 解決済

    UniRxで監視対象を動的に追加する方法

    UnityのアセットUniRxについての質問です。 ReactivePropertyを持つクラスAと、AクラスのListを持つBクラスがあります。 class A {

  • 解決済

    Unity-Update上の判定で一度だけメソッドを呼び出す

    Unityでゲームを制作しています。 例えば、ゲーム上でスコアが一定値に達するたびにステージの難易度が上がり、画面に「ステージ〇〇」というテキストのカットインを入れたりするよう

  • 解決済

    UnityでGET通信したオブジェクトのバリューの取得について

    概要 Unity(c#)でのサーバーから送られてきたデータをLitJsonを利用してオブジェクトにデシリアライズし、Text型オブジェクトに代入し表示するという実装を試みております

  • 解決済

    Unity JSONデータの抜き取り

    unity初学者で申し訳ないのですが、調べてもJSONデータから一部の配列のみ抜き出す方法がわからずこまっています。 説明不足でしたらコメントお願いいたします。 //jpg=画

  • 解決済

    Unity : Raycastがいくつかのオブジェクトに対してヒットしない

    前提・実現したいこと Raycastをヒットさせたい 発生している問題・エラーメッセージ ・Box Colliderをコンポーネントに持つオブジェクトがあるが、Raycastが

同じタグがついた質問を見る

  • C#

    7102questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    3988questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • AWS(Amazon Web Services)

    2000questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • JSON

    1150questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • トップ
  • C#に関する質問
  • UnityでAWS S3 から取得した、Rekognition解析結果ログ入り Jsonファイルから、値を抽出したい