問題描述
之前標註好的檔案,標註有bbox和若干points。選擇Open Dir開啟影像目錄,選擇Change Output Dir選擇json檔案所在目錄。發現有些圖片能正常顯示標註後的狀態。而有的圖片彈窗報錯,error opening file且無法顯示影像
排查問題
這些圖片和標註是從原來不同資料夾移動到現在資料夾的。會不會是這個問題?
經過對比不能開啟的圖片的json檔案,發現其路徑不對。json中ImagePath是相對路徑,從原來資料夾複製到現有資料夾。label根據json檔案中ImagePath指示的圖片路徑找不到圖片,所以報錯。
但是發現一些路徑不對的json檔案也能正常開啟影像,再次對比發現,這些能開啟的json檔案在標註時儲存了IamgeData資訊。
結論
標註結束後能開啟標註後影像的充分條件為:影像對應json檔案中ImagePath正確或者json檔案儲存了ImageData資料
修改
將所有json檔案中ImagePath改正確
參考程式碼
#encoding=utf-8
#author:zhanghay
#time:2022/6/28
'''
目的:
json檔案中imagePath值不對要改過來
具體不對:
路徑不對
邏輯:
讀取json
獲取imagePath值
整改imagePath值(字典)
字典寫入json
其他:
遍歷資料夾json檔案
'''
import json
import os
def load_json(json_dir):
with open(json_dir, 'r', encoding='utf8') as js:
data = json.load(js)
js.close()
return data
def rewrite_imgpath(json_dir,data):
imgpath = data['imagePath'] #.split('\\')[-1]
imgname=imgpath.split('\\')[-1]
rewrie_imgpath=' '+imgname #正確的路徑
data['imagePath']=rewrie_imgpath
with open(json_dir, "w") as f:
json.dump(data, f)
f.close()
if __name__ == '__main__':
for file in os.listdir(" "): #json檔案所在資料夾
json_dir=os.path.join(" ",file) #json檔案所在資料夾
data=load_json(json_dir)
rewrite_imgpath(json_dir=json_dir,data=data)