IHM avec Matlab AppDesigner
A partir de l'exemple Create App that Uses Multiple Axes to Display Results of Image Analysis, créer une IHM qui
permet à l'utilisateur de sélectionner et uploader une image
affiche le label prédit par l'IA.
Complément : Présentation de AppDesigner (programmation événementielle un peu comme AppInventor)
Le designer présente deux vues
une vue "design" pour l'IHM, on ajoute sur une grille des composants (image, bouton, liste déroulante etc.)
une vue "code" avec le code Matlab.
On peut ensuite associer du code (action) à des événements (quand on clique sur un bouton par exemple). La programmation est en objet, on parlera de propriétés plutôt que de variables et de méthodes plutôt que des fonctions.
Design View
Code View
Exemple (avec alexnet)
Modifier l'interface (layout)⚓
Ajouter le label
Ajouter un composant texte pour l'affichage du label (modifié par le programme)
Facultatif : ajouter un composant texte à afficher à côté (non modifiable)
Supprimer le menu déroulant avec les deux images préchargées
Facultatif, permet de simplifier l'interface.
Pour ne pas avoir d'erreur, il faut aussi supprimer le code correspondant.
% Callback function
function DropDownValueChanged(app, event)
end
Modification du code⚓
Chargement du cnn
Créer une propriété avec le menu dans l'éditeur. Ainsi le réseau sera accessible dans toute l'application.
Définir le réseau :
properties (Access = private)
net = alexnet % le cnn
end
Les propriétés définies pour l'application sont accessibles dans tout le code en préfixant avec
app.
Ici le réseau sera donc accessible avec
app.net
Charger le réseau au démarrage de l'application (startupFcn)
function startupFcn(app)
% Configure image axes
app.ImageAxes.Visible = 'off';
app.ImageAxes.Colormap = gray(256);
axis(app.ImageAxes, 'image');
% Chargement du cnn
app.net = alexnet;
% Update the image and histograms
updateimage(app, 'peppers.png');
end
Affichage du label
Le calcul et l'affichage du libellé se fait quand l'utilisateur a sélectionné une image. Code sur l'action "loadButton"
function LoadButtonPushed(app, event)
% Display uigetfile dialog
filterspec = {'*.jpg;*.tif;*.png;*.gif','All Image Files'};
[f, p] = uigetfile(filterspec);
% Make sure user didn't cancel uigetfile dialog
if (ischar(p))
fname = [p f];
updateimage(app, fname);
end
end
On peut donc afficher le label au même endroit que l'affichage de l'image, dans "updateimage"
%crée le label
img = imread(imagefile);
img = imresize(img, [227 227]);
label = classify(app.net, img);
% le composant "Label" reçoit comme texte le label prédit par le réseau
app.Label.Text = label;
Exporter l'application⚓
Créer une application standalone
Le menu "Share" permet de créer une application autonome, qui pourra s'exécuter sur un autre PC, même si Matlab n'est pas installé. Ce n'est pas détaillé ici.