Как я могу скопировать все изображения из разных 12 папок в одну папку?

#python #python-3.x #image #glob #shutil

#python #python-3.x #изображение #глоб #shutil

Вопрос:

Я работаю с image dataset . Он имеет 12 different folders with 12 different classes . По этой причине я хочу, чтобы reserve all images a single directory это было all_im . Я пишу на нем код, но он копирует только общее количество 808 images . Но моя основная папка содержит more than 5000 images . Как я могу copy все изображения из main folder в new folder в Google-Colab ?

Мой полный код:

 from numpy.random import seed
seed(101)
from tensorflow import set_random_seed
set_random_seed(101)

import pandas as pd
import numpy as np

import tensorflow

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Conv2D, MaxPooling2D, Flatten
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint

import os
import cv2

import imageio
import skimage
import skimage.io
import skimage.transform

from sklearn.utils import shuffle
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
import itertools
import shutil
import matplotlib.pyplot as plt
%matplotlib inline

SAMPLE_SIZE = 250

# The images will all be resized to this size.
IMAGE_SIZE = 96

os.listdir('content/image_dataset')

folder_list = os.listdir('/content/image_dataset')

all_im_dir = 'all_im'
os.mkdir(all_im)

destination_path = "/content/all_images"
pattern = "/content/Weeds_dataset/*/*"  
for img in glob.glob(pattern):
    shutil.copy(img, destination_path)
  

Функция печати: len(os.listdir('all_images'))

Вывод: 808 images

Ожидание: основная папка содержит 5300 pictures , но я могу только копировать 808 Images .

Комментарии:

1. Вы уверены, что все файлы имеют уникальные имена в подкаталогах? Здесь вы эффективно сглаживаете любую иерархию.

2. Откуда берется вывод? Я не вижу никакой функции печати.

3. Уважаемый наставник, в каждой папке файлы имеют одинаковый номер, т.Е. от 1 до 800 или от 1 до 1000. Вот так. Это означает, что все файлы в каждой папке имеют одинаковый номер

4. Вам нужно переименовать изображения. Вы можете добавить счетчик в последний цикл и использовать счетчик для присвоения имен изображениям.

5. counter = 1 , counter = 1 и shutil.copy(img, destination_path '/' str(counter))

Ответ №1:

Вам нужно переименовать изображения. Вы можете добавить счетчик в последний цикл и использовать счетчик для присвоения имен изображениям.

 from numpy.random import seed
seed(101)
from tensorflow import set_random_seed
set_random_seed(101)

import pandas as pd
import numpy as np

import tensorflow

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Conv2D, MaxPooling2D, Flatten
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint

import os
import cv2

import imageio
import skimage
import skimage.io
import skimage.transform

from sklearn.utils import shuffle
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
import itertools
import shutil
import matplotlib.pyplot as plt
%matplotlib inline

SAMPLE_SIZE = 250

# The images will all be resized to this size.
IMAGE_SIZE = 96

os.listdir('content/image_dataset')

folder_list = os.listdir('/content/image_dataset')

all_im_dir = 'all_im'
os.mkdir(all_im)

destination_path = "/content/all_images/"
pattern = "/content/image_dataset/*/*"
counter = 0
for img in glob.glob(pattern):
    counter  = 1
    shutil.copy(img, destination_path   str(counter)   img.split('.')[-1])