lunes, 20 de febrero de 2012

Vision Detector de fusibles


Muy buenas a todos, en este tutorial de visión os vamos a enseñar a elaborar un programa  capaz de percibir si un componente tiene el fusible roto, así como también rechazarlo en caso de que sus pinzas se encuentren demasiado cerradas.





El proceso es más o menos sencillo. Aquí os pongo lo que será el conjunto de funciones que harán funcionar nuestro programa.





Como veis, de manera resumida es, colocar la adquisición de imagen, buscar un flanco, después un patrón para saber que es nuestra pieza, así como un eje de coordenadas, después un medidor de distancia entre las pinzas, y los dos patrones de los fusibles, tanto en caso de que esté mirando hacia un lado o el otro. Acabamos poniendo un calculador lógico con el cual, en función de la situación aceptará o rechazará la pieza.

Ahora iremos por partes. En primer lugar, como estamos trabajando sobre imágenes, tendremos que dar a la función de “adquisición de imagen” y seleccionar la ruta que os dejo en el recuadro, que es donde está la sucesión de imágenes.






Una vez tengamos nuestra sucesión de imágenes, pasaremos a capturar el flanco izquierdo de la pieza. Esto nos ayudará a situar la pieza, así como también situar los demás patrones de captura. En primer lugar le ponemos nombre, después elegimos la región de interés que os pongo a continuación.






En la segunda pestaña, la de “settings”, diremos que el escaneo se hace de izquierda a derecha. Que vamos de un entorno brillante, a uno oscuro y que busque el primer flanco que encuentre. Solo uno, y no el mejor.  Lo demás no lo tocamos.

Como os enseño en la imagen .







Bueno, ahora podemos hacer que busque el patrón de fusible en forma de S. Recordad que esta función es la de “match pattern”. Elegimos la región de interés  que deseamos y seleccionamos un nombre.
 Entonces nos vamos a la siguiente pestaña, donde nos dirá cual es el patrón que tenemos asignado. 


Os sugiero que pongáis este que yo os muestro.





En la siguiente pestaña le decimos que solo deseamos buscar un patrón, además de esto, debemos elegir el “score” que se asemeja a una especie de puntuación que debe de tener el patrón para ser aceptado. Por tanto cuanto más le demos, más fiel debe ser la imagen para que nos  lo de por válido.






Por último en la parte de “limits” simplemente marcamos un máximo y un mínimo, ya que solo buscamos un patrón como os dije antes.
Una vez hecho esto, ya tendríamos la función de reconocimiento de fusible en forma de “s” hecho.

Bien, una vez nos encontremos aquí, será el momento de colocar un eje de coordenadas, esto facilita bastante el trabajo al programa a la hora de tener que buscar patrones, además, podemos asignar muchas “tomas” de imagen al eje de coordenadas, lo cual nos puede ser bastante útil.

Es muy sencillo, tan solo tenemos que seleccionar la función que dice “set coordinate system”, una vez la seleccionemos, la podremos un nombre, la colocaremos como os enseño yo en la siguiente imagen y la decimos que será tomada en horizontal.





Así tengo puesto yo el eje de coordenadas.






Bien, ahora lo que haremos será contemplar la apertura de las pinzas, de tal manera que, mediante la función “caliper”, podremos determinar cual será el rango de aceptación.
Lo primero que haremos será seleccionar la función, después de colocarla el nombre será el momento de configurarla.

Como os dije antes, marcaremos la casilla que dice “reference coordinate system” para que se centre en función del eje de coordenadas anteriormente colocado.





Pondremos la región en la que vamos a trabajar, yo he puesto esta.








Después pasaremos a la siguiente pestaña de configuración. Aconsejo copiarlo más o menos.





Y después en limits, pondremos tanto una medida máxima como mínima, en la parte inferior nos dice a qué distancia se encuentran ambas pinzas (en pixels), nosotros, en función de esa medida, vamos a crear un rango, de tal manera que, si éste es superior al establecido, nos reconocerá la pieza como errónea.

El rango que he puesto ha sido mínimo de 150 y máximo de 160, por tanto, un rango de 10 píxeles.
Perfecto, ya casi hemos terminado, como hicimos antes con el fusible en forma de “s” , vamos a tenerlo que hacer también en el otro sentido, por tanto con forma de “z”, puesto que también se presenta en el ciclo de imágenes.

Tendremos que ahcer exactamente lo mismo que os enseñé con el patrón en forma de “s”, solo que esta vez, cambiamos el “template” por este que os muestro.





Y por último meteremos un cálculo de booleanos, de tal manera que, podamos configurar si se da el caso de que al captar el fusible en forma de s, nos dé fallo en el “z”, pero nos dé bien en la resolución final.

La función se llama “logic calculator” una vez la encontremos simplemente tendremos que copiar lo que os subo aquí.
Es muy sencillo, tan solo tenemos que ir añadiendo cada uno de los cálculos que hemos hecho anteriormente, en este caso serían el fusible S, Z y la distancia entre pinzas.








Es sencillo, tan solo tenemos que ir eligiendo en la parte de arriba las medidas que queremos que se contemplen, y por último, en función de su estado, determinar la decisión final, metemos las 3 medidas que os he dicho, y configuramos una como tipo “or”, la otra como tipo “and” y la de distancia no ponemos nada. Si todo está bien, la sucesión  solo nos dará fallo en  3 de las imágenes, que son las que os pongo a continuación.
Pinza hacia adentro.






Fusible roto




Fusible en mal estado.






Ya estaría todo en la enrtada para tener un programa capaz de captar si hay fusibles rotos y pinzas demasiado cerradas.


No hay comentarios:

Publicar un comentario