Ir al contenido principal

OpenCV - Computer Vision Library

OpenCV es una librería Open Source para la visión artificial o visión por computadora (del inglés computer vision) escrita en C y C++. Corre bajo Linux, Windows y Mac OS X. También se puede utilizar con lenguajes como Python, Ruby, Matlab entre otros.
Esta librería fue desarrollada originalmente por Intel en sus laboratorios de investigación, y fue concebida como una manera de hacer disponible universalmente la infraestructura para la vision artificial.
Con el objetivo de que OpenCV sea utilizada para promover el uso comercial y la investigación, es abierta y libre. Esto quiere decir que puede ser embebida completa o parcialmente en otras aplicaciones sin la obligación de que esas aplicaciones sean abiertas o libres.
Esta librería puede ser encontrada en SourceForge.net donde podrán descargarla o ir a la documentación en línea, la cual es muy completa.
¿Qué se puede hacer con OpenCV? Bueno, las posibilidades solo tienen el límite de quien la utilice, sin embargo algunas de las aplicaciones de esta librería son, principalmente, la detección, reconocimiento y rastreo de objetos.
En este campo de aplicación algunos usos puntuales son por ejemplo la detección de objetos "olvidados" en un aeropuerto, como valijas, bolsas, paquetes, etc. Esto ayuda al personal de seguridad a tomar acciones preventivas contra atentados terroristas. Otro caso muy práctico es la detección de movimiento para sistemas de seguridad en oficinas, bancos, comercios, etc. Se dispone una webcam conectada a una PC y el software con OpenCV es capaz de grabar aquellos frames donde se ha detectado movimiento para que luego el personal de seguridad analice las imágenes para saber quién o qué "anduvo" por el lugar.
Si se realiza una búsqueda en internet sobre el tema verán que otra aplicación muy útil es el reconocimiento de rostros. Parece un concepto muy simple porque nuestro cerebro está preparado para realizar esa tarea desde el momento en que podemos "ver" cuando se es apenas un recién nacido, pero el tema es muy diferente cuando hay que hacer que una computadora realice esa simple tarea.
El reconociento de rostros trae aparejada un gran cantidad de tareas que combinadas logran el objetivo.
Primero hay que "saber" cómo se compone un rostro, qué forma tiene, etc. Parece muy simple ¿no? ... En realidad no tanto.
El software de reconocimiento debe "saber" qué características buscar dentro de una imagen y luego comparar esas características con la imagen para lograr coincidencias y si las hubiere determinar si es o no un rostro. Un software sencillo solo debería considerar que un rostro posee dos ojos, nariz y boca todo circunscripto en una figura geometrica que bien podría ser un círculo o elipse.
Ahora bien, el truco está en que dependiendo del ángulo de la cámara el rostro y todo su "contenido" se deforma, es decir adquiere perspectiva con lo cual el reconocimiento puede complicarse. También debe considerar el tamaño o mejor dicho tiene que poder saber que un rostro pequeño y uno grande siguen siendo rostros no solo porque puede ser el de un niño o el de un adulto sino que puede ser un rostro alejado de la cámara o uno muy cercano.
Las técnicas para el reconocimiento de rostros son diversas, pero todas son un conjunto de fórmulas matemáticas, algunas más complejas que otras.
Bien, ¿para qué podría servir todo esta complejidad para un problema tan simple? sencillo, lamentablemente hay mucha gente que no tiene acceso a la tecnología, por ejemplo a una PC debido a que por algún motivo le es imposible utilizar sus manos ya sea porque le fueron amputadas o por algún tipo de parálisis. Este tipo de software podría ayudar a estas personas.
En un artículo anterior de este blog se ha mencionado un programa que permite manejar el puntero del mouse solamente con la cabeza, puntualmente con la gesticulación del rostro o con el movimiento de la cabeza.
OpenCV es una librería con un potencial muy grande y como se dijo al principio, solo está limitada por quien la utilice.
En próximos artículos se expondrán ejemplos prácticos del uso de esta útil librería.

Comentarios

Entradas populares de este blog

Patrón DAO en PHP (Data Access Object in PHP)

Este patrón es de gran ayuda a la hora de separar la manipulación de datos y acceso a la DB de la lógica propia de la aplicación. Una versión simplificada de este patrón posee tres componentes principales: El acceso a los datos El objeto de transferencia de datos (value object) El cliente que consume esos datos Antes de presentar el diagrama de clases analicemos el problema el cual consiste en encontrar una forma de manipular los datos de manera tal que el modo de acceder a los mismos sea transparente al cliente que los consume. Esto quiere decir que el cliente no tiene la necesidad de conocer cómo se acceden a los datos (SQL, conectores, motor de base de datos, tipo de base de datos, etc.). El objeto de acceso a los datos debe ser capaz de poder proveer lo que el cliente requiera y además el cliente debe poder utilizar cualquier otro objeto de acceso sin que esto afecte su lógica interna asegurando así que el sistema funcionará aún cuando se cambie de motor de base de...

Configurar Wi-Fi en Slackware

Ahora es común tener una notebook pero no lo es tanto el tener un linux en ella y mucho menos tener un Slackware en la notebook. Sin embargo, es posible tenerlo por lo que vale la pena dedicarle unas líneas a la configuración del Wi-Fi. Primero que nada hay que saber cuál es la placa de red inalambrica que posee la notebook, es decir su marca y modelo. Si ya está Linux instalado en la notebook solo se debe ejecutar el siguiente comando para saber cuál es la marca y modelo de la placa de red inalambrica: # lspci Este comando dará como resultado algo similar a esto: 09:00.0 Ethernet controller: Marvell Technology Group Ltd. Unknown device 4354 (rev 12) 0b:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02) En estas líneas se puede observar que la segunda hace referencia a la placa de red inalambrica que posee la notebook, en este caso una Intel PRO/Wireless 3945ABG . Con esta información lo que se debe hacer es buscar cuál es el módulo que se deb...

¿Qué hace un Licenciado en Sistemas?

Muchas veces, conocidos que no son informáticos, me han preguntado ¿qué hace un Licenciado en Sistemas? ...... " Buena pregunta " - sonaba en mi cabeza. Yo sé lo que yo quiero hacer en mi vida profesional pero realmente ¿qué perfil tiene un Licenciado en Sistemas? Es sencillo saber qué hace un médico, un veterinario, un ingeniero civil, etc. Por ejemplo si su perro se enferma ¿a quién llaman? si quieren construir un puente ... ¿a quién llaman? si ustedes están enfermos ¿a quién llaman? Ahora, si necesitan un sistema para su empresa ¿a quien llaman? ... ¿a un Lic. en Sistemas? ¿a un Ing. en Sistemas? ¿a un programador de aplicaciones? ¿a un analista en sistemas? ¿a un consultor informático? o ¿al amigo que se la pasa en internet y que sabe "todo" sobre computadoras e hizo un montón de cursos (word, excel, windows, redes, etc.)? Esta situación se presenta a menudo; es tan confuso que muchas veces hasta los mismos profesionales informáticos o entendidos en la materia ...