🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
OpenPose

OpenPoseとは、深層学習を使って人の体や指などの位置(座標)や向きといったポーズを可視化する技術。関節点など人の体における特徴点が座標のどこにあるかを検出することができます。高性能プロセッサを使えば動画像内の複数の人物もリアルタイムで検出することが可能です。

JSON

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3713閲覧

jsonファイルの必要な要素だけを読み込み

nnnnn.na

総合スコア7

OpenPose

OpenPoseとは、深層学習を使って人の体や指などの位置(座標)や向きといったポーズを可視化する技術。関節点など人の体における特徴点が座標のどこにあるかを検出することができます。高性能プロセッサを使えば動画像内の複数の人物もリアルタイムで検出することが可能です。

JSON

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/09 04:46

jsonファイルの必要な数値だけ読み込みたいと思っています。
Jsonファイルは以下のとうりで

{"version":1.3,"people":[{"person_id":[-1],"pose_keypoints_2d":[743.028,562.8,0.815523,729.308,572.492,0.795361,625.483,568.645,0.599977,539.233,696.036,0.644411,0,0,0,837.081,570.622,0.599152,923.273,715.621,0.321155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711.682,535.358,0.738667,770.435,525.557,0.75212,676.426,507.914,0.568793,797.885,505.907,0.17453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]}

太文字の数値だけ読みこみたいです。


import json

a = open("key.json")
b = json.load(a)

print(b)

こちらでファイル全体を読み込むことができました。


import json

a = open("key.json")
b = json.load(a)

print(b["people"])

太文字のところをいじることで

一つ目に出てくるpeopleの後の
[{"person_id":[-1],"pose_keypoints_2d":[743.028,562.8,0.815523,729.308,572.492,0.795361,625.483,568.645,0.599977,539.233,696.036,0.644411,0,0,0,837.081,570.622,0.599152,923.273,715.621,0.321155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711.682,535.358,0.738667,770.435,525.557,0.75212,676.426,507.914,0.568793,797.885,505.907,0.17453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]}

この部分を表示することができました。


その後太文字にした部分を

print(b["pose_keypoints_2d"]) ・・・・・・①

print(b["people"][0]) ・・・・・・・・・・②

print(b["people"]["person_id"]) ・・・・・③

print(b["people"]["person_id"]["pose_keypoints_2d"]) ・・・・④

print(b["version"])・・・・・・・・・・・・⑤

このように試しましたがうまくいきませんでした
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
①の場合は
ハンドルされていない例外
'pose_keypoints_2d'

というエラー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

②の場合は
print(b["people"])
この時と同じ結果
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
③。➃の場合は
list indices must be integers or slices, not str

というエラー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
⑤の場合は
成功したものの
1.3しか表示されませんでした。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

どのようにすれば数値だけ読み込めるでしょうか
よろしくお願いいたします。

具体的に教えていただけると助かります。### ヘディングのテキスト

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

キー people の中にリストで検出された人数分の結果が入っているので、各人の キー pose_keypoints_2d を抽出する場合は、以下のようにしてみてください。

python

1text = """{"version":1.3,"people":[{"person_id":[-1],"pose_keypoints_2d":[743.028,562.8,0.815523,729.308,572.492,0.795361,625.483,568.645,0.599977,539.233,696.036,0.644411,0,0,0,837.081,570.622,0.599152,923.273,715.621,0.321155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711.682,535.358,0.738667,770.435,525.557,0.75212,676.426,507.914,0.568793,797.885,505.907,0.17453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]} 2""" 3 4import json 5 6j = json.loads(text) 7 8for person in j["people"]: 9 print(person["pose_keypoints_2d"])

投稿2019/12/09 05:40

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnnnn.na

2019/12/10 02:36

ご丁寧にありがとうございます。 無事必要な要素だけ読み込みできました。 ありがとうございました!
guest

0

②の結果はb["people"]の配列から要素を取り出しているのでprint(b["people"])の時と結果は変わっているはずですよ。

b["people"][0]からならpose_keypoints_2dを取り出せるはずですやってみてください。

投稿2019/12/09 05:41

mistn

総合スコア1191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mistn

2019/12/09 05:47

太字の部分だけならこれで十分ですが、人数分取り出すとなるとこれでは不十分ですね。 tiitoiさんの回答を参考にしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問