何が起きたか
物体検出の教師データとして、自前のデータをCOCO形式のアノテーションに変換するプログラムを組んでおりました。
COCOのアノテーションはJSON書くので、自前のプログラムにこんなコードを書きました。
json.py
json.dump(json.dumps(out_dic), f)
COCO形式と同じ構造でアノテーションを変換したものを、辞書out_dic
で保持しておりました。それを**json.dumps()
でJSON形式に変換した上で、json.dump()
でJSONファイルに保存する**コードを作成しました。
こうして作成したコードを、pycocotools
で読み込もうとしたところエラー発生。
AssertionError: annotation file format <class 'str'> not supported
↑こんな感じで、json.loads()で読み込んでいるはずなのにString型で読み込まれているというエラーが発生。
解決
json.dump()にはjsonではなくdictをそのまま投げれば良い。
json.py
json.dump(out_dic, f)
ハマりポイント
-
json.dumps()
で変換したJSON形式のStringをjson.dump()
に投げても、エラーが出ない - 生成したJSONファイルを直接見ても、見た目的には問題なく変換できている
- json.loads()で読み込む時にもエラーが出ない。
後から考えれば簡単なことですが、少しハマったのでシェアします。