Line 21, in <module> image_id = annotation['image_id'] TypeError: string indices must be integers, not 'str'

64 views Asked by At
import json
import numpy as np
from PIL import Image
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D


with open('deepscores_train.json', 'r') as f:
    train_data = json.load(f)


with open('deepscores_test.json', 'r') as f:
    test_data = json.load(f)

train_x = []
train_y = []

for annotation in train_data['annotations']:
    # 获取图像ID
    image_id = annotation['image_id']

    # 查找与当前注释匹配的图像
    image = next((i for i in train_data['images'] if i['id'] == image_id), None)
    if image is None:
        continue

    # 从图像文件中加载图像数据
    with Image.open(image['file_name']) as img:
        img_data = np.array(img, dtype='float32')

    label = annotation['category_id']

    train_x.append(img_data)
    train_y.append(label)

train_x = np.array(train_x)
train_y = np.array(train_y)

test_x = []
test_y = []

for annotation in train_data['annotations'].values():

    image = next((i for i in train_data['images'] if i['id'] == annotation['image_id']), None)
    if image is None:
        continue

    with Image.open(image['file_path']) as img:
        img_data = np.array(img, dtype='float32')

    label = annotation['category_id']

    # 将图像数据和标签添加到测试数据集中
    test_x.append(img_data)
    test_y.append(label)


test_x = np.array(test_x)
test_y = np.array(test_y)


model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(train_x.shape[1:])))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))


model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])


model.fit(train_x, train_y, batch_size=128, epochs=10, validation_data=(test_x, test_y))

model.save('music_model.h5')

Traceback (most recent call last): File "E:\md\model.py", line 21, in image_id = annotation['image_id'] ~~~~~~~~~~^^^^^^^^^^^^ TypeError: string indices must be integers, not 'str'

I tried to train the model with DeepScores' data.But line 21 keeps getting an error, so I hope someone can help me change the code

0

There are 0 answers