Estoy tratando de obtener los datos de imagen de algunas imágenes de perros y gatos con cv2 para un proyecto de aprendizaje automático en python y agregarlos a una lista training_data. Pero solo imprime None cuando imprime la lista al final.

Al principio pensé que tal vez necesitaba convertir los datos en una matriz numpy, pero nada parece funcionar y realmente no entiendo lo que está mal.

CATEGORIES = ["Dog", "Cat"]     # 0=dog, 1=cat
IMG_SIZE = 50

training_data = []

def create_training_data():
    i = 0
    for category in CATEGORIES:
        path = os.path.join(DATADIR, category)  # path to cats or dogs dir
        class_num = CATEGORIES.index(category)
        for img in os.listdir(path):
            i += 1
            try:
                img_array = cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE)
                new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
                training_data.append([new_array, class_num])
            except Exception as e:
                print("general exception", e, os.path.join(path, img))
            if i % 1000 == 0:
                print(i, '...')
    print('\n\nfinished...\n\n')

create_training_data()

training_data = random.shuffle(training_data)

print(training_data)

X = []
y = []

for features, label in training_data:
    X.append(features)
    y.append(label)

X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1)

Creo que tiene que ver con el cambio de tamaño porque está lanzando muchas de estas excepciones:

excepción general OpenCV (4.1.1) C: ... \ opencv \ modules \ imgproc \ src \ resize.cpp: 3720: error: (-215: Error en la aserción)! ssize.empty () en la función 'cv :: resize 'D: ... / cats_and_dogs / PetImages \ Cat \ 9565.jpg

También imprime este error:

Traceback (última llamada más reciente):

El archivo "D: /Python/tensorflow/tutorial/cats_and_dogs.py", línea 44, en las características, etiqueta en training_data: TypeError: el objeto 'NoneType' no es iterable

Datos JPEG corruptos: 399 bytes extraños antes del marcador 0xd9

Datos JPEG corruptos: 226 bytes extraños antes del marcador 0xd9

Datos JPEG corruptos: 162 bytes extraños antes del marcador 0xd9

Advertencia: número de revisión JFIF desconocido 0.00

...

0
thefakejeff 14 oct. 2019 a las 22:24

1 respuesta

La mejor respuesta

Después de investigar sus errores, encontré este hilo que puede ser relevante para el problema que tiene. .

En resumen, el hilo señala un problema con el conjunto de datos de mascotas Oxford-IIIT. En ese conjunto de datos, algunas de las imágenes terminan en una extensión '.jpg' pero en realidad son '.png'. Verifique de dónde obtuvo sus imágenes.

Parece que tienes un problema similar / similar. La falta de coincidencia entre la extensión del archivo y los datos de la imagen real puede llevar a que openCV no pueda leer los datos correctamente.

Edición: 14 de octubre de 2019

Además, random.shuffle() opera en su lugar y, por lo tanto, devuelve None. Cambie training_data = random.shuffle(training_data) a random.shuffle(training_data)

1
whalsey 14 oct. 2019 a las 20:54