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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

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

Python

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

Q&A

解決済

2回答

1091閲覧

jsonからcsvに変更した際に数値が変わる

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

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

Python

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

0グッド

0クリップ

投稿2018/11/12 08:20

編集2018/11/12 09:05

前提・実現したいこと

Openposeを利用しています。
jsonファイルとして出力されたデータをcsvとして整形し、解析をしたいです。

発生している問題・エラーメッセージ

jsonファイルをcsvファイルに整形しましたが、出てきたデータが元のデータと異なってしまいます。

入力したデータ

{"version":1.2,"people":[{"pose_keypoints_2d": [607.999,476.911,0.816635,655.268,571.594,0.862697,540.058,560.921,0.849626,518.767,733.718,0.903921,476.951,890.834,0.837659,775.781,602.601,0.822461,775.982,812.565,0.856365,765.25,985.312,0.911167,607.936,906.613,0.718905,534.765,896.152,0.676373,471.73,1189.44,0.755163,362.115,1472.29,0.789471,681.462,917.147,0.676364,629.089,1226.17,0.70003,602.946,1446.07,0.896496,581.898,435.272,0.757696,639.494,435.333,0.743821,555.803,429.939,0.121278,692.001,435.28,0.76239,555.729,1535.17,0.854017,602.586,1535.19,0.853378,602.7,1456.59,0.697083,278.083,1467.02,0.706469,273.077,1451.43,0.780069,372.448,1509.06,0.780327], "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":[]}]}

出てきたデータ(/frame_data)

person0 608.118,471.851,0.865448, 655.278,581.937,0.843845, 539.935,566.049,0.867245, 518.735,744.297,0.830558, 471.961,896.112,0.811827, 775.873,602.869,0.832397, 801.773,817.442,0.821503, 791.439,985.439,0.836332, 607.916,922.345,0.699928, 529.72,906.58,0.680761, 466.616,1194.82,0.75059 361.876,1472.24,0.796895, 681.484,937.898,0.682566, 628.963,1231.56,0.72671, 603.057,1445.98,0.900871, 582.007,435.21,0.818033, 644.552,435.249,0.844008, 560.676,435.099,0.17378, 692.157,435.35,0.771408, 561.053,1540.48,0.85584, 602.955,1535.29,0.842224, 602.655,1451.32,0.737746, 382.774,1608.47,0.76988, 351.205,1592.76,0.690698, 356.691,1482.76,0.70357,

出てきてほしいデータ(/frame_data)

person0 607.999,476.911,0.816635 655.268,571.594,0.862697 540.058,560.921,0.849626 518.767,733.718,0.903921 476.951,890.834,0.837659 ...

jsonコードの数値をそのまま3*25のcsv構造にしたものを得たいです。

jsonデータが1,2,3,4,5,6,...となっているものを

1,2,3,
4,5,6,

とcsvに変換したいのですが、
出てきた数値が

1.1, 2.2, 3.3,
4.4, 5.5, 6.6,
,,,
という具合で不規則に異なる値が出ています。

該当のソースコード

Python

1import json 2import numpy as np 3import os 4 5PROJECTNAME = 'legtest' \ 6 '' 7PROJECTPATH = '/home/deepstation/openpose/my_project/' 8JSONFOLDERPATH = PROJECTPATH + PROJECTNAME + '/result/' 9 10files = os.listdir(JSONFOLDERPATH) 11file_num = 1 12 13MAIN_DIRECTORYNAME = './' + PROJECTNAME + '/' 14FRAME_DIRECTORYNAME = './' + PROJECTNAME + '/frame_data/' 15BODYPARTS_DIRECTORYNAME = './' + PROJECTNAME + '/parts_data/' 16 17if not os.path.exists(MAIN_DIRECTORYNAME): 18 os.mkdir(MAIN_DIRECTORYNAME) 19 os.mkdir(FRAME_DIRECTORYNAME) 20 os.mkdir(BODYPARTS_DIRECTORYNAME) 21 22body_parts_list = [] 23for i in range(25): 24 part = [] 25 body_parts_list.append(part) 26 27 28for filename in files: 29 output_file_name = FRAME_DIRECTORYNAME + str(file_num) + '.txt' 30 with open(output_file_name, mode='wt') as output_file: 31 with open(JSONFOLDERPATH + filename, 'r') as f: 32 data = json.load(f) 33 personID = 0 34 for d in data['people']: 35 output_file.write('person' + str(personID) + '\n') 36 kpt = np.array(d['pose_keypoints_2d']).reshape((25, 3)) 37 parts_num = 0 38 for p in kpt: 39 if personID == 0: 40 body_parts_list[parts_num].append(p) 41 for elem in p: 42 output_file.write(str(elem) + ' ') 43 output_file.write('\n') 44 parts_num += 1 45 output_file.write('\n') 46 personID += 1 47 file_num += 1 48 49 50elemID = 0 51for body_elem_array in body_parts_list: 52 output_file_name = BODYPARTS_DIRECTORYNAME + str(elemID) + '.txt' 53 with open(output_file_name, mode='wt') as output_file: 54 print(elemID) 55 for elem in body_elem_array: 56 print(elem) 57 for e in elem: 58 output_file.write(str(e) + ' ') 59 output_file.write('\n') 60 elemID += 1

試したこと

別時間のデータを参照してるのかと考えましたが、最初のフレームと最後のフレームでも数値は異なりました。

補足情報(FW/ツールのバージョンなど)

Python3.4
Pycharm
Ubuntu14.04

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

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

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

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

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

can110

2018/11/12 08:35

出てきてほしいデータ例とその構造についての説明を追記ください。つまりOpenpose知らない人にも分かるような情報を提示すると回答得られやすくなります。
退会済みユーザー

退会済みユーザー

2018/11/12 08:42

ありがとうございます。欲しいデータの詳細を追記致しました。
can110

2018/11/12 08:49

追記ありがとうございます。もし可能であれば、どこが異なるかの説明(縦横が逆?数値が抜けている?など)および[607.999,476.911,…のデータ値を単純な[1,2,3…で示していただけると助かります。
退会済みユーザー

退会済みユーザー

2018/11/12 09:05

ありがとうございます。詳細を追記致しました。
can110

2018/11/12 09:14

コードは問題ないように見えます。あと1点だけ。「kpt = np.array(d['pose_keypoints_2d']).reshape((25, 3))」の次行にて「print(kpt)」したときの行列の並びと値は正しいですか?
退会済みユーザー

退会済みユーザー

2018/11/12 09:26

実行してログとして出てきた値のことでしょうか? 行列の並びは正しかったものの、値は変わらず元のファイルと異なった値を出力していました。
can110

2018/11/12 09:39 編集

確認ありがとうございます。読込~reshapeのタイミングで値が変わっているようですね。ちょっと考えにくいですが…
guest

回答2

0

ファイルなどのデータを用意するのが手間だったので、最小限コードで動作を確認してみましたが、問題なく出力されます。

もしかしてですが、実際にはpeopleリストは複数の要素で似たような値が入っていると思いますが、ひとつ前あるいは後ろのデータと誤認していないでしょうか?

Python

1import numpy as np 2 3data = {"version":1.2,"people":[{"pose_keypoints_2d": 4[607.999,476.911,0.816635,655.268,571.594,0.862697,540.058,560.921,0.849626,518.767,733.718,0.903921,476.951,890.834,0.837659,775.781,602.601,0.822461,775.982,812.565,0.856365,765.25,985.312,0.911167,607.936,906.613,0.718905,534.765,896.152,0.676373,471.73,1189.44,0.755163,362.115,1472.29,0.789471,681.462,917.147,0.676364,629.089,1226.17,0.70003,602.946,1446.07,0.896496,581.898,435.272,0.757696,639.494,435.333,0.743821,555.803,429.939,0.121278,692.001,435.28,0.76239,555.729,1535.17,0.854017,602.586,1535.19,0.853378,602.7,1456.59,0.697083,278.083,1467.02,0.706469,273.077,1451.43,0.780069,372.448,1509.06,0.780327], 5"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":[]}]} 6 7people = data['people'][0] 8kpt = people['pose_keypoints_2d'] 9 10with open( 'frame_data.txt', 'wt') as f: 11 kpt = np.array(kpt).reshape((25, 3)) 12 13 np.savetxt( f, kpt,fmt='%.3f', delimiter=',') # 簡便な書き方 14 # どちらも同じ数値が出力される 15 """ 16 for p in kpt: 17 for elem in p: 18 f.write(str(elem) + ' ') 19 f.write('\n') 20 f.write('\n') 21 """

投稿2018/11/12 10:39

can110

総合スコア38233

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

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

0

ベストアンサー

python

1files.sort()

を10行目に挿入することで解決しました。

投稿2018/11/14 03:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問