MATLAB Answers

ImageDatastore from text file

4 views (last 30 days)
Lin
Lin on 9 Nov 2020
Edited: Subhadeep Koley on 10 Nov 2020
Hi
I need to classify some image data using the trained resnet network.
For the testing data, I need to call them using text file which consist from a sequence directory such as follows:
testingdata.txt:
/DataSet/label1/1.jpg
/DataSet/label1/2.jpg
/DataSet/label1/3.jpg
/DataSet/label1/4.jpg
/DataSet/label2/1.jpg
/DataSet/label2/2.jpg
/DataSet/label2/3.jpg
/DataSet/label2/4.jpg
How to read those image dataset directory from text file, to be used as testing data for deep learning classification.?

  0 Comments

Sign in to comment.

Accepted Answer

Subhadeep Koley
Subhadeep Koley on 9 Nov 2020
Try this code snippet. The below code will read images, whose locations are specified in the testingdata.txt file and will also label them according to their foldernames.
% Read the filenames and put them in cell array
fId = fopen('testingdata.txt');
tline = fgetl(fId);
tlines = cell(0, 1);
while ischar(tline)
tlines{end+1, 1} = (tline);
tline = fgetl(fId);
end
% Create an imageDatastore object
imds = imageDatastore(tlines, 'LabelSource', 'foldernames');

  2 Comments

Lin
Lin on 10 Nov 2020
thank you very much for your answer.
How about if the directory in the text file list is not uniform such as follows:
testingdata.txt:
/DataSet/label1/imageA/1.jpg
/DataSet/label1/imageB/imageA1/1.jpg
/DataSet/label1/imageC/A/3.jpg
/DataSet/label1/imageD/a/1.jpg
/DataSet/label2/imageA1/1a/2.jpg
/DataSet/label2/imageB/a/2a.jpg
/DataSet/label2/imageC/C1/1c.jpg
/DataSet/label2/imageA/1a/4.jpg
Subhadeep Koley
Subhadeep Koley on 10 Nov 2020
@LS This can be achieved with a bit more processing. There are a lot of ways to achieve this. The below code might help you.
% Read the filenames and put them in cell array
fId = fopen('testingdata.txt');
tline = fgetl(fId);
tlines = cell(0, 1);
while ischar(tline)
tlines{end+1, 1} = tline;
tline = fgetl(fId);
end
% Create an imageDatastore object
imds = imageDatastore(tlines);
% Modify image labels of the imageDatastore object
expression = 'label[\d]';
funHandle = @(str)regexpi(str, expression, 'match');
customLabels = cellfun(funHandle, squeeze(imds.Files));
imds.Labels = categorical(customLabels);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!