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
© Copyright 2024