Articulo seleccionadora maiz Ricardo Marco

OTOÑO
2013
PROYECTO FINAL
SELECCIONADOR ÓPTICO DE SEMILLAS DE MAÍZ
MATERIA:
CONTROL DE PROCESOS POR COMPUTADORA
PROFESOR
Dr. Jaime Cid Monjaraz.
INTEGRANTES:
MARCO A. MARTÍNEZ CASTILLO 200502749
RICARDO RENDÓN GONZÁLEZ 200509408
1
Benemérita Universidad Autónoma de Puebla
Control de Procesos por Computadora
SELECCIONADORA ÓPTICA
DE SEMILLAS
https://www.youtube.com/watch?v=0J4GzLw13F8
Marco Antonio Martínez Castillo 1, Ricardo Rendón González 1
1 Mecatrónica, Facultad de Ciencias de la Electrónica BUAP, México
*Correo electrónico del autor: [email protected]
Resumen. El siguiente trabajo se enfoca
directamente en seleccionar y separar
las semillas de mejor calidad para
cultivarlas y ampliar las posibilidades de
una buena cosecha mediante la
aplicación de control con interfaz de
usuario en Matlab vinculado con Arduino
para el procesamiento de imágenes
digitales
en
un
sistema
de
reconocimiento de patrones. Utilizando
una red neuronal artificial supervisada
(Perceptrón).
Palabras clave. Control, Matlab, Arduino,
patrones, perceptrón.
1. Introducción.
La semilla, simiente o pepita es cada uno
de los cuerpos que forman parte del fruto
que da origen a una nueva planta.
La producción de semillas es un proceso
esencial de la agricultura. Gracias a él,
los campesinos han domesticado las
especies
vegetales
que
hoy
consumimos, creando una enorme
variedad dentro de cada especie al irlas
adaptando a distintas condiciones
2
ambientales y necesidades culturales.
Este proceso se ha mantenido en
algunas regiones durante al menos diez
mil años.
La Ingeniería de control es una disciplina
que
se
focaliza
en
modelar
matemáticamente una gama diversa de
sistemas dinámicos y el diseño de
controladores que harán que estos
sistemas se comporten de la manera
deseada. Aunque tales controladores no
necesariamente son electrónicos y por lo
tanto la ingeniería de control es a
menudo un subcampo de otras
ingenierías como la mecánica.
La visión artificial trata de simular el
proceso del sentido de la visión de los
seres vivos, según el cual un objeto es
captado mediante los receptores de la
retina y es transformado en impulsos
nerviosos que son procesados por el
cerebro.
La visión artificial consiste en la
captación de imágenes en línea
mediante cámaras basadas en matrices
de sensores sensibles a la luz (CCD o
CMOS), el posterior tratamiento de las
mismas mediante técnicas de análisis de
imagen y la actuación sobre el proceso
(control de producto) o el producto
(control de calidad).
Las principales ventajas son la reducción
de los costes del control de calidad, el
aumento de la producción, la inspección
del 100% de la producción, la
reproducibilidad y el funcionamiento 24
horas al día sin “cansancio”.
1.1.
Elementos de un Sistema de
Visión Artificial
Los elementos
siguientes:
básicos
son
los
El sistema de iluminación (fluorescente,
LED, polarizada, backligth, láser)
El sensor o cámara de captura de
imagen (CMOS), CCD, InGaAs, Camara
web)
Tarjeta de captura de elevado ancho de
banda
(Firewire,
CameraLINK,
GbEthernet)
Procesamiento de imagen (Procesador
y algoritmos de pretratamiento y filtrado
de la imagen, de segmentación y
reconocimiento de formas, de extracción
de descriptores y de clasificación)
Sincronía con el proceso, para adquirir
la imagen en el momento adecuado y
para actuar con el proceso o separar
unidades defectuosas.
Sensores que indiquen el momento justo
para tomar la imagen (Infrarrojo,
mecánico, magnético, de luz visible,
laser).
Transportador y Actuador con los que
se posicionan los elementos y se
separan mecánicamente (Neumáticos,
electrónicos, hidráulicos, magnéticos).
2. Presentación del problema.
Obtener semillas de calidad en base a
los patrones establecidos separando los
objetos extraños y semillas que no
tengan el mínimo establecido.
3. Descripción de la solución.
El proyecto busca implementar una
pequeña planta industrial para el proceso
de control de calidad.
Hoy en día se ha facilitado este trabajo
mediante sistemas inteligentes que
hagan esto por el hombre, así evitar la
3
fatiga humana de verificar cada elemento
uno por uno lo que sería muy tedioso.
La metodología utilizada para encontrar
la solución se basa en dos bloques que
son hardware y software.
En esta investigación, se utilizan como
herramientas de creación sensores,
motores y programación en el software
de ingeniería MATLAB, estas partes
serán descritas detalladamente en este
documento.
Con este proyecto solo bastará con una
persona la cual tendrá como función
accionar el sistema para que opere
automáticamente, claro está que este
sistema puede modificar algunos de sus
algoritmos internos (software) para así
hacerlo trabajar al modo del operario.
Principalmente se hará que este sistema
implementado clasifique objetos según
color y forma.
El diagrama a bloques
de nuestro
sistema de visión artificial supervisada es
el siguiente:
Ilustración 2: Esquema mecánico de seleccionadora
El proyecto constará de dos partes
básicas para su funcionamiento:
4 Hardware
Transportador.
Se diseñó una banda transportadora a
partir de una banda automotriz utilizada
para transmitir el movimiento del motor
hacia las poleas de las bombas de agua
y aceite, a dicha banda se le colocaron
dientes de caucho separadas por una
distancia de 1.5 cm, mismas que
formaban desniveles en los que por
medio de gravedad las semillas eran
llevadas, y a su vez arrastradas en
dirección de la cámara.
Ilustración 1: Diagrama a bloques del sistema de
visión
Ilustración 3Tramos de caucho que forman los
dientes.
En la imagen siguiente mostramos un
esquema a grosso modo del sistema
mecánico de nuestra seleccionadora.
La banda previamente fue limpiada y
alisada para lograr la adherencia de los
dientes de caucho.
4
Ilustración 4: Banda automotriz.
La banda dentada es impulsada por un
motor con un tren de engranes, el cual
trabaja a 12 Volts con 150 RPM, mismas
que posteriormente serán reguladas por
nuestro PWM.
Ilustración 5: Motorreductor
Como sensor de posición se decidió
diseñar un arreglo de un LED
ultrabrillante y una fotoresistencia para
poder identificar tanto el paso del diente
como la posición del objeto.
En la siguiente figura mostramos la
posición
del
LED
en
nuestro
transportador.
Ilustración 6: LED posicionado frente al diente de
banda.
La fotoresistencia utilizada como receptor
es de 2 MOhms.
Ilustración 7: Fotoresistencia ubicada al frente de
nuestro LED
El elemento utilizado para capturar las
imágenes y hacer el reconocimiento fue
una cámara web montada en la parte
superior de nuestro transportador.
5
En la figura mostrada a continuación
logramos observar el protoboard utilizado
para la etapa te potencia y el PWM que
controla nuestro motoreductor.
Ilustración 8: Cámara web y montaje superficial.
Cuando un objeto extraño o una semilla
defectuosa son detectados, por medio
de un actuador electrónico logramos
mecánicamente desviar la semilla o el
elemento extraño hacia una dirección
distinta de la que lleva a la semilla de
calidad.
Ilustración 11: Protoboard para la etapa de potencia y
el PWM del motoreductor
5 Software.
5.1 Procesamiento de Imágenes por
Reconocimiento de Patrones.
El proyecto consiste en poder discriminar
si un objeto dado, contenido en una
imagen digital, es una semilla de calidad
o no.
Ilustración 9: Actuador electrónico.
Nuestra interfaz con el sistema mecánico
es un Arduino ATMEGA mod. 2560.
Ilustración 10: Arduino MEGA 2560
Teniendo en mente lo anterior, se
utilizará MATLAB con el Image
Processing ToolBox de manera que
nos podamos olvidar de los detalles de
implementación para el manejo de las
imágenes y de los distintos algoritmos
que se usarán y, en su lugar, nos
podamos enfocar precisamente en
utilizar y probar distintas opciones de los
mismos. Por supuesto que al momento
de la redacción de este artículo, ya se
tiene un algoritmo seleccionado e
implementado por lo que sólo se
describirá el algoritmo final.
En cuanto al ambiente, nos olvidaremos
de las dificultades que enfrentan ciertas
aplicaciones de Visión Computacional y
simplificaremos
enormemente
el
esfuerzo requerido para la segmentación
6
y detección de la ubicación del objeto de
interés en la imagen controlando el fondo
y la iluminación. Este tipo de decisiones
o conocimiento previo acerca del entorno
se tienen en ambientes completamente
controlados como por ejemplo, en
aplicaciones para la inspección de
calidad de piezas en la industria donde
se sabe exactamente cuál es el fondo, la
ubicación exacta de la pieza y se puede
controlar la iluminación.
Proceso General.
El algoritmo, como el típico sistema de
reconocimiento de patrones que es, tiene
los siguientes pasos:
1.- Adquisición de la Imagen: El
objetivo aquí es obtener una imagen, en
este caso a través de una cámara web y
almacenarla en memoria para después
usarla.
2.- Preprocesamiento: Una vez que
tenemos la imagen, necesitamos, de
algún modo, ubicar dónde se encuentra
el objeto a ser analizado y separarlo del
resto de la imagen.
3.- Extracción de las Características:
Creación del patrón a ser analizado.
4.- Clasificación: Evaluación del patrón.
Preparación del entorno.
Ilustración 12: Fondo negro que cotrasta con el
maíz.
Adquisición de la imagen.
En esta etapa, simplemente tomamos
una imagen utilizando la cámara web y la
guardamos en memoria. El código
utilizado es el siguiente:
vid = videoinput(‘winvideo’);
snapshot = getsnapshot(vidobj);
Captura de imagen.
La siguiente es una imagen de
ejemplo adquirida mediante el código
mostrado arriba:
Para la fácil segmentación de la imagen,
podemos utilizar un fondo de un color
contrastante a los objetos que se
intentan clasificar. Para este proyecto,
utilizamos un fondo negro, pues el maíz
tiene un color amarillo claro.
Ilustración 13: Captura de nuestro maíz muestra.
7
Procesamiento.
Lo que nos interesa en este punto, es la
localización del objeto en la imagen para
poder separarlo del fondo y que sea más
fácil la extracción de las características.
Si trabajaramos con la imagen original
sin un preprocesamiento, sería más dificil
poder medir el objeto.
Para esto, binarizamos la imagen, es
decir, a partir de la imagen en RGB,
creamos una imagen con tan solo
valores de pixeles de 1 y 0, siendo 1 los
pixeles pertenecientes al fondo y 0 los
pertenecientes al objeto.
Para lograr eso, recurrimos a nuestro
conocimiento previo del ambiente
controlado, donde sabemos que el fondo
es verde. Lo que debemos hacer
entonces, es mandar el verde a blanco y
el resto de los colores a negro.
Esto lo realizamos creando una nueva
imagen con tan sólo los valores de
amarillo de la imagen original:
r = snapshot
(:,:,1);
Ilustración: 14 Conversion de imagen en binario.
Una vez que tenemos la imagen binaria,
podemos localizar las coordenadas de
las cuatro esquinas donde se encuentra
el objeto para posteriormente, recortarlo
de la imagen RGB:
[Y,X] = find(binaryimagen == 1); %obtenemos las
%cordenadas de los pixeles blancos
%obtenemos alto y ancho en pixeles
x1 = min(X);
x2 = max(X);
y1 = min(Y);
y2 = max(Y);
ancho = x2 - x1;
g = snapshot (:,:,2);
b = snapshot (:,:,3);
a=18;
alto = y2 - y1;
%Obtenemos la region deseada de la imagen original
objeto = imcrop(snapshot,[x1 y1 ancho alto]);
justBlack
+ g/a + b/a);
Extracción
de=la(r/a
imagen.
Ahora bien, sabemos que los pixeles
pertenecientes al fondo, tendrán valores
más altos en esta nueva matriz que
aquellos pertenecientes al objeto, pero,
por si llegara a haber algún valor alto en
el objeto (por ejemplo algúna zona en
blanco), los separamos aún más
restándole alguna fracción de su
respectivo valor en rojo, verde y azul.
Una vez que tenemos esta imagen,
podemos proceder a binarizarla.
justBlack = (r/a + g/a + b/a);
umbral=0.107;
binaryimagen=m2bw(justBlack,umbral);
Ilustración 15: Objeto (maíz)
Extracción de características.
Con el objeto aislado, de la imagen RGB,
obtenemos sus características para la
formación del vector que representa el
patrón del objeto. Aquí se pueden utilizar
las características que se consideren
relevantes.
8
Para el propósito de este ejercicio, a
manera de ejemplo, consideramos la
entropía de la imagen, la media del valor
de los pixeles en RGB, la desviación
estandar, la proporción entre anchura y
altura y el alto y ancho en centímetros
(tomando un factor alfa de conversión
obtenido experimentalmente).
Con el siguiente código extraemos las
características mencionadas:
media = mean2(objeto);
desviacionStandard = std2(objeto);
parametros=[media desviacionStandard 1]
Clasificación.
Para la clasificación, utilizaremos el
perceptrón simple. La función de
activación, para las pruebas, la podemos
codificar directamente en Matlab.
Pues bien, la tarea ahora es conseguir la
muestra de entrenamiento. Para esto,
podemos tomar varias fotos y aplicar el
procedimiento descrito anteriomente para
la
extracción
de
sus
diversas
características. En realidad, para el
entrenamiento, tomé fotos de 6 objetos
buenos y de 6 objetos malos, con el
código ya expuesto, formé los 12
patrones con los que entrené el
perceptrón. Como los valores entre
distintas
características
son
muy
dispares, hay que normalizarlos. El
procedimiento
más
sencillo
es
simplemente la división de los valores de
cada característica entre su valor
máximo, por ejemplo, suponiendo que
tuvieramos para la característica de la
media los siguientes valores de 4
patrones: 20, 21, 10, 7. Cada uno de
esos valores los deberíamos dividir entre
21 quedando así: 0.952,1, 0.476, 0.35.
Ese mismo procedimiento se debe
aplicar para todas las características y,
una vez formados los patrones, podemos
entrenar el clasificador, en este caso el
perceptrón, para la obtención de los
pesos a utilizarse.
El perceptrón (Perceptron en inglés) fue
el primer modelo de Red Neuronal
Artificial supervisada. Es la más simple
de las Redes neuronales.
Con el perceptrón podemos clasificar
objetos cuando el problema sea distinguir
entre una de dos posibles clases y, que
trazando una línea, plano o hiperplano en
un plano o hiperplano, se puedan
separar perfectamente estas dos clases.
Por ejemplo, supongamos que tenemos
un problema de dos dimensiones (o sea,
dos características) y con dos diferentes
grupos que pertenecen a la clase A y a la
clase B.
Si lo graficáramos, a simple vista
podríamos determinar si el problema es
linealmente separable si es que podemos
trazar una línea que divida a los dos
grupos. En la siguiente imagen se ilustra
este concepto:
En nuestro caso tenemos la siguiente
tabla con los valores de los parámetros
media y desviación estándar de la
obtenidos de la muestra.
Media
Desviación Standard
157.82
83.98
228.84
48.63
202.31
71.67
223.78
58.10
155.60
90.12
200.54
68.51
220.41
43.46
180.23
57.40
202.70
69.72
9
209.16
212.41
187.97
37.63
63.41
61.20
Al graficar lo datos de la tabla obtenemos
la gráfica donde podemos ubicar cada
muestra con su respectivo punto,
tomamos los puntos más significativos de
cada grupo a fin de que establezcamos
dos grupos bien definidos.
100.00
90.00
80.00
d(n) es la salida dada por la Red,
o sea, el 0 o 1 con el que clasificó
al patrón.

z(n)
es
el
vector
del
patrón aumentado, es decir, el
vector del patrón con el elemento
1 del bias.
Cuando aplicamos a la muestra el
algoritmo codificado en MATLAB y
obtenemos una clase opuesta a la
del objeto se ejecuta la regla de
aprendizaje
para
ajustar
los
coeficientes de la recta en el plano.
El siguiente código determina la clase
del objeto:
70.00
60.00
50.00
40.00
30.00
20.00
10.00
0.00
0.00
50.00 100.00 150.00 200.00 250.00
Ilustración 16: Grafica de parámetros de maíz.
Nuestro perceptor tiene la siguiente regla
de aprendizaje:


pmax=[195.38
74.94];
mediaNorm = (media / pmax(1,1));
dsNorm = (desviacionStandard / pmax(1,2));
wactual=[mediaNorm,dsNorm,1];
pesos=wn1;
peso1=pesos(1,1);
peso2=pesos(1,2);
peso3=pesos(1,3);
net = (peso1 * mediaNorm) + (peso2 * dsNorm)
+ peso3;
if(net > 0)
clase = 1;
else
clase = 0;
end
if(clase == 0)
'Malo'
else
'Bueno'
end
w(n+1) es el vector de pesos que
se usará para el siguiente patrón.
5.2. Arduino

w
(n)
es el vector de pesos actual.

η es un escalar llamado razón de
aprendizaje, el cual es un valor
positivo entre cero y uno y se fija
de antemano por uno.

t(n) es la salida esperada, o sea, si
el
patrón
fue
clasificado
previamente como de la clase 0,
t(n) sería 0.
Para la interface entre nuestro
mecanismo y la parte de software
tenemos la placa de Arduino Mega
2560 con la que conectamos vía
serial (COM2) a través del puerto
USB. Adaptamos la parte de potencia
a este.
Configuramos la placa de arduino
para que se comunique vía serial y
10
pueda parar la aplicación mediante el
botón de paro.
Para lo cual
siguiente código:
desarrollamos
void loop()
{
if(Serial.available()>0)
{
band_on=Serial.read();
flag1=1;
}
delay(100);
while(flag1)
{
if(digitalRead(2)==0)
{
if(flag==0)
{
shot=1;
}
flag=1;
}
else
{
shot=0;
flag=0;
}
digitalWrite(statusPin, flag);
el
const int pwmpin = 12;
const int analogPin = A0;
int statusPin=13;
int valPWM=0;
byte band_on=1;
byte shot=0;
byte flag=0;
int flag1=0;
byte actuador=0;
void bandstop()
{
band_on=0;
flag1=0;
Serial.print(band_on);
Serial.print(',');
Serial.print(shot);
Serial.print(',');
Serial.println(valPWM);
}
void setup()
{
Serial.begin(9600);
delay(5);
attachInterrupt(1, bandstop, FALLING);
pinMode(pwmpin, OUTPUT);
analogWrite(pwmpin, valPWM);
}
Después de configurar las entradas
salidas, PWM, entrada analógica y
conexión serial continuamos con el
desarrollo de nuestro programa que
mandara el dato de disparo de
cámara cuando nuestro sensor de luz
detecte el paso de diente. Después
de mandar los datos espera la
respuesta de MATLAB para decidir si
activar o no el actuador.
if(band_on)
{
// lee el potenciometro:
int sensorReading =
analogRead(analogPin);
// mapea el resultado de rango
desde 0 hasta 255:
valPWM = map(sensorReading, 0,
1023, 0, 255);
analogWrite(pwmpin, valPWM);
}
Serial.print(band_on);
Serial.print(',');
Serial.print(shot);
Serial.print(',');
Serial.println(valPWM);
delay(100);
if(Serial.available()>0)
{
//Asignando valor leido en el puerto
actuador=Serial.read();
if(actuador==0){}
else{
digitalWrite(4, HIGH);
delay(500);
}
}
delay(100);
shot=0;
}
analogWrite(pwmpin, 0);
}
11
Conclusión
El control de calidad por visión
artificial, permite inspeccionar el
100% de los productos en forma
rápida y automatizada. Esto nos
permite reducir costos en control de
calidad y aumentar la calidad del
producto.
Actualmente los costos de sistemas
de visión artificial han disminuido,
mientras que las técnicas han
aumentado, la visión artificial es una
herramienta
para
automatizar
procesos de control, supervisión,
manipulación
y
robotización,
asimismo incursionamos en el uso de
redes neuronales básicas, en lugar
del control común.
Referencias WEB consultadas.
 http://www.mathworks.com/pr
oducts/matlab/
 http://www.arduino.cc/es/
 Apuntes de Curso de Control
de
Procesos
por
computadora.
 Prototipo de un selector
automático de materiales y
colores.
Solís
Quisiyupanqui,
Lindembert Hernán
Carpena Del Pozo, María
Julia.
Universidad Ricardo Palma
 Clasification system based on
computer visión
José Porras
Escuela
Profesional
de
Ingeniería Electrónica
Universidad Ricardo Palma
12