How to copy 30K images from folder to another according to the names in train and test text listes
    6 views (last 30 days)
  
       Show older comments
    
clear,clc;
path = addpath(genpath('D:\DOCTORAT 2019\MATLAB Codes\datasets\NUS-WIDE-OBJECT\image list'));
DIR = 'D:\Dataset\NUSWIDE-Obj\imagesnus30k';%Source file
D_dir = 'D:\Dataset\NUSWIDE-Obj\Images30K';%Destination file (Sould be 31-subfolder=Nbre of classes)
class = {'bear','birds','boats','book','cars','cat','computer','coral','cow','dog','elk','fish','flags','flowers','fox','horses','leaf','plane','rocks','sand','sign','statue','sun','tiger','tower','toy','train','tree','vehicle','whales','zebra'}; %31 classes
tr = textread('Train.txt','%s');
ts = textread('Test.txt','%s');
imgs = vertcat(tr,ts);
for i =1:size(imgs,1)
    disp(i)
    % img = imread([ DIR,'\\',string(imgs(i,1))]);
    imgname = (strcat(DIR, '\',string(imgs(i,1))));
    img_files{i} = char(imgname);
    fullFileName = fullfile(DIR, imgname);
    %imwrite(img,D_dir,'jpg')
    % figure(1),imshow(img);
    %pause();
    % imds = imageDatastore(img_files{i});
    % img = readimage(imds,I);
    % [img,info] = readimage(imds,2);
end
3 Comments
Accepted Answer
  Jan
      
      
 on 21 Nov 2022
        With some guessing:
source = 'D:\Dataset\NUSWIDE-Obj\imagesnus30k';
dest   = 'D:\Dataset\NUSWIDE-Obj\Images30K';
tr = textread('Train.txt', '%s');
ts = textread('Test.txt', '%s');
list = [tr; ts];
for k = 1:numel(list)
    name = list{k};
    copyfile(fullfile(source, name), fullfile(dest, name));
end
11 Comments
  Jan
      
      
 on 26 Nov 2022
				@riad didou: It would be much easier to post a working answer, if you provide a small set of input data. It is hard to guess, how the subfolder name has to be obtained, if you do not explain, what the inputs of your function is.
With some bold guessing:
for k = 1:numel(list)
    name      = list{k};
    subfolder = fileparts(name);
    src       = fullfile(source, name);
    destfolder = fullfile(dest, subfolder);
    if ~isfolder(destfolder)
        mkdir(destfolder);
    end
    try
        copyfile(src, fullfile(dest, name));
    catch ME
        sr
        if ~isfile(src)
            error('File name not existing: %s', src)
        else
            rethrow(ME);
        end
    end
end
More Answers (1)
  Benjamin Thompson
      
 on 21 Nov 2022
        Use copyfile to copy a file to a new location.  You could probably use arrayfun to more quickly add the full file path to the file names output from the dir function.  Or, you could probably pass a function to arrayfun that does the full file path creation and the copyfile all in one.
2 Comments
  Benjamin Thompson
      
 on 21 Nov 2022
				You can type "doc copyfile" and "doc arrayfun" in MATLAB to bring up the documentation and examples of using both functions.
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




