Reaxion UTL

Detección de tornillos en ensamble de ECU mediante Python y OpenCV en Raspberry Pi

Screw detection on ECU assembly using Python and OpenCV on Raspberry Pi
Tecnológico Nacional de México / Instituto Tecnológico de Nuevo León


Por: Alejandro Martínez-Lara, Juan Antonio Rojas-Estrada (in memoriam), Rene Sanjuan-Galindo y Miguel Ángel Ochoa-Villegas.

Resumen

El ensamble manual de las tarjetas electrónicas (PCB) para unidades de control electrónico (ECU) re-manufacturadas carece de algún control para el conteo de los tornillos instalados, lo cual ha ocasionado que los defectos no sean detectados antes de que el producto final sea enviado al cliente. Este proyecto propone un sistema de inspección óptica para el conteo automatizado del total de tornillos en las tarjetas después de su ensamble, mediante la implementación de un sistema de visión artificial desarrollado en Python, utilizando la librería OpenCV. La ejecución del código se realiza en un dispositivo Raspberry Pi. El sistema implementado logró un porcentaje de reconocimiento de 81 % de tornillos instalados en las tarjetas.

Palabras clave: Ensamble manual, Inspección automatizada, Python, Sistema de visión.


Abstract

The manual assembly of the printed circuit boards (PCB) for the re-manufactured Electronic Control Units (ECU) lacks a control to count the number of screws installed per unit. This has caused defects which are not detected before the final product is shipped to the customer. This project proposes an optical inspection system to automate the count of the total number of installed screws after the board assembly, by implementing a computer vision system developed on Python, using the OpenCV library. The code for this application will be executed by a Raspberry Pi device. This system achieved an 81 % recognition rate of installed screws.

Keywords: Manual assembly, Automated inspection, Python, Vision system.


Introducción

La visión artificial se ha utilizado en muchas aplicaciones. Un caso particular es la inspección y clasificación de características de objetos, especialmente para reemplazar la visión humana, ya que una máquina puede ser más confiable y consistente a lo largo de un día (en un ambiente de manufactura).

Actualmente, la mayoría de los sistemas de inspección óptica se basan en redes neuronales que no sólo requieren de una gran cantidad de imágenes para ser entrenadas, sino que además son de alto costo1. Estos sistemas requieren gran poder de procesamiento para alcanzar tiempos de ciclo aceptables, e incluso en aplicaciones que cuentan con computadoras sobrecargadas, los resultados se obtienen de manera lenta y el tiempo de desarrollo es largo.

Con mayor rapidez la tecnología se vuelve más accesible y en el caso del módulo Raspberry Pi, las comunidades de desarrolladores y desarrolladoras del mundo se apoyan para acelerar los tiempos de creación de nuevas aplicaciones, así como para explotar el máximo poder que tiene esta plataforma. Raspberry Pi es una plataforma que presenta muchas ventajas, entre ellas la seguridad (al estar construida sobre un sistema operativo basado en Unix), el bajo costo y el poder moderado que presenta.

La remanufactura de tarjetas electrónicas para Módulos de Control Electrónicos (ECM) es un proceso manual. Inicialmente son desensambladas y reparadas a lo largo de una serie de operaciones. Sin embargo, uno de los procesos más críticos para la operación es el ensamble de las tarjetas electrónicas reparadas, ya que es la última oportunidad para poder detectar defectos en las tarjetas. Las fallas de ensamble y los defectos tienen un impacto en la calidad del producto, así como en la reputación de la marca al generarse reclamos de garantía. Se ha encontrado que existen módulos que el cliente recibe pero que fueron ensamblados incorrectamente, específicamente con tornillos faltantes. Estas unidades, al ser expuestas al calor de motores y vibraciones, presentan fallas funcionales debido a que la integridad y estabilidad de la tarjeta electrónica se encuentra comprometida.

El negocio de remanufactura de Unidades de Control Electrónico (ECU) tiene un volumen de producción considerablemente bajo en comparación con la manufactura de producto nuevo. Estos ECU son remanufacturados por una compañía estadounidense de sector privado operando en México, cuyo giro principal es el reúso de materia prima para proporcionar partes de servicio a maquinaria enfocada en construcción y minería. Es por esto que el tiempo de ejecución del código en una Raspberry Pi es suficiente para la aplicación.

El ensamble de estos módulos es manual y no se cuenta con un sistema de control de ensamble para monitorear diversos pasos críticos como la instalación del número correcto de tornillos o la validación de que los tornillos instalados sean del número de parte correcto. Por esto es necesaria la implementación de un sistema de inspección con visión artificial para el conteo automatizado de tornillos instalados en una unidad una vez realizado el ensamble de la misma. Las ventajas esperadas son que el sistema autónomo sea de bajo costo, con mantenimiento mínimo y que también sea escalable y adaptable. Al revisar la literatura se encontraron algunas opciones tecnológicas.

Galan et al2 propone un sistema de visión para identificar y clasificar defectos en superficies de carcasas metálicas. Sin embargo, el hardware utilizado para esta aplicación es caro y elaborado. Esto se debe a que la aplicación busca identificar características de tamaños reducidos en tiempos bajos de procesamiento, los cuales no son requerimientos críticos para el propósito del presente trabajo. En dicho trabajo, los autores reportaron el uso de OpenCV, la cual es una librería muy popular y completa para el desarrollo de aplicaciones de visión artificial, pero finalmente fue desarrollada en Ubuntu Linux. El sistema binariza las imágenes, es decir, las convierte a escala de grises y aplica filtros y algoritmos para convertir las imágenes a solo dos tonos: blanco o negro. Los resultados fueron aceptables, con tiempos de procesamiento bajos al utilizar un GPU (Unidad de Procesamiento Gráfico) dedicado en lugar de un CPU (Unidad Central de Procesamiento) y así mantener un error menor al 12 %.

Por otra parte, Jaffery et al3 desarrollaron un sistema para reemplazar las inspecciones realizadas por un operador en vías de ferrocarril para detectar tuercas y tornillos ausentes. En este caso, se utilizó una técnica de reconocimiento de patrones y la DWT (Discrete Wavelet Transform). El sistema de procesamiento no fue significativamente poderoso, sin embargo, sí fue mucho más que un sistema de Raspberry Pi.

Un enfoque más robusto es propuesto por Johan y Prabuwono4, el cual utiliza una red neuronal artificial para reconocer tornillos y tuercas. Este sistema utilizó MATLAB para procesar las imágenes. Sin embargo, la inspección en línea requiere que los tiempos de cómputo sean rápidos, ya que los objetos a inspeccionar son transportados mediante una banda. Este sistema no sólo inspeccionaba tornillos y tuercas, sino que además los clasificaba. Los autores lograron una tasa de clasificación correcta del 92 %.

Por lo que hace al trabajo de De Ruvo et. al5, ellos desarrollaron una inspección en tiempo real para detección de tornillos con cabeza hexagonal, utilizando un sistema FPGA (Field Programmable Gate Array), el cual se refiere a un circuito integrado que es programado de acuerdo a la aplicación que tendrá en campo, para realizar el procesamiento de las imágenes, además de un algoritmo predictivo.

Así mismo, en la revisión de la literatura técnica sobre este tema, cabe considerar el filtro Canny: un algoritmo desarrollado por John F. Canny en 1986, el cual tiene como objetivo obtener la mejor aproximación de la detección de bordes en una imagen. Este algoritmo es constantemente retomado para mejorar y optimizar. OpenCV, incluso tiene una función predeterminada para la detección de bordes con el método de Canny6. La erosión es una operación morfológica que se aplica a imágenes para engrosar los bordes detectados y utiliza un elemento estructural como máscara7. Sin embargo, este primer prototipo que se hizo no era capaz de detectar automáticamente las ubicaciones de los tornillos en la imagen, ya que no estaba basado en la detección de patrones, ni se contaba con un set de entrenamiento. Viendo esta oportunidad, se tomó la decisión de realizar la migración del código al dispositivo Raspberry Pi en el lenguaje Python debido a la mejora en el tiempo de procesamiento en comparación con MATLAB8 y hacer uso de las capacidades de la librería OpenCV y de la técnica de template matching.

Existen ya implementaciones9 de template matching con múltiples patrones de referencia, sin embargo, en general se corren en equipos con grandes capacidades computacionales. En este caso, siendo una aplicación sencilla, se pueden aprovechar las especificaciones de la Raspberry Pi para la implementación de sistemas de bajo costo y que cambian la perspectiva que se tiene actualmente de este tipo de dispositivos, generalmente asociados a proyectos estudiantiles o de aficionados a la electrónica o informática. También se aprovecha el poder del lenguaje de programación Python. El número de usuarios de este lenguaje de programación ha incrementado en los últimos años debido a su flexibilidad y poder en el desarrollo de librerías específicas que son open source10. De igual manera, OpenCV ha sido aceptado globalmente como un componente esencial en aplicaciones de desarrollo con visión artificial, no sólo para Python, sino también para otros lenguajes de programación.

La técnica de template matching puede hacer operaciones más complejas, adicionales a la detección de objetos en imágenes; también se pueden implementar sistemas de clasificación e incluso generar conjuntos de entrenamiento dinámicos.


Objetivo

Desarrollar un sistema de visión artificial que sea capaz de diferenciar el estado de las tarjetas electrónicas de un ECU de acuerdo al ensamble, sea bueno o malo, con una precisión del 80 % o mayor. Este sistema será basado en Raspberry Pi con un módulo de cámara con resolución de 8 megapixeles.


Materiales y métodos

Sistema para detección de tornillos y software

El sistema propuesto para la detección de tornillos está basado en una Raspberry Pi 3 Modelo B con 1 GB de RAM y un procesador Quad Core 1.2 GHz Broadcom BCM2837 64 bits. El primer prototipo del software se desarrolló en MATLAB. La implementación del código en la Raspberry Pi se hará usando el software open-source Python con la librería OpenCV que permitirá contar con un prototipo de bajo costo, respecto a las opciones disponibles en el mercado.

Captura de imágenes

La captura de las imágenes de las PCB se realizó con una Raspberry Pi Camera v2.1, la cual tiene un sensor de 8 megapixeles con resolución verdadera de 3280 x 2464 y distancia focal de 3.04 mm. En la Figura 1 se observa el hardware utilizado para el desarrollo del proyecto.

Figura 1. Sistema Raspberry Pi 3 Modelo B y Raspberry Pi Camera v2.1. Fuente: elaboración propia.
Cantidad de muestras

Se tomó una muestra de 10 unidades del proceso con los tornillos instalados. Se capturaron las fotografías con la cámara para ser procesadas por el sistema de Python y las funciones de la librería OpenCV.

Implementación de template matching

La técnica de template matching se utiliza para buscar y encontrar incidencias de una imagen patrón o de entrenamiento dentro de otra imagen. En el caso de la implementación de template matching en OpenCV, se utiliza un algoritmo de convolución en imágenes representadas como matrices y compara la imagen de referencia proporcionada como argumento de entrada de la función contra la imagen en la que se desea buscar y encontrar la incidencia de la misma. Estos algoritmos de convolución, en esencia, realizan la multiplicación de los elementos de dos matrices y la suma de los resultados, por lo general para modificar el valor de un pixel en la imagen sobre la que se esté operando11. La función matchTemplate() en OpenCV tiene implementados varios métodos de comparación de imágenes. El método utilizado en esta aplicación es el llamado Método de Coincidencia de Coeficientes de Correlación Normalizados (TM.CCOEFF.NORMED, como se llama en OpenCV).

La representación matemática del método CCOEFF.NORMED está definida por las ecuaciones 1, 2 y 311.

En las ecuaciones anteriores, I representa la imagen de entrada en la que se desea encontrar la imagen patrón. La imagen patrón es T, w y h son el ancho y el alto del tamaño de la imagen respectivamente. Rccoeff_normed representa la imagen que resulta de la operación. El método de correlación normalizado busca hacer coincidir una imagen patrón relativa a su media con una imagen relativa a su media. Esto da como resultado un valor positivo si se encuentra una coincidencia o un valor negativo si no se encuentra una coincidencia y un valor de cero si no existe correlación. Por lo tanto, al ser un método normalizado, los resultados posibles son 1, -1 y 0 respectivamente11.

A la matchTemplate() > se le proporciona además un valor de umbral para diferenciar la coincidencia. Este umbral se utiliza para clasificar si una sección de la imagen es coincidencia o no; tornillo o no. El valor probado fue 0.70, con el que se obtuvieron muchas detecciones de objetos que no son tornillos. Con el valor de 0.80 no se detectan objetos incorrectos, sin embargo, en comparación con el resultado del umbral de 0.75, se detectan menos tornillos en la imagen. Es por esto que se decide utilizar el umbral de 0.75.


Resultados

Generación de set de entrenamiento

El paso inicial fue la generación de un set de entrenamiento para el programa en Python, el lenguaje de programación al que posteriormente se migró el código. Esto consistió en la captura de fotografías tomadas a 4 unidades de ECU de referencia ensambladas correctamente, extrayendo un conjunto de imágenes de cada uno de los 11 tornillos utilizados para el ensamble, formando 44 imágenes de referencia. En la Figura 2 se observa una muestra de los tornillos del set de entrenamiento. Este conjunto de imágenes es el argumento de entrada para la función de código que se encarga de buscar en la imagen de la unidad de prueba la ubicación de los tornillos y que además los identifica visualmente sobre la misma. Se decidió utilizar este conjunto de entrenamiento para mitigar variaciones que ocurran ya sea en la iluminación o en el ángulo en el que se toma la fotografía.

Figura 2. Muestra de 10 tornillos utilizados como imágenes patrón. Fuente: elaboración propia.

A partir del conjunto de entrenamiento de tornillos generado para la aplicación, se realiza una iteración por cada elemento del arreglo que contiene dicho conjunto. Esto es debido a que la función matchTemplate() de OpenCV solo acepta una imagen patrón por ejecución12. Esta es la manera en la que la función se encuentra implementada en OpenCV. Para utilizar múltiples imágenes de entrenamiento se tiene que recurrir a técnicas de programación como la implementación de bucles iterativos. Como segunda parte del código del programa, se itera en otro arreglo que contiene el conjunto de referencia de las perforaciones sin tornillo. De esta manera, se optimiza la detección de los tornillos en la imagen a inspeccionar.

Cada vez que el programa detecta la coincidencia de un tornillo en la fotografía se dibuja un recuadro amarillo alrededor de la coordenada en la que se encontró. Adicionalmente, se presenta un contador y un mensaje para el usuario, en el que se indica si el resultado es de Pasa o Falla.

Se logró inspeccionar visualmente el ensamble de tarjetas electrónicas para detectar tornillos presentes y proporcionar un control para el proceso de ensamble de las mismas. Inicialmente, se buscaba lograr detectar los tornillos ausentes; sin embargo, tras experimentación y variaciones en el proceso (iluminación y posición) se llegó a la conclusión de que es más efectivo inspeccionar los tornillos presentes. En las pruebas realizadas, fue posible controlar la posición, fijando la cámara a un mismo lugar de manera que las fotografías fueran idénticas en posición, sin embargo, la iluminación no fue controlada. En la Figura 3 se observa una de las imágenes de prueba de la tarjeta electrónica ensamblada.

Figura 3. Imagen usada para prueba de algoritmo. Fuente: elaboración propia.

Para comprobar el porcentaje de reconocimiento de la aplicación se utilizó la técnica de validación cruzada conocida como leave one out. Las pruebas se realizaron con un conjunto de 10 imágenes de prueba de tarjetas electrónicas (Unidades 1 a 10). En este tipo de validación, se elimina un dato de entrenamiento por iteración (10 iteraciones por prueba). En la Figura 4 se muestra un diagrama de flujo del algoritmo. Este diagrama se generó para proporcionar una idea a alto nivel del funcionamiento del software. Esto se realizó con dos subconjuntos de entrenamiento: uno de 10 tornillos y uno de 20 tornillos. El propósito de estas pruebas fue identificar si existe una diferencia significativa en el porcentaje de reconocimiento del sistema cuando se incrementa la cantidad de imágenes de entrenamiento. También se midieron los tiempos de ejecución, ya que esta técnica requiere un elevado número de iteraciones del código.

Figura 4. Diagrama de flujo de algoritmo programado en Python. Fuente: elaboración propia.
Tabla 1. Resultados de detección con un conjunto de entrenamiento de 10 tornillos.

Los resultados obtenidos de la primera prueba se muestran en la Tabla 1. En ella se utilizó el conjunto de entrenamiento de 10 tornillos con las 10 imágenes de prueba de tarjetas electrónicas. Se demuestra que en el mejor de los casos se tiene un porcentaje de detección de tornillos presentes en el ensamble de 100 %, mientras que en la unidad 10, que fue el peor caso, se logró un porcentaje de detección de 63.64 % después de haber eliminado el tornillo 4 del conjunto de entrenamiento. El promedio de detección del sistema con este set de entrenamiento es de 87.18 %.

En la segunda demostración se tomó el conjunto de entrenamiento de 20 tornillos para las mismas 10 imágenes de prueba. En la Tabla 2 se muestran los resultados de estas iteraciones; mostrando de nuevo un mejor caso de 100 % con las primeras 4 unidades, mientras que el peor caso se vuelve a presentar en la imagen 10 con el tornillo 4, mostrando porcentaje de detección de tornillos presentes de 63.64 %. El porcentaje de detección del sistema con este set de entrenamiento es de 87.23 %.

Tabla 2. Resultados de detección con un conjunto de entrenamiento de 20 tornillos

En las Figuras 5 y 6 se observan el mejor y peor caso, respectivamente, de detección con ambas pruebas.

Figura 5. Imagen de la detección lograda con mayor éxito. Se muestran 11 casos positivos verdaderos (en amarillo) y 1 falso positivo (en rojo). Fuente: elaboración propia.

Figura 6. Imagen de la detección lograda con mayor éxito. Se muestran 7 casos positivos verdaderos (en amarillo) y 2 casos de falsos positivos (en rojo). Fuente: elaboración propia.

En cuanto a los tiempos de ejecución, a pesar de no ser un sistema especializado, se logra un tiempo promedio de 8.41 segundos cuando se utiliza el conjunto de referencia de 10 tornillos, mientras que al utilizar el conjunto de 20 tornillos se incrementa a 9.63 segundos. Este tiempo se logra, además, al reducir el tamaño de las imágenes de prueba a 480 x 360 pixeles.

La técnica de template matching para detectar varios objetos en un sólo procedimiento incrementa las capacidades de la aplicación, así como los tiempos de procesamiento al realizar el acondicionamiento de la imagen original solamente una vez. La creación de conjuntos de entrenamiento para la aplicación la hace que esta sea más robusta y que la detección de los tornillos presentes sea más confiable y precisa.

Un sistema convencional de redes neuronales para la detección y clasificación de características de objetos13 tiene un porcentaje de reconocimiento del 98.4 % utilizando un procesador de cuatro núcleos a 2.80 GHz y 16 GB de RAM. Otra aplicación14 demuestra un porcentaje de reconocimiento de 80 % utilizando un CPU de doble núcleo a una velocidad de 2.27 GHz y 4 GB de RAM, logrando, además, tiempos de ejecución de 18 milisegundos con imágenes de prueba de resolución de 2048 x 2048. Sin embargo, nuestro sistema, a pesar de no contar con condiciones controladas de iluminación, logra un porcentaje de detección de 87.23 % en tiempos de ciclo aceptables para el ambiente en el que se aplicará su funcionamiento. El porcentaje de reconocimiento de la aplicación con Raspberry Pi es bueno en comparación con sistemas implementados en hardware más robusto, considerando que las características de este dispositivo son de bajo costo.

Conclusiones

Se propone un sistema para la inspección automatizada de tornillos presentes en el ensamble de tarjetas electrónicas. La implementación de este sistema en Raspberry Pi le da un giro innovador al dispositivo de bajo costo al utilizarlo en un ambiente industrial. Se aprovecha la flexibilidad de Python en conjunto con la librería OpenCV para el desarrollo del software de inspección.

Comparando la implementación de este sistema con otras aplicaciones similares, se encuentra que el porcentaje de detección logrado de 87 % se encuentra aceptable, ya que en aplicaciones que hacen uso de hardware especializado y robusto se logran porcentajes menores y mayores.

El ciclo de inspección se logró en un tiempo de ejecución de 60 segundos. Este tiempo de ejecución es suficiente para la aplicación mostrada; sin embargo, este puede reducirse al migrar el sistema a un procesador con mayor velocidad y mayor capacidad de memoria RAM, como podría ser una Raspberry Pi 4 o un ordenador.

Algunas propuestas de mejora para esta implementación son el pre-procesamiento de la imagen con la finalidad de mitigar la iluminación en el área en la que se colocan las unidades, así como la variación de la posición de la cámara. Esto ayudaría a controlar de manera más robusta la detección, no sólo de los tornillos ausentes, sino también de los presentes. De igual manera, el posicionamiento fijo de la cámara ayudaría a que las imágenes sean siempre tomadas en el mismo ángulo y distancia, incrementando aún más la precisión con la que el sistema puede detectar las características buscadas.

Con la implementación de este tipo de aplicaciones en dispositivos Raspberry Pi, se busca promover su desarrollo en sistemas industriales relacionados con remanufactura de tarjetas electrónicas.


Referencias

1. RODRÍGUEZ, Vicente; PINZÓN, Cristian y RANGEL, José Carlos. 3D Mapping System Estimated from 2D for Low-Cost Devices. 2019 7th International Engineering, Sciences and Technology Conference (IESTEC). [En línea]. IEEE, octubre 2019. [Fecha de consulta: 20 de julio de 2020]. Disponible en http://dx.doi.org/10.1109/iestec46403.2019.00124
2. GALAN, Ulises; ORTA, Pedro; KURFESS, Thomas y AHUETT-GARZA, Horacio. Surface defect identification and measurement for metal castings by vision system. [En línea]. Manufacturing Letters, enero 2018. Vol. 15, p. 5–8. [Fecha de consulta: 6 de mayo de 2020]. Disponible en http://dx.doi.org/10.1016/j.mfglet.2017.12.001
3. JAFFERY, Zainul Abdin; SHARMA, Deependra y AHMAD, Nadeem. Detection of missing nuts & bolts on rail fishplate. [En línea]. 2017 International Conference on Multimedia, Signal Processing and Communication Technologies (IMPACT). IEEE, noviembre 2017. [Fecha de consulta: 15 de junio de 2020]. Disponible en http://dx.doi.org/10.1109/MSPCT.2017.8363969
4. JOHAN, Teuku Muhammad y PRABUWONO, Anton Satria. Recognition of bolt and nut using artificial neural network. [En línea]. 2011 International Conference on Pattern Analysis and Intelligence Robotics. IEEE, junio 2011. [Fecha de consulta: 15 de marzo de 2020]. Disponible en http://dx.doi.org/10.1109/ICPAIR.2011.5976889
5. DE RUVO, G., DE RUVO, P., MARINO, F., MASTRONARDI, G., MAZZEO, P.L. y STELLA, E. A FPGA-Based Architecture for Automatic Hexagonal Bolts Detection in Railway Maintenance. [En línea]. Seventh International Workshop on Computer Architecture for Machine Perception (CAMP’05) IEEE, septiembre 2005. [Fecha de consulta: 14 de febrero de 2020] Disponible en http://dx.doi.org/10.1109/CAMP.2005.4
6. XU, Zhao, BAOJIE, Xu y GUOXIN, Wu. Canny edge detection based on Open CV. [En línea]. 2017 13th IEEE International Conference on Electronic Measurement & Instruments (ICEMI) IEEE, octubre 2017. [Fecha de consulta: 6 de mayo de 2020] Disponible en http://dx.doi.org/10.1109/ICEMI.2017.8265710
7. COOKSEY, Erica y WITHERS, Wm. Douglas. Rapid image binarization with morphological operators. [En línea]. 2008. 15th IEEE International Conference on Image Processing IEEE, 2008. [Fecha de consulta: 20 agosto 2020]. Disponible en http://dx.doi.org/10.1109/ICIP.2008.4711930
8. MATUSKA, Slavomir; HUDEC, Robert y BENCO, Miroslav. The comparison of CPU time consumption for image processing algorithm in Matlab and OpenCV. [En línea]. 2012. ELEKTRO IEEE, mayo 2012 [Fecha de consulta: 15 de julio de 2020]. Disponible en http://dx.doi.org/10.1109/ELEKTRO.2012.6225575
9. THOMAS, Laurent S. V. y GEHRIG, Jochen. Multi-template matching: a versatile tool for object-localization in microscopy images. [En línea]. BMC Bioinformatics Febrero 2020. Vol. 21, no. 1. [Fecha de consulta: 6 de mayo de 2020]. Disponible en https://doi.org/10.1186/s12859-020-3363-7
10. Python. Python Developers Survey 2018 Results. JetBrains. [En línea]. [Fecha de consulta: 1 de agosto de 2020]. Disponible en https://www.jetbrains.com/research/python-developers-survey-2018/
11. KAEHLER, Adrian y BRADSKI, Gary R. Learning OpenCV 3: computer vision in C with the OpenCV library. 3ª ed. EE. UU. O'Reilly Media, 2017. 990 p. ISBN-13: 978-1491937990.
12. OpenCV Open Source Computer Vision. Template Matching. [En línea]. Sin año. [Fecha de consulta: 2 de marzo de 2020]. Disponible en https://docs.opencv.org/master/d4/dc6/tutorial_py_template_matching.html
13. SONG, Limei; LI, Xinyao; YANG, Yangang: ZHU, Xinjun: GUO, Qinghua y YANG, Huaidong. Detection of micro-defects on metal screw surfaces based on deep convolutional neural networks. [En línea]. Sensors, vol. 18, no. 11, p. 3709. 31 de octubre de 2018. [Fecha de consulta: 2 de marzo de 2020]. DOI 10.3390/s18113709. Disponible en http://dx.doi.org/10.3390/s18113709
14. ZHONG, Qiusheng, CHEN, Zhong, ZHANG, Xianmin y HU, Guanghua. Feature-based object location of IC pins by using fast run length encoding BLOB analysis. [En línea]. IEEE Transactions on Components, Packaging and Manufacturing Technology. Vol. 4, No. 11. Nov. 2014. [Fecha de consulta: 2 de marzo de 2020]. Disponible en https://ieeexplore.ieee.org/document/6894154


Fecha de recepción Fecha de aceptación Fecha de publicación
12/11/2020 17/08/2021 30/09/2021
Año 9, Número 1. Septiembre - Diciembre, 2021.

Universidad Tecnológica de León. Todos los Derechos Reservados 2013 Licencia Creative Commons