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

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

詳細はこちら
YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Python

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

Q&A

解決済

1回答

3636閲覧

jsonファイルからの特定データの取得

rgb_nk

総合スコア26

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Python

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

0グッド

0クリップ

投稿2019/10/08 10:53

編集2019/10/08 11:33

現在yolo-v3への学習を行っており、新たなデータを得ました。

しかし、jsonデータを編集しなければならないことに気づきました。

イメージ説明

JSON

1{ 2 "annotation": [ 3 { 4 "area": 16104, 5 "bbox": [ 6 7 202, 8 190, 9 132, 10 122 11 ], 12 "category_id": "3", 13 "id": 1, 14 "image_id": 1, 15 "iscrowd": 0, 16 "segmentation": [ 17 [ 18 202, 19 190, 20 202, 21 312, 22 334, 23 312, 24 334, 25 190 26 ] 27 ] 28 }, 29 { 30 "area": 6776, 31 "bbox": [ 32 405, 33 193, 34 88, 35 77 36 ], 37 "category_id": "3", 38 "id": 2, 39 "image_id": 1, 40 "iscrowd": 0, 41 "segmentation": [ 42 [ 43 405, 44 193, 45 405, 46 270, 47 493, 48 270, 49 493, 50 193 51 ] 52 ] 53 }, 54 { 55 "area": 1344, 56 "bbox": [ 57 80, 58 220, 59 48, 60 28 61 ], 62 "category_id": "3", 63 "id": 3, 64 "image_id": 1, 65 "iscrowd": 0, 66 "segmentation": [ 67 [ 68 80, 69 220, 70 80, 71 248, 72 128, 73 248, 74 128, 75 220 76 ] 77 ] 78 }, 79 { 80 "area": 952, 81 "bbox": [ 82 129, 83 219, 84 28, 85 34 86 ], 87 "category_id": "3", 88 "id": 4, 89 "image_id": 1, 90 "iscrowd": 0, 91 "segmentation": [ 92 [ 93 129, 94 219, 95 129, 96 253, 97 157, 98 253, 99 157, 100 219 101 ] 102 ] 103 } 104 ], 105 "image": { 106 "file_name": "FLIR_00001", 107 "height": 512, 108 "id": 1, 109 "width": 640 110 } 111}

上記のJSONをデータを、
jsonファイルと一致した画像のファイルパス bboxの座標category_id bboxの座標category_id bboxの座標category_id

上記のjsonデータの例(4つのバウンディングボックスがあるから4つ必要)
path/img1.jpg 202,190,132,122,3 405,193,88,77,3 80,220,48,28,3 129,219,28,34,3

と言う様にしたいです。

色々コードを調べながらやろうとするのですがうまくいきません。

python

1mport json 2import os 3import glob 4import random 5from natsort import natsorted 6 7 8def convert_vott_to_kerasyolo3txt(image_dir, train_txt_save_path, classes_txt_save_path): 9 10 path = './FLIR_ADAS/training/Annotations/*.json' 11 12 l = glob.glob(path) 13 random.shuffle(l) 14 15 for files in natsorted(l): 16 17 row_list = [] 18 19 with open(files) as f: 20 dic = json.load(f) 21 tag_set = set() 22 23 visited_frames = dic['annotation'] 24 visited_frames = visited_frames.keys() 25 26 frames = 'annotation'[1] 27 # frame_keys = frames.keys() 28 29 for visited in visited_frames: 30 # if visited in frame_keys: # framesに存在するkeyのみ 31 if visited in frames: 32 img_annotation_list = frames[visited] 33 for item in img_annotation_list: 34 tags = item['category_id'] 35 for t in tags: 36 tag_set.add(t) 37 38 tag_dic = {} 39 tag_list = list(tag_set) 40 tag_list.sort() 41 for i, tag in enumerate(tag_list): 42 tag_dic[tag] = i 43 44 for visited in visited_frames: 45 if visited in frame_keys: # framesに存在するkeyのみ 46 img_annotation_list = frames[visited] 47 48 row_text = os.path.join(image_dir, visited) 49 50 for item in img_annotation_list: 51 box = item['bbox'] 52 tags = item['category_id'] 53 54 for tag in tags: 55 row_text = row_text + ' {},{},{},{},{}'.format(int(box['x1']),int(box['y1']),int(box['x2']),int(box['y2']), int(tag_dic[tag])) 56 57 if len(img_annotation_list) != 0: 58 row_list.append(row_text) 59 60 train_txt = '\n'.join(row_list) 61 62 print(train_txt) 63 64 f = open(train_txt_save_path, 'w') 65 f.write(train_txt) 66 f.close() 67 68 classes_txt = '\n'.join(tag_list) 69 70 f = open(classes_txt_save_path, 'w') 71 f.write(classes_txt) 72 f.close() 73 74 75def _main(): 76 # json_path = './FLIR_ADAS/training/Annotations' # VoTTのアノテーション情報が記録されたjsonファイルのパス 77 image_dir = ',/FLIR_ADAS/training/PreviewData' # 画像が保存されたディレクトリのパス 78 train_txt_save_path = 'my_train.txt' # keras-yolo3で学習に使うアノテーション用のテキストファイルの保存先のパス 79 classes_txt_save_path = 'model_data/my_classes.txt' # keras-yolo3で学習に使うラベル用のテキストファイルの保存先のパス 80 81 convert_vott_to_kerasyolo3txt( 82 image_dir=image_dir, 83 train_txt_save_path=train_txt_save_path, 84 classes_txt_save_path=classes_txt_save_path 85 ) 86 87if __name__ == '__main__': 88 _main()

上記のコードは、全然ダメです。

もし宜しければ、回答よろしくお願い致します。

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

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

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

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

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

meg_

2019/10/08 11:08

掲載されているJSONファイルは何のJSONファイルですか?(何かの出力結果ですか?)
rgb_nk

2019/10/08 11:19

FLIR社と呼ばれる企業が公開している上記記載の画像のアノテーションデータです!! bboxに画像の位置情報が値として入り、 category_idがクラスの番号です。 この二点を取得したいです。
meg_

2019/10/08 11:28

質問は「jsonデータの編集」ですが、本当にやりたいことは”jsonファイルからの特定データの取得”ですか? こちらであれば質問タイトルを編集した方が、適切な回答がつきやすくなるかと思います。
rgb_nk

2019/10/08 11:32

その通りです。 ほんとですね! ご指摘ありがとうございます!
meg_

2019/10/08 11:54

取得したいのは"category_id"と"segmentation"の数字ですか?
rgb_nk

2019/10/08 12:54

取得したいのは、category_idとbboxです!
guest

回答1

0

ベストアンサー

掲載のJSONファイルからデータを取得する例です。

Python

1import json 2 3with open('test.json') as f: 4 jsonfile = json.load(f) 5 6box_list = jsonfile['annotation'] 7 8for box in box_list: 9 print(box['category_id']) #category_id 10 #print(box['segmentation'][0]) #segmentationデータのリスト 11 print(box['bbox']) #bboxデータのリスト

投稿2019/10/08 12:05

編集2019/10/08 12:59
meg_

総合スコア10742

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

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

rgb_nk

2019/10/08 13:20

めぐさんありがとうございます! 感謝です!! またもう一つの質問も見ていただき有難うございます! 返信いたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問