ошибка: OpenCV (4.1.2) /io/opencv/modules/imgproc/src/resize.cpp:3720: ошибка: (-215: утверждение не выполнено)! ssize.empty () в функции «resize» Распознавание - PullRequest
0 голосов
/ 28 апреля 2020

Я делал приложение для распознавания изображений, у меня была ошибка в операции уменьшения изображения (изменение размера), и я работаю над Google Colab, вот мой код

train_dir = '/content/drive/My Drive/training_set/training_set'
test_dir = '/content/drive/My Drive/test_set/test_set'

train_cats = os.path.join(train_dir, 'cats')

train_dogs = os.path.join(train_dir, 'dogs')

test_cats_dir = os.path.join(test_dir, 'cats')

test_dogs_dir = os.path.join(test_dir, 'dogs')

train_cats = os.listdir(train_cats)

train_dogs = os.listdir(train_dogs)

test_cats = os.listdir(test_cats_dir)

test_dogs = os.listdir(test_dogs_dir)

Пример элемента в обучении game


train_cats[1:10] 
['cat.3910.jpg',
 'cat.3330.jpg',
 'cat.3288.jpg',
 'cat.582.jpg',
 'cat.3498.jpg',
 'cat.3744.jpg',
 'cat.355.jpg',
 'cat.3604.jpg',
 'cat.3807.jpg']

Пример элемента в тестовой игре

test_cats[1:10]
['cat.4001.jpg',
 'cat.4008.jpg',
 'cat.4003.jpg',
 'cat.4021.jpg',
 'cat.4013.jpg',
 'cat.4019.jpg',
 'cat.4018.jpg',
 'cat.4009.jpg',
 'cat.4022.jpg']

Модификация обучающей игры

size=4000 
train_imgs = train_dogs[0:size] + train_cats[0:size]
random.shuffle(train_imgs) 
print(train_imgs)

train_imgs[1:8] 
['dog.1302.jpg',
 'cat.1396.jpg',
 'cat.3158.jpg',
 'cat.2907.jpg',
 'cat.1769.jpg',
 'dog.568.jpg',
 'dog.1743.jpg']


img_size = 150


#### On définit une fonction qui prend en entrée une liste d'image
def read_and_process_image(list_of_images):
    """
    La fonctionne renvoie trois tableaux (array): 
        X est le tableau des images redimentionné (resize) 
        y est le ableau des cible (label) 
        l_id est un tableau qui contient les nom (chien, chat) pour la soumission du script kaggle 
    """
    X = [] # On initialise une liste qui comprendras les images
    y = [] # On initialise une liste qui comprendras les abels
    l_id = [] # On initialise une liste qui comprendras les id (dog, cat)


    #### Pour chaque élement de la liste d'image
    for image in list_of_images:
        ### On ajoute dans la liste X les images redimensionnés 


        X.append(cv2.resize(cv2.imread(image, cv2.IMREAD_COLOR), (img_size,img_size), interpolation=cv2.INTER_CUBIC))  #Lecture et redimensionnement de l'image
        basename = os.path.basename(image)# On stocke le chemin de chaque image dans la variable basename
        img_num = basename.split('.')[0] # On extrait le nom de l'animal ie 'dog' ou 'cat'
        l_id.append(img_num) ### On ajoute ce nom dans la liste l_id

        ### On crée un vecteur de cible y pour les modalités "dog" et "cat"
        if 'cat' in image: ### Si la chaine de caractère "dog" est contenu dans la liste "image" alors on ajoute un 1 à la liste y
            y.append(1)
        #### Sinon 0    
        else:
            y.append(0)

    return X, y, l_id #### On retourne trois élements, les images redimentionnés, le vecteur cible et l_id

#### On crée trois nouvelles variables qui correspondent aux images redimentionnégges, à la cible et a la liste de modalité kaggle
X, y, l_id = read_and_process_image(train_imgs)`

и вот ошибка, которую я получаю

 20 
     21 
---> 22         X.append(cv2.resize(cv2.imread(image, cv2.IMREAD_COLOR), (img_size,img_size), interpolation=cv2.INTER_CUBIC))  #Lecture et redimensionnement de l'image
     23         basename = os.path.basename(image)# On stocke le chemin de chaque image dans la variable basename
     24         img_num = basename.split('.')[0] # On extrait le nom de l'animal ie 'dog' ou 'cat'

error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/resize.cpp:3720: error: (-215:Assertion failed) !ssize.empty() in function 'resize'
op

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Скорее всего, здесь происходит то, что вы ссылаетесь на несуществующее изображение, поэтому то, что возвращается из cv2.imread, равно None. Вам нужно либо исправить путь к уязвимому файлу, либо само изображение повреждено, возвращая None. Вы можете просто проверить изображение, чтобы увидеть, является ли оно None после загрузки. Если оно None, пропустите изображение и продолжайте. Также обратите внимание, что иногда, если изображение повреждено, оно может вернуть массив NumPy размера 0, поэтому проверьте наличие None и проверьте, является ли это массив NumPy размера 0:

    #### Pour chaque élement de la liste d'image
    for image in list_of_images:
        ### On ajoute dans la liste X les images redimensionnés 
        # Vérifiez si l'image fonctionne
        # Nouveau logique
        im = cv2.imread(image, cv2.IMREAD_COLOR)
        if type(im) is np.ndarray:
            if im.size == 0:
                continue
        if im is None:
            continue

        X.append(cv2.resize(im, (img_size,img_size), interpolation=cv2.INTER_CUBIC))  #Lecture et redimensionnement de l'image

        ....

Возможно, более строгая проверка состоит в том, чтобы увидеть, существует ли файл на самом деле:

import os
...
...
    #### Pour chaque élement de la liste d'image
    for image in list_of_images:
        ### On ajoute dans la liste X les images redimensionnés 
        # Vérifiez si l'image fonctionne
        # Nouveau logique
        if not os.path.isfile(image):
            continue

        im = cv2.imread(image, cv2.IMREAD_COLOR)
        X.append(cv2.resize(im, (img_size,img_size), interpolation=cv2.INTER_CUBIC))  #Lecture et redimensionnement de l'image

        ....

1 голос
/ 28 апреля 2020

Добавьте проверку, чтобы увидеть, пусто ли ваше изображение:

Ссылка: { ссылка }

 Image = cv2.imread(image, cv2.IMREAD_COLOR)
 if (Image is not None and Image.size == 0):
     print("Error reading file")
     return -1

 X.append(cv2.resize(Image , (img_size,img_size), interpolation=cv2.INTER_CUBIC)) # Continue your work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...