필터 지우기
필터 지우기

How do I solve this error: Error using matlab.io.​datastore.​ImageDatas​tore/readi​mage (line 32)?

조회 수: 25 (최근 30일)
I am trying to use feature extraction to recognise faces, however when I run the code these errors come up:
Error using matlab.io.datastore.ImageDatastore/readimage (line 32)
Expected input number 2, INDEX, to be a scalar with value <= 8.
Error in Alexnet_Feature_Test (line 31)
I = readimage(imdsTest,idx(i));
Below is my code, I have tried using vgg19 and Alexnet and get the same errors for both
%Load zipped images
unzip('ATTDatabase.zip');
imds = imageDatastore('ATTDatabase','IncludeSubfolders',true,'LabelSource','foldernames');
[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
%Display sample images from zip file
numTrainImages = numel(imdsTrain.Labels);
idx = randperm(numTrainImages,10);
figure
for i = 1:10
subplot(2,5,i)
I = readimage(imdsTrain,idx(i));
imshow(I)
end
%Load pretrained network (AlexNet)
net = vgg19();
net.Layers
inputSize = net.Layers(1).InputSize;
%Extracting image features
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);
layer = 'fc7';
featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows');
featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
%Extracting class labels
YTrain = imdsTrain.Labels;
YTest = imdsTest.Labels;
%Image classifier
classifier = fitcecoc(featuresTrain, YTrain);
%Classification from test
YPred = predict(classifier,featuresTest);
%Showing 4 images with labels
idx = [1 5 10 15];
figure
for i = 1:numel(idx)
subplot(2,2,i)
I = readimage(imdsTest,idx(i));
label = YPred(idx(i));
imshow(I)
title(char(label))
end
%Accuracy of model
accuracy = mean(YPred == YTest)
I am not sure why this is coming up, please help!
  댓글 수: 10
Sujit Mistry
Sujit Mistry 2018년 12월 14일
Sorry I initially tried using the AT&T database but as they are black and white, they won't work. Here is the link for the images i used: https://fei.edu.br/~cet/facedatabase.html

댓글을 달려면 로그인하십시오.

채택된 답변

Sean de Wolski
Sean de Wolski 2018년 12월 13일
It looks like the datastore (probably imdsTest) only sees 8 images so you can't read the 10th or 15th one.
  댓글 수: 2
Sujit Mistry
Sujit Mistry 2018년 12월 14일
Yes, it only reads up to the 8th image and won't work after that, do you know how to solve this issue?
Thanks
Sean de Wolski
Sean de Wolski 2018년 12월 14일
[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
Why do you care about image 10, 15? The validation step is randomly grabbing 8 images (30%) from the original datastore so the indices 10,15 don't mean much anyway. Why not validate against the 8 it picked?
idx = [1 2 5 7]; % or whatever

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by