Неизвестный файл появляется при попытке загрузить набор данных изображения и преобразовать его в массив - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь загрузить набор данных изображений и преобразовать его в массив для дальнейшей обработки, но он продолжает выдавать ошибку с файлом, которого нет в моем наборе данных. Я использую PyCharm на Windows 10.

Это ошибка:

[INFO] Загрузка изображений ...

[INFO] Обработка 00416648 -be6e-4bd4-bc8d-82f43f8a7240 ___ GCREC_Bact.Sp 3110.JPG ...

Ошибка: [WinError 267] Недопустимое имя каталога: '* C: \ Users \ vipek \ Desktop \ PlantVillage \ Tomato_Bacterial_spot 00416648-be6e-4bd4-bc8d-82f43f8a7240 ___ GCREC_Bact.Sp 3110.JPG '

Изображение отсутствует в моем наборе данных.

from typing import List

import numpy as np
import pickle
import cv2
from os import listdir
from sklearn.preprocessing import LabelBinarizer
from keras.models import Sequential
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation, Flatten, Dropout, Dense
from keras import backend as k
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from pathlib import Path

EPOCHS = 25
INIT_LR = 1e-3
BS = 32
default_image_size = tuple((256, 256))
image_size = 0
directory_root = Path("C:/Users/vipek/Desktop/PlantVillage")
width = 256
height = 56
depth = 3


def convert_image_to_array(image_dir):
    try:
        images = cv2.imread(image_dir)
        if images is not None:
            images = cv2.resize(images, default_image_size)
            return img_to_array(images)
        else:
            return np.array([])
    except Exception as E:
        print(f"Error : {E}")
        return None


image_list, label_list = [], []
try:
    print("[INFO] Loading images ...")
    root_dir: List[str] = listdir(directory_root)

    for plant_folder in root_dir:
        plant_disease_folder_list = listdir(directory_root / plant_folder)

        for plant_disease_folder in plant_disease_folder_list:
            print(f"[INFO] Processing {plant_disease_folder} ...")
            plant_disease_image_list = listdir(directory_root / plant_folder / plant_disease_folder)

            for image in plant_disease_image_list[:200]:
                image_directory = f"{directory_root}/{plant_folder}/{plant_disease_folder}/{image}"
                if image_directory.endswith(".jpg"):
                    label_list.append(plant_disease_folder)
    print("[INFO] Image loading completed")
except Exception as e:
    print(f"Error : {e}")

1 Ответ

0 голосов
/ 04 февраля 2020
  1. Часть вашего кода в вашем вопросе неверна. например, эта строка plant_disease_folder_list = listdir(directory_root / plant_folder)

Полагаю, это f"{directory_root}/{plant_folder}", верно?

Код в вашем вопросе не является полным. Это не вызвало бы ошибку. Вы, должно быть, пропустили часть, которая вызывает функцию convert_image_to_array

На основании сообщения об ошибке вы, вероятно, пытаетесь изменить текущий каталог на путь к файлу jpg. Если это правда, вам просто нужно добавить os.path.isdir, чтобы убедиться, что вы передаете только пути к каталогам функции

Не создавайте путь с использованием синтаксиса f"{..,}". Вы должны использовать os.path.join вместо этого. например, f"{directory_root}/{plant_folder}/{plant_disease_folder}/{image} можно переписать как os.path.join(directory_root, plant_folder, plant_disease_folder, image)

...