JSON 注释错误“字符串索引必须是整数”

Posted

技术标签:

【中文标题】JSON 注释错误“字符串索引必须是整数”【英文标题】:JSON annotations error "string indices must be integers" 【发布时间】:2021-10-30 06:31:10 【问题描述】:

写了一个解析COCO JSON的函数。如何解决错误? 这里的示例文件名是:hard_hat_workers2819_png.rf.6870e9b0e6f5cd67d581d9d6185124e6.jpg 由于数据集很大,因此无法更改文件的名称。我该怎么办?

[在此处输入图片描述][1]

def get_board_dicts(imgdir):
    json_file = imgdir+"/_annotations.coco.json" #Fetch the json file
    with open(json_file) as f:
        dataset_dicts = json.load(f) #loads(jsonStr)
    for i in dataset_dicts:
        filename = i['file_name'] 
        i['file_name'] = imgdir+"/"+filename 
        for j in i["annotations"]:
            j["bbox_mode"] = BoxMode.XYWH_ABS #Setting the required Box Mode
            j["category_id"] = int(j["category_id"])
    return dataset_dicts 


---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)
<ipython-input-21-3c960c9b4cee> in <module>()
      1 #Visualizing the Train Dataset
----> 2 dataset_dicts = get_board_dicts("HardHat_COCO/train")
      3 #Randomly choosing 3 images from the Set
      4 for d in random.sample(dataset_dicts, 3):
      5     img = cv2.imread(d["file_name"])

<ipython-input-20-a32bcb391fe9> in get_board_dicts(imgdir)
      7         dataset_dicts = json.load(f) #loads(jsonStr)
      8     for i in dataset_dicts:
----> 9         filename = i['file_name']
     10         i['file_name'] = imgdir+"/"+filename
     11         for j in i["annotations"]:

TypeError: string indices must be integers 


  #samples from COCO JSON file:
"images": [
        
            "id": 0,
            "license": 1,
            "file_name": "hard_hat_workers2819_png.rf.6870e9b0e6f5cd67d581d9d6185124e6.jpg",
            "height": 416,
            "width": 416,
            "date_captured": "2021-08-31T14:27:07+00:00"
        ,
        
            "id": 1,
            "license": 1,
            "file_name": "hard_hat_workers239_png.rf.68144af0d963cc745832ccbf69cd93ec.jpg",
            "height": 416,
            "width": 416,
            "date_captured": "2021-08-31T14:27:07+00:00"
        ,

【问题讨论】:

请使用完整的错误回溯更新您的问题。 完全错误,好吧,等一下。 您期望dataset_dicts 是什么?你能用一个小样本更新你的问题吗?另外:for i in dataset_dicts 遍历你的字典的键。 是的,等一下 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

很难说,但你可能是这个意思:

for i in dataset_dicts['images']:
    filename = i['file_name']
    ...

【讨论】:

我有一个 COCO JSON 文件,其中包含图像注释。 file_name 具有图像路径。该格式适用于 Detectron 2 型号。但该函数无法解析 JSON 文件。感谢您的反馈:)

以上是关于JSON 注释错误“字符串索引必须是整数”的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中读取 JSON 字符串:接收错误“TypeError:字符串索引必须是整数”

读取 JSON 字符串 | TypeError:字符串索引必须是整数

Pandas。类型错误:字符串索引必须是整数。

TypeError:使用Python解析JSON时字符串索引必须是整数?

解析github api ..获取字符串索引必须是整数错误

为啥在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”?