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

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

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

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

JSON

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

Python

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

Q&A

1回答

1613閲覧

複数画像保存、複数json保存

yu_ttot

総合スコア1

OpenPose

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

JSON

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

Python

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

0グッド

0クリップ

投稿2021/10/05 07:23

tf_pose_estimationで複数画像保存と複数jsonファイル出力

shファイル

for i in seq 0 500
do
python3 run1.py --image=./1/No_10001/No_10001_a_00000029_$i.png --model mobilenet_thin --output_json=./movie/data/ --number_people_max 1

done

を実行して

tf_pose_estimationを使用して複数画像保存と複数jsonファイル出力を行いたい

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

複数画像保存、複数jsonファイル保存ができず、更新しながらtest.jpg、000000000000_keypoints.jsonとして保存してしまう。

該当のソースコード

run.py

1import argparse 2import logging 3import sys 4import time 5 6from tf_pose import common 7import cv2 8import numpy as np 9from tf_pose.estimator import TfPoseEstimator 10from tf_pose.networks import get_graph_path, model_wh 11 12logger = logging.getLogger('TfPoseEstimatorRun') 13logger.handlers.clear() 14logger.setLevel(logging.DEBUG) 15ch = logging.StreamHandler() 16ch.setLevel(logging.DEBUG) 17formatter = logging.Formatter('[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s') 18ch.setFormatter(formatter) 19logger.addHandler(ch) 20 21 22if __name__ == '__main__': 23 parser = argparse.ArgumentParser(description='tf-pose-estimation run') 24 parser.add_argument('--image', type=str, default='./images/p1.jpg') 25 parser.add_argument('--model', type=str, default='cmu', 26 help='cmu / mobilenet_thin / mobilenet_v2_large / mobilenet_v2_small') 27 parser.add_argument('--resize', type=str, default='0x0', 28 help='if provided, resize images before they are processed. ' 29 'default=0x0, Recommends : 432x368 or 656x368 or 1312x736 ') 30 parser.add_argument('--number_people_max', type=int, default=1, help='maximum number of people') 31 parser.add_argument('--resize-out-ratio', type=float, default=4.0, 32 help='if provided, resize heatmaps before they are post-processed. default=1.0') 33 parser.add_argument('--output_json', type=str, default='/tmp/', help='writing output json dir') 34 args = parser.parse_args() 35 36 w, h = model_wh(args.resize) 37 if w == 0 or h == 0: 38 e = TfPoseEstimator(get_graph_path(args.model), target_size=(432, 368)) 39 else: 40 e = TfPoseEstimator(get_graph_path(args.model), target_size=(w, h)) 41 42 # estimate human poses from a single image ! 43 image = common.read_imgfile(args.image, None, None) 44 if image is None: 45 logger.error('Image can not be read, path=%s' % args.image) 46 sys.exit(-1) 47 48 t = time.time() 49 humans = e.inference(image, resize_to_default=(w > 0 and h > 0), upsample_size=args.resize_out_ratio) 50 elapsed = time.time() - t 51 52 logger.info('inference image: %s in %.4f seconds.' % (args.image, elapsed)) 53 54 image = TfPoseEstimator.draw_humans(image, humans, imgcopy=False, frame=0, output_json_dir=args.output_json) 55 cv2.imwrite('./movie/img/test.jpg', image) 56
#estimator.py(jsonファイル出力 一部分) if output_json_dir: with open(os.path.join(output_json_dir, '{0}_keypoints.json'.format(str(frame).zfill(12))), 'w') as outfile: json.dump(dc, outfile)

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

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

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

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

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

guest

回答1

0

  • 複数画像保存、複数jsonファイル保存ができず、更新しながらtest.jpg、000000000000_keypoints.jsonとして保存してしまう。

画像の読み込みには、

python

1image = common.read_imgfile(args.image, None, None)

で、args.imageを使っていますが、書き出しは

python

1cv2.imwrite('./movie/img/test.jpg', image)

ですから、全てこの名前で保存されます。
args.output_jsonを加工してjpegファイル名を生成する必要があります。

jsonファイルの書き出しは、以下のようにargs.output_jsonを使っていますが、

python

1with open(os.path.join(output_json_dir, '{0}_keypoints.json'.format(str(frame).zfill(12))), 'w') as outfile: 2

以下のところでshファイル側で常に同じ引数を渡しているので同じ名前になります。

sh

1python3 run1.py --image=./1/No_10001/No_10001_a_00000029_$i.png --model mobilenet_thin --output_json=./movie/data/ --number_people_max 1

--output_json=の引数を$iを使って別々のものにする必要があります。

投稿2021/10/05 07:59

ppaul

総合スコア24670

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

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

yu_ttot

2021/10/06 01:20

ppaulさんご回答ありがとうございます。 >args.output_jsonを加工してjpegファイル名を生成する必要があります。 プログラム初心者のため加工してファイル名を生成する方法がわからないのですが教えていただけないでしょうか? >--output_json=の引数を$iを使って別々のものにする必要があります。 --output_json=./movie/data/name$i.jsonのような感じでよろしいのでしょうか? --output_json=はjsonファイルの保存先になるので No such file or directoryとでてしまうのですが....
yu_ttot

2021/10/06 04:07

追記 画像保存についてはうまくできました。 jsonファイルのほうが引き続きわからないため教えていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問