Cursos de programación de visión artificial gratuitos

¿A qué llamamos visión artificial o visión por ordenador?

La visión artificial, visión por ordenador o, en inglés, computer vision, es un área multidisciplinar cuya intencionalidad es la de desarrollar métodos automáticos de procesamiento y análisis automático sobre imágenes para llevar a cabo tareas en una gran cantidad de ámbitos. Es multidisciplinar, ya que involucra a varias disciplinas como son la biología, la informática o las matemáticas. Es necesario, básicamente, debido a que los algoritmos convencionales no tienen la capacidad de resolver tareas complejas como la detección y reconocimiento de objetos de interés en imágenes (o, al menos, no proporcionan una metodología potente para hacerlo).

¿Quién la descubrió?

No se puede decir, ni mucho menos, que la visión artificial haya sido descubierta y su evolución tampoco se le puede adjudicar a una sola persona. La visión artificial se ha ido enriqueciendo de diversas disciplinas como son la inteligencia artificial, cuya revolución en los últimos tiempos también le ha afectado positivamente de forma indirecta. Lo que tenemos hoy en día es gracias a múltiples grupos de personas que han desarrollado infinidad de algoritmos que nos permiten resolver diversas tareas críticas en la visión artficial, como es el caso del preprocesamiento de las imágenes (con el suavizado para eliminar ruido y realce de características interesantes de las imágenes), la segmentación o la clasificación de patrones. El estado del arte actual tiene una gran cantidad de trabajos, por lo que a veces es dificíl decidirse por cuál es la mejor estrategia para resolver un problema determinado.

¿Qué son los sistemas de visión artificial?

Un sistema de estas características utiliza los algoritmos de visión artificial para resolver un problema determinado. Estos sistemas pueden ser de todo tipo, ya que podemos ejecutar una implementación de un procedimiento de visión en nuestro propio ordenador, pero también se pueden desarrollar dispositivos hardware específicos para resolver una tarea determinada (por ejemplo, para su aplicación en una tarea muy concreta de un proceso industrial). En definitiva, con un ordenador (e incluso con tu propio móvil) puedes desarrollar perfectamente proyectos de visión artificial si te resulta de interés, ya que los métodos disponibles en la actualidad son múltiples.

¿Qué es la visión artificial industrial?

Este concepto se refiere a las aplicaciones de la visión artificial a la industria, que son muy amplias pero, al mismo tiempo, muy específicas de aquel dominio al que se aplican. Es decir, no es lo mismo diseñar un sistema de visión para reconocer imperfecciones en un tablero de madera que un sistema de seguridad que permita detectar el movimiento de una persona en una imagen. En definitiva, la visión artificial nos ayuda a mejorar, por medio de la automatización, muchos de los procesos de la vida diaria en el ámbito industrial pero, sin duda, también en el ámbito del hogar. La visión por ordenador puede ser muy útil en infinidad de dominios de lo más diversos.

Uno de los ámbitos de los que quizá más se hable cuando se menciona términos como la visión artificial o inteligencia artificial es la robótica. Este es un gran ejemplo de aplicación industrial, ya que la visión artificial resulta imprescindible para que un robot pueda llevar a cabo sus tareas, por medio de algoritmos que le permitan reconocer objetos en una imagen además de conocer su posición y utilizar esa información para realizar cálculos y resolver las tareas que se les encomiendan.

¿Cómo se utiliza la visión artificial?

La visión artificial se utiliza para mejorar ciertos aspectos de un proceso determinado, en el ámbito de aplicación que se quiera. Por ejemplo, se podría desarrollar un sistema automático que, en una cadena de montaje, extraiga una imagen de una pieza determinada, la analice y determine si esa pieza está correctamente montada o, por el contrario, debería ser desechada. En este caso, por ejemplo, lo que se consigue es mejorar la velocidad en un proceso industrial muy concreto. También se podría utilizar, por ejemplo, para analizar la imagen de una hoja y, teniendo en cuenta sus características particulares de forma y color, poder determinar a qué especie de árbol pertenece. Otras aplicaciones de visión artificial las vemos a diario como, por ejemplo, el reconocimiento automático de los caracteres en una matrícula en una foto, el reconocimiento de un código QR cuando alguien le hace una foto o los filtros de imágenes que son tan populares en las redes sociales.

Aunque parezca algo de ciencia ficción y bastante complejo, la visión artificial no difiere demasiado con respecto a programar cualquier otro tipo de sistema. La utilización de las técnicas de visión artificial se limita a un dispositivo de captura (que puede ser una cámara normal y corriente) y un medio digital donde almacenarlo. Una vez almacenado en ese medio digital, por medio de un código de programación se pueden leer esos datos y hacer lo que se considere oportuno con ellos.

¿Cómo funciona la visión artficial?

La visión artificial es muy dependiente del dominio y la modalidad de imagen donde se aplica. Sin embargo, cualquier proceso de visión suele tener un pipeline muy bien definido y común, es decir, un conjunto de pasos y un orden determinado que se debe seguir para resolver un problema. Cuando se habla de este pipeline, se suelen definir los siguientes pasos:

  1. Captura de las imágenes, por medio de cualquier dispositivo necesario para ello, que puede ser desde una cámara muy simple hasta dispositivos mucho más complejos como las cámaras espectrales, los sistemas de ultrasonidos y que utilizan radiación para visualizar el interior de un cuerpo o las cámaras de detección de calor. La visión artificial se puede aplicar sobre un sinfín de modalidades de imagen, por lo que no se debe restringir al ámbito de las imágenes en color convencionales que se pueden sacar con cualquier cámara de lo más sencilla.
  2. Preprocesamiento de las imágenes. Esto es imprescindible ya que todas las imágenes suelen incorporar ruido. Esto se puede deber a un error sistemático, provocado por el hecho de que los dispositivos de captura tienen una precisión limitada y se pueden desviar de la realidad. Sin embargo, lo que suele ocurrir es que, debido a que la realidad es muy compleja, algunas imágenes presentan dificultades para ser analizadas, por lo que necesitan primero pasar por un proceso de mejora, en el que se elimine la información que dificulta los análisis y se realcen aquellos detalles que nos pueden ayudar a mejorar ese análisis.
  3. Segmentación de objetos de interés. En esta fase, una vez que el ruido en las imágenes se ha eliminado o, al menos, reducido, vamos a centrar el foco de forma exclusiva en aquello que nos interesa de la imagen. Esto se consigue eliminando toda aquella información que no nos aporte nada. Por ejemplo, si queremos contar el número de personas en una imagen, nos resultará interesante centrarnos exclusivamente en las personas que aparecen en la imagen. En otras palabras, si tenemos una imagen de la calle de una ciudad, por ejemplo, todo lo que sea un banco, un árbol, un edificio, un semáforo, un coche… debemos eliminarlo, porque no nos aporta nada en el análisis que queremos hacer. Evidentemente, si quisiéramos contar el número de coches, tendríamos que centrarnos en esto y eliminar todo lo demás.
  4. Clasificación o regresión. Por lo general, una vez que nos quedamos exclusivamente con la información que nos interesa, se desea resolver algún tipo de tarea similar a una clasificación o a una regresión. Por ejemplo, un problema de clasificación típico es el de decir si en una imagen hay una cara de una persona o no. Esta clasificación es la más básica, ya que es a nivel de imagen. Sin embargo, podría ser interesante resolver problemas de clasificación más complejos, en los que no solo se dice que una imagen tiene una cara o no, si no que también se dice en qué lugar de la imagen está, de una forma más o menos precisa. Para tener un ejemplo en mente, podemos irnos al caso que se planteaba antes, pero un poco más complejo. Imaginemos que queremos contar coches y personas al mismo tiempo en una imagen. Pues bien, para ello es imprescindible, en primer lugar, identificar qué objetos son coches y qué objetos son personas. Es decir, no llega con solo enfocarnos en esos objetos, si no que además debemos discriminar qué es cada cosa. Esta cuarta tarea suele resolverse con ayuda de la inteligencia artificial y, más concretamente, con diversas estrategias de aprendizaje automático.

Vamos a pensar en el problema de contar coches y personas a la vez como nuestro ejemplo, y vamos a decir qué se podría hacer, a muy grandes rasgos, en cada una de las fases del pipeline antes descrito.

  • Primero, debemos capturar la imagen. En este caso, con una cámara de una resolución decente y unas fotografías sacadas con una calidad aceptable, valdría más que de sobra. Evidentemente, estas imágenes deben representar la realidad sobre la que queremos trabajar (no lo mezclemos, por ejemplo, con imágenes de paisajes bonitos, porque nada tienen que ver con el problema que queremos resolver).
  • Sobre esas imágenes capturadas, el siguiente paso es analizar su calidad y los problemas que pueden tener. Por ejemplo, podría darse el caso de que una persona quedase tapada parcialmente por un árbol y que el algoritmo no la contase. La idea que queremos transmitir con esto es que, antes de ponernos a trabajar a fondo en el problema, primero debemos conocerlo bien en detalle y entender a qué clase de dificultades nos enfrentamos, porque esto afectaría a la efectividad del método propuesto.
  • Una vez conocidos bien los problemas, se realiza una visualización de las imágenes para eliminar aquellas que no tengan la suficiente calidad (por ejemplo, por estar sacadas con una mala iluminación, lo cual hace imposible obtener un resultado correcto) y se aplica un preprocesamiento para mejorar aquellas imágenes que, a nuestro juicio, caracterizan bien la realidad que queremos representar y tienen la calidad suficiente como para trabajar contra ellas.
  • En la siguiente fase, una vez que tenemos las imágenes correctas y con la mejor calidad posible, pasamos a eliminar toda aquella información que no sea de interés. En el caso que presentamos aquí, debemos eliminar todo aquello que no sea una persona o sea un coche. Para eso, existen diversas técnicas de segmentación que nos van a permitir quedarnos con una imagen donde solo aparecerán los objetos que nos resulten interesantes (en este caso, la silueta de los coches y de las personas).
  • Más tarde, podemos coger, por ejemplo, las características de forma de los objetos detectados en la segmentación para identificar si una silueta determinada se corresponde a un coche o a una persona. Una vez hecho esto, contar cuántos objetos hay de cada tipo debería ser una tarea muy inmediata.

Aunque aquí lo describimos como algo muy estructurado y muy sencillo, la realidad es muy distinta. En cada una de las fases, se nos van a presentar multitud de dificultades que van a evitar que los métodos utilizados sean precisos al 100%. Además, no todos los algoritmos que existen en el estado del arte funcionan bien para todos los problemas. Y de aquí siempre viene la eterna pregunta… entonces, ¿qué algoritmos debo escoger para mi problema? La respuesta es que depende. Nadie sabe a ciencia cierta si una estrategia va a funcionar bien para su problema, aunque es cierto que algunas técnicas funcionan bien para problemas que sean similares.

En general, el proceso de desarrollo de una técnica de visión artificial debe tener en cuenta tres aspectos que son realmente importantes.

  • Cada aplicación de la visión artificial requiere de un sistema específico para ella. Si, por ejemplo, yo deseo tener un sistema que cuenta coches en imágenes, el proceso puede ser muy distinto al de contar personas en imágenes (y claro, esto es todavía más difícil si se quieren hacer las dos cosas al mismo tiempo).
  • Incluso una estrategia que funciona medianamente bien para un tipo de problema determinado, podría fallar en casos puntuales de sse mismo problema. Nunca vas a conseguir sistemas infalibles, solo sistemas que funcionen mejor o peor. Para determinar esto, existen también muchas estrategias para validar los métodos que se plantean.
  • La única forma de probar si un método funciona bien o mal es por medio de la prueba y error. Este es el único modo de certificar si el método A funciona mejor que B o viceversa.

Cabe destacar, finalmente, que la tendencia actual es conseguir que todas las fases descritas anteriormente se haga en un solo paso. Esto se ha conseguido gracias a los algoritmos de Deep Learning, que han visto un enorme auge en los últimos años ya que, además de facilitar los procesos y desarrollar metodologías útiles en mucho menos tiempo, ha mejorado considerablemente la efectividad de la visión artificial en una infinidad de problemas de muy diversos dominios.

¿Cómo programar un software de visión artificial?

La forma de programar un software de visión artificial es muy parecida a la de programar cualquier otro tipo de software. Lo que más cambia es, principalmente, la forma de validar ese software y los tipos de datos que se manejan y que se obtienen. Es decir, si en la programación típica busca leer algún dato del usuario, hacer unas determinadas operaciones e imprimir dicho resultado por pantalla (bien sea en una línea de comandos o en una interfaz gráfica), la programación de un sistema de visión artificial busca leer una imagen, hacer unas determinadas operaciones con ella y devolver un resultado, que puede ser una imagen pero que también puede ser un número (número de personas que se han contado en una imagen) o una etiqueta («esta imagen tiene una cara»).

Un ejemplo de aplicación donde el resultado de un proceso de visión artificial es una imagen puede ser un software que analice una imagen de una pieza que se haya ensamblado en un proceso de una cadena de montaje y que devuelva otra imagen donde las imperfecciones de la pieza aparezcan resaltadas, lo cual podría ser muy útil no solo para saber si la pieza está bien o mal, si no también para conocer la magnitud de la correspondiente imperfección.

Retomando la idea de programar un software de visión artificial, a día de hoy resulta realmente sencillo, ya que existen muchas librerías que ya implementan gran parte de los métodos disponibles en el estado del arte y que se pueden utilizar por medio de funciones fáciles de usar. En otras palabras, actualmente resulta muy sencillo desarrollar un método de visión artificial ya que, por lo general, no es preciso realizar la implementación de ese método a menos que se quiera hacer algo diferente a la implementación original o resulte deseable desarrollar un nuevo algoritmo.

Estas librerías están disponibles para los principales lenguajes de programación de propósito general como es el caso de C, C++, Java o Python. Una de las librerías más conocidas en este ámbito es OpenCV, disponible en esos tres lenguajes, pero también existen otras como Scikit-Image, ITK o Simple ITK. Estas librerías no disponen de implementaciones para Deep Learning. Para estos casos, es preciso utilizar otras librerías creadas para tal fin como ocurre con Torch (y la implementación de PyTorch para Python) o Tensorflow. Una de las grandes ventajas de estas librerías es que permiten trabajar de una forma intuitiva con GPUs para acelerar los procesos de cálculo.

¿Cómo hacer visión artificial?

Por tanto, si te preguntas cómo puede uno dedicarse a hacer visión artificial, hoy en día es tan sencillo como coger tu ordenador, instalar el software apropiado (principalmente, las librerías que se necesitan y las herramientas de desarrollo para trabajar con los lenguajes utilizados) y ponerte a codificar. Eso sí, antes de nada debes pensar bien en qué problema quieres resolver y qué conjuntos de imágenes necesitas, ya que puedes obtener esas imágenes por tu cuenta o acceder a bancos de imágenes públicos disponibles en Internet.

En el caso de que te interese, en nuestra web proporcionaremos una serie de tutoriales sobre librerías de visión artificial como es el caso de OpenCV o Scikit-Image, que nos permiten desarrollar los principales procedimientos necesarios en el ámbito, como lo son las funciones básicas de trabajo con imágenes (lectura y visualización, por ejemplo), el preprocesamiento de las imágenes (suavizado y realzado de detalles para la mejora de la imagen, por ejemplo), la segmentación, la extracción de características o la detección y reconocimiento de patrones en una imagen. En este sentido, queremos proporcionar un sitio web en español que incluya tutoriales de esas librerías que te indicamos con anterioridad.

Para que puedas seguirlo de la mejor forma, nos encargaremos de organizar correctamente los contenidos de la forma que es necesaria, comenzando desde los primeros pasos pasando poco a poco a cosas más complejas y de mayor utilidad. Además, expondremos los contenidos de una forma amena para que los puedas seguir fácilmente y hacerte la vida más sencilla. ¡Siéntete libre de leer y releer nuestros contenidos!

A pesar de todo, ten en cuenta que no vas a tener todos los contenidos disponibles desde el primer momento, ya que la página todavía se encuentra en construcción. Sin embargo, si lo deseas, podrás ir mirando los diferentes posts que vayamos creando en caso de que ya te resulten de interés. Por otra parte, si echas algún contenido en falta en los diferentes temarios que te proporcionamos, puedes hacernos llegar un comentario desde ya para tenerlo en cuenta y así realizamos los cambios en caso de que lo consideremos oportuno.

¡Tu opinión cuenta!

Nos gustaría saber si quieres estar al tanto de todos los tutoriales que subamos a nuestra web, para lo cual puedes cubrir la siguiente encuesta. En todo caso, si nuestro curso te parece interesante, quédate con nuestra dirección web.

¿Quieres que creemos un newsletter para que puedas estar al tanto de nuestros nuevos posts?

Cargando ... Cargando ...

Tutorial de OpenCV en español

En este apartado, te mostramos los diferentes bloques que conforman el curso de OpenCV. Las secciones están todavía en construcción, pero puedes ir viendo las que están disponibles en el caso de que te interesen. A continuación, te hacemos un resumen de qué trata cada una de las secciones.

Bloque 0: Lectura y visualización de imágenes

En este bloque, vas a aprender las principales funciones para trabajar con imágenes, como son las de lectura, visualización y almacenamiento. Estas funciones son imprescindibles para poder trabajar con las imágenes que trates en cualquier problema. Además, también te enseñaremos a utilizar otras funciones muy importantes y que resultan muy útiles en el contexto de la visión artificial como, por ejemplo, la obtención y visualización de un histograma.

Bloque 1: Mejora de la calidad de las imágenes

Como primer paso, una vez se han leido las imágenes, debemos destacar la necesidad de mejorar la calidad de las imágenes antes de aplicarles cualquier método de análisis, ya que siempre suelen contener ruido que puede perjudicar seriamente a su calidad.

Bloque 2: Segmentación de imágenes

Una parte fundamental para la detección y reconocimiento de objetos es la segmentación de elementos de interés dentro de una imagen. Existen diferentes métodos para tal fin y no todos funcionan bien en todos los problemas. En este bloque te enseñaremos a utilizar los algoritmos más comunes en el contexto de la segmentación de imágenes digitales.

Bloque 3: Operadores morfológicos

En ocasiones, puede ser interesante aplicar ciertas operaciones de mejora de las imágenes que tienen que ver con la forma de los objetos. En este bloque, te enseñaremos a utilizar los principales métodos de filtrado morfológico.

  • Parte 1. Dilataciones, erosiones, aperturas y cierres.
  • Parte 2. Transformadas Top Hat y Bottom Hat.