75869


動画からOpenposeで取得した全てのjsonファイルからx、yの座標をcsvとして保存する方法はありますか。今はひとつ一つのファイルから座標を抽出していますけど、コードは下のような感じです。

[code]

    def json_data (path):
      with open(path) as f:
          data = json.load(f)
          data = np.array(data['people'][0]['pose_keypoints_2d']).reshape(-1,3)
          df = pd.DataFrame(data, columns=['X','Y','P']).drop("P", axis=1)
      
      return df[df['X'] != 0.000]
    
[/code]


CC BY-SA 4.0
2021-05-16T01:48:21.067
75862
2021-10-02T06:04:55.457
45260
question
python
OpenPoseで取得した全てのjsonファイルから座標をcsvとして保存


> data = np.array(data['people'][0]['pose_keypoints_2d']).reshape(-1,3)  
>  df = pd.DataFrame(data, columns=['X','Y','P']).drop("P", axis=1)

を

[code]

    data = data['people'][0]['pose_keypoints_2d']
    del data[2::3]
    
[/code]

にするとx, y座標だけの配列になります。  
dataを返り値に設定し、全てのファイルでループし1つの配列にappendしていくといいと思います。

ループをする際は、natsortというライブラリを用いるといいと思います。  
以下のコードの `'path/to/jsons'` にjsonが格納されているディレクトリを指定すると、  
取得したjsonが順番に得られます。

[code]

    from natsort import natsorted
    natsorted(os.listdir('path/to/jsons'))
    
[/code]


CC BY-SA 4.0
2021-05-16T07:08:05.080
75869
2021-05-16T07:16:29.990
2021-05-16T07:16:29.990
45326
45326
75862
answer


JSON ファイル(`*.json`)が `data` ディレクトリ以下にあるとして、単一のファイル(`coordinates.csv`)にキーポイントの
`X`, `Y` 座標を出力します。

[code]

    import pandas as pd
    import numpy as np
    from glob import glob
    
    def json_data(path):
      arr = np.reshape(pd.read_json(path)['people'][0]['pose_keypoints_2d'], (-1, 3))[:,:2]
      return arr[arr[:,0]!=0.0]
    
    if __name__ == '__main__':
      coordinates = np.concatenate([json_data(f) for f in glob('./data/*.json')])
      np.savetxt('coordinates.csv', coordinates, delimiter=',', fmt='%f', header='X,Y', comments='')
    
[/code]


CC BY-SA 4.0
2021-05-16T09:19:13.047
75873
2021-05-16T09:19:13.047
75862
answer