Está en la página 1de 22

PROYECTO PARA EL CURSO DE REDES

NEURONALES
CLASIFICACIÓN DE 3 FRUTOS
MANZANAS, MANDARINAS Y GRANADILLAS

Profesor:
*ACUÑA CONDORI, Kevin

Integrantes:
*GONZALES CÁCERES, JORGE
*CEVALLOS RAMIREZ, EDGAR ANDRES 1521165
* RUMICHE SALINAS, LEONARDO 1421436
OBJETIVO
El objetivo de este proyecto es el de poder clasificar distintos frutos a
través del rasgo o síntesis de sus intensidades de colores, divididas en 3
capas de 8 bits R G B.
Estas capas serán mostradas en un histograma, para poder apreciar las
curvas de nivel para cada fruto seleccionado. Sin embargo lo que
necesitamos es obtener los valores de las intensidades en cada nivel de
capa de color R, G y B, para cada muestra (225 muestras en total).
Entonces tendremos 768 características por muestra.
Nuestra matriz de entrada será de 225x768.
Y debido a que tenemos 3 frutos distintos, nuestra matriz de salida será de
768x3.
BASE DE DATOS
La adquisición de la base de datos fue seleccionado diferentes muestras
desde diferentes puntos de vista, modificando la posición ángulo de estas.
Se aplicó un código para poder obtener los valores en una matriz de
225x768 para la base de datos.
Está guardado en un archivo dentro de la carpeta RDN – FRUTOS, llamado
V.mat.

MUESTRAS
Se mostrarán las capturas de las muestras de ejemplo, al igual
que su histograma.
El código obtendrá los histogramas de las capas RGB de la
muestra seleccionada. Esta sección del script es solo para una
muestra en específico.
Por lo tanto, si queremos realizar el mismo proceso para todas
las muestras, se aplicará el bucle “for” para las 225 muestras en
total.
Fruto 1
Manzana
Fruto 2
Mandarina
Fruto 3
Granadilla
ENTRENAMIENTO

Para poder entrenar nuestra red neuronal debemos tener nuestra base de
datos o matriz de entrada, y también nuestra matriz de salida. Nuestra
“Y_deseada” (Nombre del script para la matriz de salida) tendrá que
mostrar las 3 clases de muestras que tenemos en nuestra carpeta.
Una vez tengamos ambas matrices, podremos entrenar nuestra red
neuronal para clasificar nuestros 3 frutos propuestos para este problema.
Nprtool
Podremos observar que el entrenamiento se ha realizado sin problema
alguno. Sin embargo no quiere decir que sea “perfecto”.
Es un reto cuando se pone a prueba nuestra red neuronal entrenada,
frente a nuevas muestras. Por ejemplo, esta red ha sido diseñada para
diferenciar entre 3 tipos de frutas. Pero que sucedería si colocamos una
zanahoria como una muestra puesta a prueba, frente a nuestra red
entrenada?

En la parte de conclusiones se responderá a esta cuestión o problema


Script generado durante el entrenamiento de la red neuronal usando
nprtool de Matlab R2014b.
La división o distribución de las muestras están dadas por:
75% para el entrenamiento
15% para la validación
15% para prueba o test
Las pruebas realizadas demostraron que el entrenamiento se realizó sin
problemas. No hubo errores a la hora de poner a prueba nuevas muestras.
Sin embargo no siempre fue así.
CONCLUSIONES
Gracias a la herramienta nprtool de Matlab logramos entrenar nuestra red
neuronal para la clasificación de 3 frutos: Manzanas, mandarinas y
granadillas.
Gracias a las investigaciones realizadas por todas estas personas y a las
pruebas obtenidas en el desarrollo de nuestro proyecto, conseguimos
sacar adelante este trabajo que presentamos ante nuestro proyecto de
redes neuronales.
Debemos tener en cuenta la importancia del tratamiento de imágenes
digitales, gracias a esto podemos realizar diferentes acciones sobre la
imagen modelándola para resolver un problema de histogramas.
La interfaz aportada podría usarse en colegios, pues de forma interactiva
que muestra paso a paso con explicaciones todo el proceso, seguido para
poder reconocer diferentes frutas en los niños.

Obteniendo un porcentaje de error, casi despreciable (no es 0%).

Respondiendo a la pregunta que se planteó


anteriormente:
Si nuestro entrenamiento mostró un porcentaje de 100% en el aprendizaje
para la clasificación de nuestros frutos, no quiere decir que ante muestras
que no estén dentro de las muestras propuestas sean aciertos.
Esto debido a que solo fue entrenada para clasificar “3” tipos de frutos o
alimentos orgánicos. Al añadir una zanahoria en el test de nuestra red
neuronal, lo más probable es que el resultado nos sea mostrada como
“MANZANA” o “GRANDILLA”.
¿Por qué?
Las características que estamos tomando en cuenta son a través de la
intensidad de colores en sus 3 capas RGB. Solo es la imagen dividida en 3
matrices de colores puestas en un histograma.
No comparamos o clasificamos los frutos por textura, forma, etc.
Características o rasgos propios de alimentos orgánicos.
¿Qué propongo para este problema?
Se nos explicó que podría crearse una estructura de red neuronal a través
del método “Deep learning”. Sin embargo necesitamos una gran fuente de
información para nuestra base de datos, al igual que un ordenador que
pueda “soportar” el entrenamiento.
No conozco mucho al respecto sobre el tema, pero es realmente
interesante poder aprender más sobre redes neuronales e inteligencia
artificial, entre otros temas referentes a la programación de sistemas
inteligentes.

Histograma
%% obtencion del histograma en sus 3 canales de UNA imagen
q=imread('FRUTO(222).jpg');
%imshow(q)
%size(q)
subplot(2,2,1)
imshow(q)
xlabel('Imagen a color')
grid on
subplot(2,2,2)
imhist(q(:,:,1))
xlabel('canal rojo')
grid on
subplot(2,2,3)
imhist(q(:,:,2))
xlabel('canal verde')
grid on
subplot(2,2,4)
imhist(q(:,:,3))
xlabel('canal azul')
grid on

% Obtencion del vector que representa los histogramas


%canal rojo
i1= q(:,:,1);
[counts1,x1] = imhist(i1);
x1(1:256);
counts1(1:256);

%canal verde
i2= q(:,:,2);
[counts2,x2] = imhist(i2);
x2(1:256);
counts2(1:256);

%canal azul
i3= q(:,:,3);
[counts3,x3] = imhist(i3);
x3(1:256);
counts3(1:256);

% vector de intensidad de cada canal


m1=counts1(1:256); %canal rojo
m2=counts2(1:256); %canal verde
m3=counts3(1:256); %canal azul
M=[m1; m2; m3]' %matriz que une los 3 vectores en 1x 768

%% obtencion del histograma en sus 3 canales de las imagenes o


capturas
V=[]; %vector vacio en donde se acumulara los vectores de cada
muestra, captura o imagen
x=0; %inicializacion de la variable x en cero
for x=1:225 %rango de numero de
muestras
fichero=['FRUTO(',num2str(x),').jpg']; %variable del argumento
para imread
q=imread(fichero); %comando para cargar
imagen o captura

% CAPA ROJA
i1= q(:,:,1); %se toma el canal rojo
[counts1,x1] = imhist(i1); %extraemos el histograma en forma de
vector
x1(1:256); %rango de cada variable del vector
counts1(1:256);
% CAPA VERDE
i2= q(:,:,2);
[counts2,x2] = imhist(i2);
x2(1:256);
counts2(1:256);
% CAPA AZÚL
i3= q(:,:,3);
[counts3,x3] = imhist(i3);
x3(1:256);
counts3(1:256);
%vector de cada histograma,OJO que cada variable resultara
%vector de 256 filas con 1 columna
m1=counts1(1:256); % CAPA ROJA
m2=counts2(1:256); %CAPA VERDE
m3=counts3(1:256); %CAPA AZÚL
%union de los 3 vectores en la variable M
%al juntar los 3 vectores resultara uno de 768x1
M=[m1; m2; m3]' %la matriz M sera de una 768x1 y con la
traspuesta
% sera de un vector de 1 x768
V=[V ; M]; %matriz en donde se acumula los vectores de cada
muestra o imagen
%de x (numero de muestras) filas y 768 columnas
end
Y Deseada
%% CODIGO PARA CREAR LA MATRIZ DE SALIDA DESEADA PARA
% CLASIFICACIÓN DE FRUTOS (MANZANA, GRANADILLA, MANDARINA)

% MANZANAS
MV=zeros(75,1);
MANZANA=[ones(75,1), MV, MV];

% GRANADILLA
GV=zeros(75,1);
GRANADILLA=[GV, ones(75,1), GV];

%MANDARINAS (VERDES)
MDV=zeros(75,1);
MANDARINA=[MDV, MDV, ones(75,1)];

%matriz de salida deseada entre verdes y maduros


Y_deseada=[MANZANA;
GRANADILLA;
MANDARINA];
Entrenamiento
% Solve a Pattern Recognition Problem with a Neural Network
% Script generated by Neural Pattern Recognition app
% Created Wed Feb 26 01:15:38 COT 2020
%
% This script assumes these variables are defined:
%
% V - input data.
% Y_deseada - target data.

x = V';
t = Y_deseada';

% Create a Pattern Recognition Network


hiddenLayerSize = 20;
net = patternnet(hiddenLayerSize);

% Setup Division of Data for Training, Validation, Testing


net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% Train the Network


[net,tr] = train(net,x,t);

% Test the Network


y = net(x);
e = gsubtract(t,y);
tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);
performance = perform(net,t,y)

% View the Network


view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, plotconfusion(t,y)
%figure, plotroc(t,y)
%figure, ploterrhist(e)
Prueba
%%PALTAS DE CLASIFICACIÓN ALEATORIA
% INGRESAN AL MÓDULO DE CÁPTURA PARA SER EVALUADAS

% Edite la IP generada por aplicación IP Webcam


% ************************************
IP='192.168.1.2:8080';
% ************************************
url = strcat('http://',IP,'/shot.jpg');
Icel= imread(url); % Captura imagen celular.
hFig = figure(1);
h_real = image(Icel);
% Obtencion del vector que representa los histogramas
% EJEMPLO -> Icel=imread('FRUTO(47).jpg');

%CAPA ROJA
i1= Icel(:,:,1);
[counts1,x1] = imhist(i1);
x1(1:256);
counts1(1:256);

%CAPA VERDE
i2= Icel(:,:,2);
[counts2,x2] = imhist(i2);
x2(1:256);
counts2(1:256);

%CAPA AZÚL
i3= Icel(:,:,3);
[counts3,x3] = imhist(i3);
x3(1:256);
counts3(1:256);

% vector de intensidad de cada capa


m1=counts1(1:256); %CAPA ROJA
m2=counts2(1:256); %CAPA VERDE
m3=counts3(1:256); %CAPA AZÚL
H=[m1; m2; m3]'; %matríz que une los 3 vectores en 1x 768

% testeo de red neuronal


clc
y_obtenida=net(H')';
res=round(y_obtenida)

a= [0 0 1];
b= [0 1 0];
c= [1 0 0];

if res == a
display('GRANDILLA')
else if res == b
display('MANDARINA')
else if res == c
display('MANZANA')
else
display('MODIFICAR MUESTRA')
end
end
end
Bibliografía y Web grafía

Woo Chaw Seng y Seyed Hadi Mirisaee. A new method for fruits recognition
system. Electrical Engineering and Informatics, 2009. ICEEI '09. International
Conference on.
Christian Montoya Holguin, Jimmi Alexander Cortés Osorio y José Andrés
Chaves Osorio. Sistema basado en visión por computador. Ingeniare. Rev.
chil, ing. vol.22 no.4 Arica oct. 2014
Crear .exe en Matlab:
http://colab-matlab.blogspot.com.es/2012/05/como-realizar-un-
ejecutable-de-un-guide.html.

También podría gustarte