UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA PROYECTO FIN DE CARRERA

Tamaño: px
Comenzar la demostración a partir de la página:

Download "UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA PROYECTO FIN DE CARRERA"

Transcripción

1 UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA PROYECTO FIN DE CARRERA Captura y filtrado de vídeo desde fuentes RTSP/RTP Rafael Cabanillas Carrillo Junio, 2008

2

3 UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA Departamento de Informática PROYECTO FIN DE CARRERA Captura y filtrado de vídeo desde fuentes RTSP/RTP Autor: Rafael Cabanillas Carrillo Director: Francisco Moya Fernández Junio, 2008

4

5 TRIBUNAL: Presidente: Vocal 1: Vocal 2: Secretario: FECHA DE DEFENSA: CALIFICACIÓN: PRESIDENTE VOCAL 1 VOCAL 2 SECRETARIO Fdo.: Fdo.: Fdo.: Fdo.:

6 c Rafael Cabanillas Carrillo. Se permite la copia, distribución y/o modificación de este documento bajo los términos de la licencia de documentación libre GNU, versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation, sin secciones invariantes. Puede consultar esta licencia en Este documento fue compuesto con LATEX. Imágenes generadas con OpenOffice.

7 Resumen Existe un gran número de cámaras de vídeo que transportan su señal a través de la red. Sería una buena idea poder utilizar técnicas de tratamiento y filtrado de imágenes para poder procesar este tipo de señales de vídeo. En este proyecto se propone un marco de trabajo que permita capturar la señal de vídeo procedente de la red, y en particular, de flujos RTSP/RTP, y una vez capturada poder realizar cualquier tipo de tratamiento de imágenes. Dentro de estas técnicas de tratamiento de imágenes, se ha puesto gran empeño en utilizar técnicas basadas en la visión por computador que permitan diferenciar entre distintos gestos y signos que se realicen con las manos.

8 Abstract There is a wide number of video cameras which transmit their signal through the net. It would be an interesting idea to be able to use image processing and filtering techniques in order to process this type of video signals. This project intends to propose a framework which allows capturing the video signal from the net, and in particular, from RTSP/RTP streams. Once the signal has been captured it will be possible to carry out any type of image processing. Within these image processing techniques, a great emphasis has been placed on the use of techniques based on computer vision that make it possible to distinguish between different gestures and signs made with the hands.

9 A Mamá y Papá. Porque dos no es igual que uno más uno

10 Agradecimientos Necesitaría muchas líneas para agradecer a todas las personas que han contribuido, de una manera u otra, para que llegue hasta aquí; como el espacio es reducido espero que los no incluidos lo entiendan. A Francisco Moya por sus grandes ideas, su ayuda y su apoyo. A mis padres, porque sin ellos nunca hubiera podido conseguirlo. A Amanda, gracias, por haber venido a abrigarme el corazón. A Lara y Amparo por ser las mejores hermanas del mundo. A Iñaki y Manolo por su compañía y amistad en este largo viaje. A mis compañeros del grupo Arco por cederme un sitio donde realizar este proyecto. A Gorka, Jose, Adri, Matas, Raul y De la Cruz por formar una gran familia en tierras escandinavas. A Pedro, por estar siempre cuando lo necesito. Sin todos vosotros esto nunca hubiera sido posible. Muchas gracias a todos.

11

12 Índice general Índice de figuras Índice de cuadros III V 1. Introducción Motivación Proyecto Hesperia Justificación del trabajo Estructura del documento Objetivos del proyecto Objetivo principal Objetivos secundarios Antecedentes, Estado de la Cuestión Introducción Conceptos de los protocolos de transmisión de vídeo RTSP RTP Herramientas de captura de vídeo RTSP/RTP Introducción Librerías RTP Codecs de audio y vídeo Visión por computador y procesamiento de imágenes Introducción Aplicaciones Etapas de un sistema de visión por computador OpenCV Bazar Gandalf ARToolKit VXL NeatVision Herramientas comerciales I

13 ÍNDICE GENERAL II 4. Método de trabajo Introducción Fase de análisis y requisitos Análisis de Herramientas Herramientas de tratamiento de imágenes y visión por computador Descripción de cada caso de uso Fase de diseño Capturar la señal RTSP/RTP Dividir la señal en frames Filtrado de cada frame por separado Rehacer la señal Enviar la señal Mostrar el vídeo Visión general del sistema Fase de implementación Capturar la señal RTP/RTSP Dividir la señal en frames Filtrado de cada frame por separado Rehacer la señal Enviar la señal Mostrar el vídeo Resultados Introducción Resultados del proceso de captura Eficiencia al realizar la captura Posibilidad de trabajo distribuido Resultados del clasificador de Manos Resultados en la detección de gestos Eficiencia Interacción con el computador Conclusiones y Propuestas Conclusiones Líneas de investigación abiertas Detector de gestos Detector de manos Movimiento de cámaras Axis A. Manual de usuario 131 A.1. Instalación A.2. Ejecución Bibliografía 134

14 Índice de figuras 1.1. Uso de la aplicación como cámara virtual Visión global de la aplicación Uso de RTSP de los protocolos TCP y UDP Proceso RTSP Encabezado de un paquete RTP Envio y recepción de paquetes con Java.net.RTP Visión General VLC Resonancia magnética (izquierda) e imagen binaria (derecha) resultado de cambiar el valor de los pixels Vehiculo robot Stanley desarrollado en la Univeridad de Stanford Etapas de la visión por computador Funcionamiento de un filtro Ecualizado del histograma sobre una imagen: (arriba) imagen original con su correspondiente histograma; (abajo) ecualizado del histograma Segmentación de una imagen en color Dependencias de una aplicación desarrollada con ARToolkit y otras librerías Proceso de ARToolKit Distintos tipos de formatos para representar una imagen en ARToolKit Diagrama de bloques desarrollado dentro de NeatVision Ejemplo de funcionamiento de WiT Fases de desarrollo Vista funcional de la aplicación Diagrama de análisis del caso de uso Capturar la señal RTP/RTSP Diagrama de análisis del caso de uso Dividir la señal en frames Diagrama de análisis del caso de uso Filtrado de cada frame por separado Diagrama de análisis del caso de uso Rehacer la señal Diagrama de análisis del caso de uso Enviar la señal Diagrama de análisis del caso de uso Mostrar el vídeo Captura de la señal de vídeo a través de VLC Diagrama de secuencia del caso de uso Capturar la señal RTP/RTSP De picture t a IplImage Diagrama de secuencia del caso de uso dividir la señal en frames III

15 ÍNDICE DE FIGURAS IV Proceso del filtro de detección de gestos Diagrama de secuencia del caso de uso filtrado de cada frame por separado Diagrama de secuencia del caso de uso rehacer la señal Diagrama de secuencia del caso de uso enviar la señal Diagrama de secuencia del caso de uso mostrar vídeo Diseño general de la aplicación Arquitectura general de la aplicación Plano de una picture t Etapas para realizar el clasificador de manos Ejemplo de la muestra de imágenes negativas utilizadas Ejemplo de las imágenes positivas utilizadas Ejemplo de la muestra Ejemplo de posibles gestos Proceso de cambios de color si no hay cambios en la imagen Proceso de gesto Ejemplo de imagen patrón que representa cerrar el puño y mover el dedo índice Tiempo obtenidos en la medidas realizando la conversión(azul) y sin realizar la conversión (rojo) Arquitectura distribuida: unión de flujos de vídeo Imagen panorámica a partir de las fuentes de 3 cámaras Arquitectura distribuida: Filtrado por separado Arquitectura distribuida: Filtrado por separado con la misma señal de vídeo Imágenes resultado del test del clasificador Imágenes resultado del test del clasificador con falsos positivos Gesto Gesto Lenguaje de signos A.1. Interfaz de la aplicación A.2. Interfaz de la aplicación cuando se reproduce un flujo de vídeo

16 Índice de cuadros 3.1. Descripción de los componentes principales de IplImage Comparativa de las librerías RTP Comparativa de las herramientas de codificación y decodificación Comparativa de las librerías de visión por computador Comparativa de las librerías de visión por computador (II) Descripción textual del caso de uso Capturar la señal RTSP/RTP Descripción textual del caso de uso Dividir la señal en frames Descripción textual del caso de uso Filtrado de cada frame por separado Descripción textual del caso de uso Rehacer la señal Descripción textual del caso de uso Enviar la señal Descripción textual del caso de uso Mostrar el vídeo Elementos más importantes de la estructura picture t Elementos más importantes de la estructura IplImage Elementos más importantes de la estructura plane t Campos del array ImageData Tiempos en us de los 20 primeros frames Resultados de las pruebas del clasificador Resultados de las pruebas realizadas al detector de gestos V

17 Listings 3.1. Ejemplo de envío de datos con ccrtp Ejemplo de recepción de datos con ccrtp Ejemplo de envío de datos con ortp Ejemplo de recepción de datos con ortp Ejemplo de envío de paquetes con Java.Net.RTP Descripción del Plugin Descripción de la estructura vout sys t Extraer imágenes del hilo de vídeo Algoritmo de tranformación de picture t a IplImage Algoritmo de detección de gestos VI

18 Capítulo 1 Introducción 1.1. Motivación 1.2. Proyecto Hesperia 1.3. Justificación del trabajo 1.4. Estructura del documento 1.1. Motivación En los últimos años los sistemas de vídeo han sufrido un gran avance. Se han introducido grandes cambios en el ámbito del vídeo para cubrir las necesidades demandadas por los usuarios. Entre estos cambios se pueden destacar: el aumento de la calidad, los nuevos formatos o las nuevas resoluciones. Además, debido a la mejora de las líneas y redes de telecomunicación han surgido nuevas formas de visualización de vídeo y audio como pueden ser: Vídeo bajo Demanda (VOD): En el que se permite al usuario el acceso a contenidos multimedia a través de la red. Videoconferencia: Comunicación simultánea bidireccional de audio y vídeo entre varios usuarios. Intercambio de vídeos: Varios usuarios pueden compartir vídeos a través de la red. 1

19 1.2. Proyecto Hesperia 2 Por otro lado, una imagen puede aportar mucha más información de la que es visible por el ojo humano, por lo que existen cada vez mejores sistemas basados en la visión por computador aplicados a númerosos campos como pueden ser: medicina, seguridad, robótica, trafico, etc. Se aplican técnicas complejas que permiten al usuario la extracción de información a partir de una imágen. Sería muy interesante poder unir estos dos aspectos, es decir, aplicar técnicas de tratamiento de imágenes y visión por computador sobre el elevado número de contenidos multimedia en la red. Este proyecto viene motivado por esta idea, para poder crear un marco de trabajo que permita el filtrado y extracción de información de los flujos de vídeo a través de la red. Una de las posibles aplicaciones de este proyecto es contribuir en el proyecto Hesperia [17] que se comentará en la siguiente sección Proyecto Hesperia El proyecto Hesperia [17] tiene por objeto el desarrollo de tecnologías que permitan la creación de sistemas punteros de seguridad, vídeo vigilancia y control de operaciones de infraestructuras y espacios públicos. El proyecto surge para dar respuesta a una demanda sostenida a medio y largo plazo, en particular, en países de la Unión Europea y en Estados Unidos. La gestión integrada de seguridad y control de operaciones permitirá la implantación de sistemas rentables que, en este momento, no existen en el mercado. Las tecnologías del proyecto resolverán la seguridad en dos tipos de escenarios: Permitirán gestionar la seguridad y las operaciones de infraestructuras públicas especialmente sensibles, como subestaciones eléctricas, en gas, depósitos de agua o estaciones de telecomunicaciones. Incrementarán de forma sustancial los niveles de seguridad de grandes espacios públicos, como aeropuertos, estaciones de ferrocarril, puertos, centros de ciudades especialmente en zonas peatonales, centros comerciales, etc. Las características a resolver más importantes en este proyecto son las siguientes: Detectar amenazas a ciudadanos e instalaciones.

20 1.2. Proyecto Hesperia 3 Presentar la información del entorno de forma adecuada y fácil de entender por las personas. Garantizar la seguridad en el acceso a la información del sistema. Garantizar la privacidad de las personas. Investigar hechos e incidentes que permitan prevenir futuras amenazas. Proporcionar información síncrona de las operaciones del sistema que permita incrementar el control y mejorar futuras actuaciones. Se utilizarán las siguientes tecnologías para poder resolver los aspectos mencionados anteriormente: Tecnologías de Arquitectura y Sistema: El sistema propuesto es un sistema complejo y distribuido, capaz de analizar la información audiovisual para aumentar la seguridad de las personas y las instalaciones y de operar éstas de forma óptima y fiable. Tecnologías de Visión y Audio cognitivo y de Sistemas Basados en Conocimiento: Dotarán al sistema de la capacidad de poder detectar de forma automática eventos audiovisuales diferentes de lo normal y la indexación automática de secuencias grabadas. Tecnologías de Representación de Contenidos e Interfaz de Usuario: Incluye la presentación de los contenidos audiovisuales y del conocimiento en entornos de alto valor visual y la interacción del usuario con la información en tiempo real. Este proyecto está parcialmente financiado por el CDTI, organismo adscrito al Ministerio de Industria Turismo y Comercio, invirtiendo un 45 % del presupuesto, proviniendo el restante del sector privado. En este proyecto participan las siguientes empresas: Indra Software Labs, Unión Fenosa, Tecnobit, SAC Control, Technosafe, Visual Tools y Brainstorm Multimedia. Por otro lado, están también presentes las siguientes Universidades e instituciones públicas: Universidad de Castilla La Mancha, Universidad de Granada, Universidad de Extremadura, Universidad

21 1.3. Justificación del trabajo 4 Politécnica de Madrid, Universidad de las Palmas, Universidad Politécnica de Valencia, Universidad Politécnica de Cataluña, Centro Superior de Investigaciones Científicas(CSIC) y el Centro Tecnológico del País Vasco (Ikerlan) Justificación del trabajo En este proyecto se pretende realizar un marco de trabajo que permita la utilización de diferentes tipos de filtros de forma sencilla en flujos de vídeos RTSP/RTP [28]. Es decir, realizar una aplicación que capture flujos de video RTSP/RTP que separe y filtre cada imagen por separado, para poder posteriormente recomponer el flujo RTSP/RTP y vuelva a ser enviado a través de la red. Este trabajo está justificado por los siguientes aspectos: Los sistemas desarrollados para la captura y filtrado de vídeo RTSP/RTP no son totalmente eficientes, podemos destacar los siguientes: OpenCV [15]: Librerías para visión por computador desarrolladas por Intel, estas librerías ya poseen un sistema para la captura de vídeo RTSP, pero no es muy eficiente ya que la calidad de la captura de las imágenes es bastante pobre, la recepción del flujo es lento por lo que dificulta el tratamiento de las imágenes en tiempo real y no tiene soporte para el estandar MPEG-4, requisito fundamental para las cámaras del proyecto Hesperia. Existen gran variedad de reproductores que capturan flujos RTSP pero no permiten el tratamiento y filtrado de la señal. Entre estos se pueden destacar Windows Media Player, Real One Player, Winamp, etc. Poder convertir un simple módulo de captura y filtrado de RTSP en una cámara virtual sin modificar el programa. Ya que un usuario puede recibir directamente el flujo RTSP procedente de nuestra aplicación, que es una transformación del flujo original que produce la cámara real.

22 1.4. Estructura del documento 5 Figura 1.1: Uso de la aplicación como cámara virtual Implementación en una arquitectura escalable. En este tipo de servicios se requiere un flujo continuo y sostenido de datos, por lo que el transporte y el tratamiento de los datos se producen de forma simultánea Estructura del documento En el siguiente capítulo del documento se analizará con más precisión la descripción del problema, así como los objetivos perseguidos en este proyecto. En el capítulo 3, se tratarán los trabajos relacionados con este proyecto, así como el estado de la cuestión donde se propondrán las diferentes alternativas encontradas para realizar el proyecto. Posteriormente en el capítulo 4 se explicará tanto el análisis como el diseño del sistema. En el capítulo 5, se muestran los resultados obtenidos en las distintas pruebas que se han realizado sobre el sistema. Finalmente, en el último capítulo se resumirán las conclusiones obtenidas tras la realización del proyecto, incluyendo las posibles mejoras y trabajos futuros que podrían realizarse.

23 Capítulo 2 Objetivos del proyecto 2.1. Objetivo principal 2.2. Objetivos secundarios 2.1. Objetivo principal Como se ha explicado en el capítulo anterior, el objetivo principal de este proyecto es el de realizar un marco de trabajo para capturar flujos de video RTSP/RTP que permita añadir todo tipo de filtros y mecanismos de procesamiento de imágenes. Es decir, realizar una aplicación que permita la captura de un flujo de vídeo procedente de una fuente RTP/RTSP, procesar y tratar cada imagen por separado, para posteriormente rehacer el flujo RTP/RTSP, bien para mostrarlo por pantalla o para ser enviado a otros dispositivos a través de la red. 6

24 2.2. Objetivos secundarios 7 Figura 2.1: Visión global de la aplicación En la Figura 2.1 se puede ver una visión más detallada del proceso de captura que realizará la aplicación, se ha dividido este proceso en 5 etapas que se describen a continuación: 1. La aplicación recibe una señal de vídeo RTSP. 2. La señal es capturada y fragmentada en frames. 3. Los frames son mandados al filtro. 4. Se filtran cada uno de los frames. 5. Se recompone la señal RTSP para ser visualizada o enviada a través de la red. Por lo que a partir de un flujo de vídeo RTSP, se obtendrá otro flujo tras procesar el primero, que nos permitira su visualización y recoger los datos más relevantes en la etapa de filtrado Objetivos secundarios A continuación se describirán con más detalle otros objetivos que se pretenden alcanzar en este proyecto: Detección de caras: Desarrollar algoritmos de filtrado que nos permitan detectar cuando en una cierta imagen existe un rostro humano. Es muy útil la realización de este tipo

25 2.2. Objetivos secundarios 8 de filtrados, ya que nos puede permitir almacenar en una base de datos el rostro de las personas que han pasado por una cierta cámara, incluso se puede procesar la imagen de la cara para compararla en tiempo real con otras imágenes faciales, lo que puede permitir la identificación de personas. Detección de gestos realizados con las manos: Desarrollar algoritmos de filtrado que nos permitan primero detectar si en una imagen hay una mano y si es así diferenciar si está mano esta realizando algun gesto que tenga significado para el sistema. Compatibilidad con MPEG-4: Es un grupo de estándares de codificación de audio y vídeo, así como su tecnología relacionada normalizada por el grupo MPEG (Moving Picture Experts Group) de ISO/IEC. Los usos principales del estándar MPEG-4 son los flujos de medios audiovisuales, la distribución en CD y emisión de televisión. Es un requisito fundamental para el proyecto Hesperia ya que las cámaras desarrolladas para este proyecto utilizan dicho estándar. Tiempo real: La captura y filtrado de vídeo se realizará en tiempo real por lo que este ciclo que se ha explicado en la sección anterior no se realizará para todo el conjunto de la señal, sino que se hará para cada frame del flujo. Es decir, antes de que el frame n de un flujo sea capturado, el frame n-1 ha tenido que ser procesado. Eficiencia: Al ser un sistema en tiempo real, la eficiencia es muy importante ya que se requiere una gran velocidad en la captura y el filtrado de las imágenes para que no exista un gran desfase respecto a la imagen original. Por lo que se va a poner un gran esfuerzo en que el sistema sea lo más eficiente posible, ya que si este tipo de sistemas se quiere integrar en el ámbito de la seguridad se debe poder actuar a tiempo para poder prevenir acciones, no valdría de nada que la aplicación detectara a una persona peligrosa si cuando esto ocurre la persona ya ha cometido el delito. Dar una gestión dinámica de los recursos. Por ejemplo, la memoria, ya que al ser un sistema en tiempo real el buen tratamiento de la memoria es muy importante, porque si se nos van almacenando los frames desperdiciaríamos la memoria y el sistema se colapsaría.

26 2.2. Objetivos secundarios 9 Proporcionar una sencilla instalación del software. Proporcionar un sistema multiplataforma. El sistema debe desarrollarse de tal forma que se permita su ejecución en distintos sistemas operativos y distinto hardware. Proporcionar un sistema basado en estándares abiertos. Así se asegura la portabilidad entre las distintas arquitecturas y sistemas operativos. Desarrollar el sistema utilizando tecnologías libres. Las partes principales de este proyecto se desarrollarán utilizando herramientas de código abierto para garantizar la continuidad del proyecto por la comunidad de usuarios y desarrolladores, el proyecto empleará tecnologías con licencia GPL y su distribución se realizará bajo licencia GNU Public License.

27 Capítulo 3 Antecedentes, Estado de la Cuestión 3.1. Introducción 3.2. Conceptos de los protocolos de transmisión de vídeo RTSP RTP 3.3. Herramientas de captura de vídeo RTSP/RTP Introducción Librerías RTP Codecs de audio y vídeo 3.4. Visión por computador y procesamiento de imágenes Introducción Aplicaciones Etapas de un sistema de visión por computador OpenCV Bazar Gandalf ARToolKit VXL NeatVision Herramientas comerciales 10

28 3.1. Introducción Introducción Como se explicó en el capítulo anterior, el objetivo principal de este proyecto es realizar un framework que permita capturar un flujo de vídeo RTSP/RTP permitiendo el tratamiento de la señal; es decir que permita realizar cambios en el vídeo y extraer algunos datos necesarios de las imágenes. Para realizar estas operaciones se necesitan 2 tipos de herramientas: Herramientas que permitan el tratamiento de flujos RTSP/RTP. Herramientas que permitan el tratamiento de las imágenes y la extracción de datos como pueden ser herramientas basadas en la visión por computador. Que además permitan conseguir los objetivos de detección de caras, manos y gestos. Hay una herramienta que ya posee ambas funcionalidades, ésta es OpenCV y este proyecto no sería necesario, ya que esta herramienta permite capturar y filtrar flujos RTSP/RTP, pero como se ha explicado en el capítulo 1, esta herramienta aunque es muy eficiente con respecto al tratamiento de imágenes y la visión por computador tiene muchas deficiencias con respecto a la captura de flujos RTP/RTSP porque la calidad de la captura de las imágenes es bastante pobre, la recepción del flujo es lento por lo que dificulta el tratamiento de las imágenes en tiempo real y no tiene soporte para el estándar MPEG-4. En este capítulo se estudiarán estos dos conceptos así como las diferentes aplicaciones que permiten realizar estas operaciones Conceptos de los protocolos de transmisión de vídeo RTSP El protocolo de streaming en tiempo real (RTSP) [28], cuyas siglas vienen de su definición inglesa Real-Time Streaming Protocol, establece y controla uno o varios flujos sincronizados tanto de vídeo como de audio. RTSP actúa como un control de red remoto para servicios multimedia. Según el grupo de Internet Engineering task Force, no hay noción de conexión RTSP. En cambio el servidor mantiene la sesión etiquetada por un identificador. En la mayoría de los

29 3.2. Conceptos de los protocolos de transmisión de vídeo 12 casos RTSP usa TCP para datos de control del reproductor y UDP para los datos de audio y vídeo aunque también puede usar TCP en caso de que sea necesario. Durante la sesión RTSP, el cliente puede abrir otras conexiones de transporte con el servidor para afrontar la conexión RTSP. En una conexión RTSP, el servidor mantiene una sesión contínua. Durante la sessión el cliente envía y recibe múltiples peticiones RTSP al servidor. Figura 3.1: Uso de RTSP de los protocolos TCP y UDP El mecanismo de transporte que suele usar RTSP es RTP [29] (Real-time Transport Protocol), que será explicado posteriormente, aunque las operaciones en RTSP no dependen del protocolo de transporte usado. La sintaxis y operaciones de RTSP son similares a las de HTTP por lo que una gran parte de las funcionalidades y extensiones de HTTP pueden ser añadidos a este protocolo. Sin embargo, posee algunas diferencias notables con HTTP: RTSP tiene un protocolo de identificación diferente e introduce un gran número de nuevos métodos. Un servidor RTSP necesita mantener su estado, lo que es totalmente opuesto a HTTP que no tiene estado. Un cliente y un servidor RTSP pueden realizar peticiones. RTSP está definido para usar la ISO Los datos son transportados con un protocolo diferente. Este protocolo soporta las siguientes operaciones:

30 3.2. Conceptos de los protocolos de transmisión de vídeo 13 Recuperación de datos multimedia de un servidor. El cliente puede realizar una petición de la descripción de una transmisión vía HTTP o con algún otro método. Si la transmisión es realizada vía multicast, la descripción contendrá la dirección multicast y puertos que deben ser utilizados por el flujo contínuo. Si la transmisión se va a realizar a un único cliente vía unicast por razones de seguridad, el cliente proporcionará el destino. Invitación de un servidor de datos multimedia para realizar una conferencia: Un servidor media puede invitar a un cliente a unirse a una conferencia existente, tanto para reproducir o grabar un conjunto de la transmisión. Esto es muy usado en aplicaciones de enseñanza distribuida. Añadir datos multimedia a una transmisión existente: Particularmente para transmisiones en vivo, es muy usual que el servidor pueda proporcionar a lo clientes información adicional disponible. Las propiedades más importantes de este protocolo son las siguientes: Extensible: Nuevos métodos y parámetros pueden ser añadidos muy fácilmente. Seguro: RTSP usa los mecanismos de seguridad web, tanto en nivel de transporte como en el protocolo mismo. Todas los mecanismos de autentificación de HTTP pueden ser usados directamente. Independiente del transporte: Puede usar tanto un protocolo de datos (UDP) como un protocolo de stream tal que TCP. Capacidad de utilizar múltiples servidores: Cada flujo de transmisión media puede ser realizado en un servidor diferente. El cliente automáticamente establecerá varias sesiones concurrentes con los diferentes servidores. La sincronización es realizada en el nivel de transporte. Control de dispositivos de grabación: El protocolo puede controlar tanto dispositivos de reporducción y grabación como dispositivos que combinen los dos modos.

31 3.2. Conceptos de los protocolos de transmisión de vídeo 14 Separación del control del flujo y la inicialización de una conferencia: El control del flujo está separado de invitar a un servidor media a una conferencia. El único requisito es que la inicialización de la conferencia se realice con un único identificador de conferencia. Idóneo para aplicaciones profesionales: RTSP soporta edición digital remota. Descripción de la transmisión neutral: El protocolo no impone un tipo particular de descripción de la transmisión. Sin embargo, la descripción debe contener al menos un RTSP URI. Compatible con Proxy y Firewall: Puede ser usado junto con estos dos tipos de aplicaciones. Similar a HTTP: Como se ha explicado, RTSP utiliza algunos conceptos de HTTP por lo que las infraestructuras existentes pueden ser reutilizadas. Esta infraestructura incluye PICS ( Plataforma para la selección del contenido). Control de servidor: Si un cliente puede iniciar un flujo, también tiene que ser capaz de poder detenerlo. Independiente del protocolo: El cliente puede negociar el método de transporte antes de necesitar el flujo multimedia. Cada media stream debe estar representado por un identificador URL RTSP. Las propiedades de la transferencia son definidas en un archivo de descripción. Este archivo puede ser obtenido por el cliente usando HTTP u otros métodos; es decir, no está necesariamente almacenado en el servidor. Se pueden distinguir varios modos de operaciones, entre los más importantes se pueden destacar: Unicast: El flujo es transmitido con el número de puerto elegido por el cliente. Multicast, el servidor elige la dirección: El servidor media elige la dirección y el puerto. Este es el caso típico de transmisiones de vídeo on demand.

32 3.2. Conceptos de los protocolos de transmisión de vídeo 15 Multicast, el cliente elige la dirección: Se da cuando el servidor está participando en una conferencia multicast y por lo tanto la dirección es proporcionada por el cliente en la descripción de la conferencia. El servidor necesita mantener un estado de la sesión para ser capaz de relacionar la respuesta que deber dar. Las peticiones más importantes son: SETUP: Especifica como será transportado el flujo de datos, la petición contiene la url del flujo multimedia y una especificación de transporte, esta especificación típicamente incluye un puerto para recibir los datos (audio o vídeo), y otro para los datos RTCP (meta-datos). El servidor responde confirmando los parámetros escogidos y selecciona las partes restantes, como los puertos escogidos por el servidor. Cada flujo de datos debe ser configurado con SETUP antes de enviar una petición de PLAY. PLAY y RECORD: Una petición de PLAY provocará que el servidor comience a enviar datos de los flujos especificados utilizando los puertos configurados con SETUP. PAUSE: Detiene temporalmente uno o todos los flujos, de manera que puedan ser recuperados con un PLAY posteriormente. TEARDOWN: Detiene la entrega de datos para la URL indicada. Libera los recursos asociados con el flujo. La sesión RTSP debe exitir en el servidor. Otras peticiones menos importantes son: OPTIONS, ANNOUNCE, DESCRIBE, RE- DIRECT y SET PARAMETER. En la figura 3.2 se puede observar el proceso que se lleva a cabo cuando un cliente hace una petición de un flujo multimedia a un servidor. En primer lugar el cliente accede a la url y hace una petición DESCRIBE a un servidor web para que éste le devuelva la descripción de la presentación y el servidor devuelve información que puede incluir la versión de RTSP, la fecha, el número de sesión, el nombre del servidor y los métodos soportados. A continuación el cliente realiza una petición de SETUP al servidor media por lo que se especifican los protocolos aceptados para el transporte de los datos. Si todo es correcto, el cliente podrá hacer una petición de PLAY que informa al servidor que ahora es el momento de comenzar a

33 3.2. Conceptos de los protocolos de transmisión de vídeo 16 enviar datos. Por lo que el servidor manda al cliente flujos de vídeo y audio RTSP. El cliente puede finalizar en cualquier momento la recepción del flujo mediante la petición al servidor de TEARDOWN. Figura 3.2: Proceso RTSP RTP RTP [29] Protocolo de Transporte en tiempo real (Real-time Transport Protocol) define un paquete estándar para el tranposte de vídeo y audio a través de la red. Fue desarrollado por el grupo de transporte de vídeo y audio de IETF [7] renovando en 2003 la versión publicada en Es usado conjuntamente con el protoclo RTSP descrito en la sección anterior para flujos de audio y vídeo como por ejemplo videoconferencias. Son construidas con el protocolo UDP (User Datagram Protocol). Aunque RTP está principalmente diseñado para satisfacer las necesidades de las transferencias multimedia, su uso no está sólo limitado a este campo de aplicaciones.almacenamiento

34 3.2. Conceptos de los protocolos de transmisión de vídeo 17 de datos continuos, simulaciones distribuidas interactivas y control de aplicaciones son funcionalidades que se pueden encontrar también en RTP. De manera general, este protocolo de transporte permite: Identificar el tipo de información transmitida. Agregar marcadores temporales y números de secuencia a la información transmitida. Controlar la llegada correcta de los paquetes a su destino. Los paquetes de difusión múltiple pueden utilizar RTP para enrutar conversaciones a múltiples destinatarios. RTP no tiene un puerto estándar TCP o UDP con el que se comunica. Las comunicaciones UDP son realizadas por un puerto constante y el siguiente puerto libre es usado para las comunicaciones de control (RTCP).El protocolo RTCP se basa en transmisiones periódicas de paquetes de control que realizan todos los participantes de la sesión RTP y es un protocolo de control para el flujo RTP, que permite transmitir información básica sobre los participantes de la sesión y la calidad de servicio. Aunque no hay estándares asignados normalmente es configurado para usar los puertos del rango RTP puede transportar todo tipo de datos con características de tiempo real como pueden ser el audio y vídeo. El hecho de que RTP use un rango de puertos dinámicos hace más difícil el uso de firewalls. Para solucionar este problema suele ser necesario usar un servidor STUN. Entre los muchos tipos de usos que tiene RTP se pueden destacar los siguientes escenarios: Conferencias de audio multicast: Es posible usar los servicios de IP multicast para comunicaciones de voz. Para poder realizar este tipo de comunicaciones se usan 2 puertos, el primero de estos puertos para el envío de datos de audio y el segundo es usado para los paquetes de control (RTCP). La dirección y los puertos son distribuidos a los participantes. Algunas veces por seguridad los datos y los paquetes de control se transportan de forma encriptada. Conferencias de audio y vídeo: Si en una conferencia se usan fuentes de audio y vídeo estas son transmitidas por sesiones RTP separadas. Por lo que para enviar los paquetes

35 3.2. Conceptos de los protocolos de transmisión de vídeo 18 RTP (datos de audio o vídeo) y RTCP (paquetes de control) se usan 2 pares de puertos UDP y 2 direcciones multicast. No hay una relación directa entre las sesiones de audio y vídeo, excepto que el cliente participa en ambas a la vez y deberá usar el mismo nombre para los paquetes RTCP por lo que las sesiones podrán ser asociadas para la sincronización de audio y vídeo usando información de tiempo. Esto permite que algunos de los participantes en la conferencia sólo reciban el medio que ellos elijan. Mezclar y traducir: No todos los clientes quieren recibir los datos media en el mismo formato, ya que en algunas ocasiones estos formatos no son apropiados. Por lo que se pueden mezclar y traducir señales para que sean apropiadas a las necesidades del receptor. Codificación de capas: Las aplicaciones multimedia suelen ser capaces de ajustar la tasa de transmisión a la capacidad de recepción o a la congestión de la red. En el contexto de RTP sobre IP multicast se puede producir a través de varias sesiones RTP cada una en su propio grupo multicast. Los receptores pueden adaptarse uniéndose a uno de estos grupos multicast según su ancho de banda. En la figura 3.3 podemos ver la estructura de los encabezados de un paquete RTP. Se puede definir cada campo del encabezado de la siguiente forma: V: Campo de versión V de 2 bits de longitud. Indica la versión del protocolo (V=2). P: Campo de relleno,1 bit. Si P es igual a 1, el paquete contiene bytes adicionales para rellenar y finalizar el último paquete. X: Campo de extensión X, 1 bit. Si X = 1, el encabezado está seguido de un paquete de extensión. CC: campo de conteo CRSC,4 bits. Contiene el número de CRSC que le sigue al encabezado. M: campo de marcador M, 1 bit. Un perfil de aplicación define su interpretación. Payload Type (PT): Campo de tipo de carga útil, 7 bits. Este campo identifica el tipo de carga útil (audio, vídeo, imagen, texto, html, etc.).

36 3.2. Conceptos de los protocolos de transmisión de vídeo 19 Número de secuencia: 16 bits. Su valor inicial es aleatorio y aumenta 1 por cada paquete enviado. Puede utilizarse para detectar paquetes perdidos. Time Stamp: Marca de tiempo, 32 bits. Refleja el instante de muestreo del primer byte del paquete RTP. Este instante debe obtenerse a partir de un reloj que aumenta de manera monótona y lineal, para permitir la sincronización y el cálculo de la variación de retardo en el destino. SSRC: 32 bits, identifica de manera única la fuente. La aplicación elige su valor de manera aleatoria. SSRC identifica la fuente de sincronización. Este identificador se elige de manera aleatoria con la intención de que sea único entre todas las fuentes de la misma sesión. CSRC: 32 bits, identifica las fuentes (SSRC) que han ayudado a obtener los datos contenidos en el paquete que contiene estos identificadores. Figura 3.3: Encabezado de un paquete RTP

37 3.3. Herramientas de captura de vídeo RTSP/RTP Herramientas de captura de vídeo RTSP/RTP Introducción La captura de un flujo de vídeo RTSP/RTP puede ser realizada con dos tipos de herramientas: Librerías que facilitan la implementación RTSP/RTP. Utilizando aplicaciones de codificador-decodificador de vídeos que soporten este tipo de flujos. El gran problema de utilizar una librería que implemente RTP, es que también será necesario un decodificador/codificador de la señal, ya que con estas librerías es posible capturar una señal RTP pero no decodificarla para que sea mostrada. En esta sección se dará una descripción de las principales herramientas de cada uno de estos grupos Librerías RTP Se describirán a continuación las librerías más importantes para el envío y la recepción de datos con el protocolo de transporte RTP ccrtp ccrtp [4] es un conjunto de librerías de trabajo en C++ para desarrollar aplicaciones basadas en el Protocolo de Transporte en Tiempo Real (RTP) para transporte de audio y vídeo. ccrtp ha conseguido ser un eficiente y flexible marco de trabajo válido para implementar gran parte de las aplicaciones que usen RTP. Y está implementado bajo las últimas especificaciones de RTP descritas en las secciones anteriores. ccrtp está basado en GNU Common C++, aunque la mayor parte de las librerías no son requeridas. C++ proporciona servicios básicos como hilos, sincronización y sockets lo que hace que sea posible implementar una solución completa para el uso de RTP. Sin embargo, a pesar de que ccrtp ofrece facilidades

38 3.3. Herramientas de captura de vídeo RTSP/RTP 21 y abstracción para componentes y aplicaciones que usen RTP, esas aplicaciones generalmente requieren servicios similares para otras tareas. RTP ha sido definido como un protocolo a nivel de aplicación y no como un típico protocolo de transporte en Internet como TCP y UDP. Por esto RTP no suele estar implementado como una capa separada de la aplicación. A consecuencia de esta característica, las aplicaciones RTP ofrecen más adaptación a la distribución de paquetes, procesamiento de reglas, sesiones y otros mecanismos. ccrtp proporciona un marco de trabajo para RTP no siendo simplemente una librería de manipulación RTP. ccrtp trata exclusivamente con el protocolo de transporte de datos sobre RTP. Parámetros como la dirección IP de destino, puertos de transporte, identificador (descritos en la sección anterior), son usados por ccrtp para abrir una sesión RTP y enviar y recibir paquetes. Las aplicaciones multimedia pueden necesitar un protocolo de señales como en nuestro caso RTSP o SIP. Estas funciones no son provistas por ccrtp. Algunos de los rasgos más importantes de ccrtp son los siguientes: Soporte para unicast, multi-unicast y multicast. Sincronización de flujos y contribución entre flujos. Tratamiento automático de funciones RTP. Uso de plantillas para el transporte. Soporte de hilos. Proporciona información sobre el estado. Guarda estadísticas. Tratamiento automático de las colisiones SSRC y detección de bucles. Números aleatorios basados en /dev/urandom. Consideraciones de tiempo. El sistema para enviar y recibir paquetes RTP en ccrtp es muy simple, ya que las aplicaciones no leen directamente los datos de los sockets. Los bloques de datos que quieren ser

39 3.3. Herramientas de captura de vídeo RTSP/RTP 22 enviados son puestos en la cola de transmisión y cuando se reciben bloques de datos llegan a la cola de transmisión. Listing 3.1: Ejemplo de envío de datos con ccrtp 1 RTPSession s ( I n e t H o s t A d d r e s s ( ), ) ; 2 c o u t << Local SSRC i d e n t i f i e r : << s. getlocalssrc ( ) << e n d l ; 3 s. a d d D e s t i n a t i o n ( www. example. com, ) ; / / d e s t i n o 4 s. s e t P a y l o a d F o r m a t ( s t a t i c P a y l o a d F o r m a t ( sptpcmu ) ) ; 5 s. s t a r t R u n n i n g ( ) ; 6 / / Envia l o s d a t o s 7 s. p u t D a t a ( 0, b u f f e r, b u f f e r L e n ) ; En el listing 3.1 se puede observar un pequeño ejemplo de cómo enviar datos usando ccrtp. Simplemente se inicia una sesión RTP con su dirección y puerto, posteriormente se añade el destino y se ponen los datos a enviar en la cola de salida (s). Listing 3.2: Ejemplo de recepción de datos con ccrtp 1 RTPSession s ( I n e t H o s t A d d r e s s ( ), ) ; 2 / / I n i t i a l i z a t i o n. 3 c o u t << Local SSRC i d e n t i f i e r : << s. getlocalssrc ( ) << e n d l ; 4 s. s e t P a y l o a d F o r m a t ( s t a t i c P a y l o a d F o r m a t ( sptpcmu ) ) ; 5 s. s t a r t R u n n i n g ( ) ; 6 c o n s t AppDataUnit d a t a ; 7 d a t a = s. g e t D a t a ( 0 ) ; / / se o b t i e n e n l o s d a t o s 8 i f ( d a t a!= NULL ) 9 / / d a t o s r e c i b i d o s c o r r e c t a m e n t e En el listing 3.2 se puede apreciar un ejemplo de cómo recibir datos, al igual que al enviar se inicia una sesión y se cogen los datos de la cola de recepción que son guardados en data.

40 3.3. Herramientas de captura de vídeo RTSP/RTP ortp ortp [16] es una librería implementada en C para aplicaciones que usen RTP. Soporta tanto Linux como Windows y tiene licencia GNU Lesser General Public License(LGPL). Su utilización es muy sencilla y proporciona un organizador para recibir y enviar paquetes. Los paquetes RTCP o paquetes de control se mandan de forma automática. Entre sus principales carasterísticas se pueden destacar las siguientes: Incluye soporte para múltiples perfiles, por ejemplo el perfil AV que es por defecto. Organizador de envío y recepción de paquetes acorde con su señal de tiempo. El organizador es opcional ya que las sesiones RTP pueden ser no organizables. Soporte de multiplexado de IO, por lo que cientos de sesiones RTP pueden ser organizadas por un único hilo. Algoritmo jitter para adaptar al receptor al rango de reloj del emisor. Soporte para eventos telefónicos sobre RTP. API bien documentada. ortp fue implementado par ser el marco RTP para linphone, un teléfono para Linux. Ahora ortp es usado por otras aplicaciones como por ejemplo Hewlett Packard, OASIS SYSTEMS y Eloquant. A continuación se mostrará un pequeño ejemplo orientativo de cómo enviar y recibir datos usando ortp:

41 3.3. Herramientas de captura de vídeo RTSP/RTP 24 Listing 3.3: Ejemplo de envío de datos con ortp 1 o r t p i n i t ( ) ; 2 o r t p s c h e d u l e r i n i t ( ) ; 3 s e s s i o n = r t p s e s s i o n n e w ( RTP SESSION SENDONLY ) ; 4 r t p s e s s i o n s e t s c h e d u l i n g m o d e ( s e s s i o n, 1 ) ; 5 r t p s e s s i o n s e t r e m o t e a d d r ( s e s s i o n, , ) ; 6 r t p s e s s i o n s e t p a y l o a d t y p e ( s e s s i o n, 0 ) ; 7 s s r c = g e t e n v ( SSRC ) ; 8 while ( cond ) 9 / / se e n v i a n l o s d a t o s 10 r t p s e s s i o n s e n d w i t h t s ( s e s s i o n, b u f f e r, i, u s e r t s ) ; Vemos que para poder enviar datos primero se inicializa el organizador. Posteriormente se crea una nueva sesión y se le asocia la dirección y el puerto. Finalmente se envian los datos. Listing 3.4: Ejemplo de recepción de datos con ortp 1 o r t p i n i t ( ) ; 2 o r t p s c h e d u l e r i n i t ( ) ; 3 s e s s i o n = r t p s e s s i o n n e w ( RTP SESSION RECVONLY ) ; 4 r t p s e s s i o n s e t s c h e d u l i n g m o d e ( s e s s i o n, 1 ) ; 5 r t p s e s s i o n s e t l o c a l a d d r ( s e s s i o n, , ) ; 6 while ( cond ) { 7 while ( have more ) 8 / / se r e c i b e n l o s d a t o s 9 e r r = r t p s e s s i o n r e c v w i t h t s ( s e s s i o n, b u f f e r, 1 6 0, t s,& have more ) ; Para poder recibir datos el procedimiento es muy similar al de enviar, primero se crea el organizador y la sesión y posteriormente se reciben los datos.

42 3.3. Herramientas de captura de vídeo RTSP/RTP JRTPLIB JRTPLIB [9], es una librería orientada a objetos escrita en C++ la cual permite a los desarrolladores usar RTP. Es portable, ya que es compatible con GNU/Linux, Windows y Solaris. Esta librería tiene las siguientes funcionalidades: Enviar y recibir datos usando RTP. Evitar colisiones SSRC. Organizar y transmitir RTCP. El usuario sólo necesita cargar los datos necesarios para que sean enviados y la librería se encargará de dar al usuario acceso a los datos entrantes RTP y RTCP. La librería proporciona varias clases las cuales son de gran ayuda para crear aplicaciones RTP, pero la clase más usada es RTPSession, la cual proporciona las funciones necesarias para enviar y recibir datos RTP UCL common multimedia library La librería multimedia UCL [18] implementa un gran número de algoritmos y protocolos necesarios para las aplicaciones multimedia en C++, entre estos protocolos incluye RTP que es el interesante para este proyecto. Pero no es simplemente una librería para RTP como las descritas anteriormente UCL multimedia, también incluye soporte para: Base64 encoding/- decoding, árboles binarios, números aleatorios, autentificación HMAC, MD5, DES, MBus, SAP y SDP. Es compatible con varias plataformas como: Unix systems (Solaris, Linux, Irix, FreeBSD, MacOSX) y Windows 95/98/NT/XP. El uso del protocolo RTP es muy similar a las aplicaciones descritas anteriormente, es necesario crear una sesión con una dirección y un puerto. Tiene asociado una estructura de datos que es rtp packet, que es donde se contienen los datos que van a ser enviados Java.net.RTP Java.net.RTP [8] desarrollado en la Universidad de Columbia es un paquete que proporciona una implementación independiente en Java que permite el acceso a todos los niveles de

43 3.3. Herramientas de captura de vídeo RTSP/RTP 26 transporte de RTP. Con esta librería se pueden incorporar fácilmente el uso de este protocolo a las aplicaciones Java. Es una librería orientada a objetos donde la clase más importante es la Sesión que encapsula la configuración RTP y RTCP y los procedimientos necesarios. La sesión interactúa con la red y realiza las siguientes acciones: Procesos síncronos: Enviar paquetes RTP. Para realizar está acción simplemente se invoca al método Session.SendRTPPacket(). Procesos asíncronos: Enviar paquetes RTCP y recibir paquetes RTP y RTCP. Las aplicaciones tendrán 3 hilos, el primer hilo se encargará del envío y recepción de paquetes RTP y el segundo y tercer hilo se encargarán del envío y recepción de paquetes RTCP. Realizando el envío de los paquetes en diferentes grupos multicast. En la figrura 3.4 se ilustra este concepto. Figura 3.4: Envio y recepción de paquetes con Java.net.RTP

44 3.3. Herramientas de captura de vídeo RTSP/RTP 27 Listing 3.5: Ejemplo de envío de paquetes con Java.Net.RTP 1 / / C o n s t r u c t a new S e s s i o n o b j e c t 2 r t p S e s s i o n = new S e s s i o n ( , / / M u l t i c a s t G r o u p I P A d d r e s s , / / M u l t i c a s t G r o u p P o r t , / / RTCPGroupPort , / / RTPSendFromPort , / / RTCPSendFromPort ) ; / / bandwidth 8 / / S e t t h e s e s s i o n p a r a m e t e r s 9 r t p S e s s i o n. s e t P a y l o a d T y p e ( 5 ) ; 10 r t p S e s s i o n. setcname ( RTPUser ) ; 11 r t p S e s s i o n. s e t E M a i l ( user@. com ) ; 12 r t p S e s s i o n. S t a r t ( ) ; 13 / / Send a t e s t p a c k e t. 14 r t p S e s s i o n. SendPacket ( S t r i n g ( T e s t S t r i n g ). g e t B y t e s ( ) ) ; En el listing 4.3 se puede apreciar un ejemplo sencillo de como enviar un paquete en java.net.rtp. Se observa que es un mecanismo muy simple, ya que basta con crear una sesión utilizando la dirección multicast y los 4 puertos necesarios para enviar el paquete Codecs de audio y vídeo En esta sección se describirán las aplicaciones más importantes que permiten la captura de flujos de vídeo y audio RTSP/RTP MPEG4IP MPEG4IP [12] es un proyecto que proporciona un sistema estándar para decodificación, streamming, reproducción de audio,vídeo y texto. Para conseguir esto se han utilizado numerosos paquetes de código libre y se han creado nuevos para resolver algunos problemas. MPEG4Ip ha sido probado sobre las siguientes plataformas: Linux, FreeBSD, BSD/OS, Solaris, Mac OS X y Windows. Las características más importantes de esta aplicación son las siguientes:

45 3.3. Herramientas de captura de vídeo RTSP/RTP 28 Soporta múltiples formatos de archivos: avi, mp4, limited.mov,.mpg,.wav, raw aac, raw mp3, raw mp4v, raw.h264. Soporta múltiples vídeo codecs: mpeg-4 (xvid, xvid-1.0), mpeg1/2 (libmpeg3, mpeg2dec), H.261, YUV (i420 raw). Soporta múltiples audio codecs: aac (faad y faad2), mp3, celp, ac3, raw PCM, AMR NB, AMR WB. Soporte para streaming: RTSP, SDP, RTP y mpeg2. Soporte de grabación. En lo relativo a la captura de flujos RTSP, que es lo que concierne a este proyecto, es un proceso bastante sencillo ya que basta con realizar la siguiente operación: $ gmp4player rtsp://myserver.mydomain.com/mycontent.mp4 Es decir, se puede conseguir la reproducción de flujos RTSP simplemente accediendo a su dirección RTSP en la red MPlayer MPlayer [13] es un reproductor de vídeo de código abierto desarrollado en C/C++ con licencia GPL disponible para la mayoría de sistemas operativos. Entre otros se pueden destacar: Linux y otros sistemas Unix, Microsoft Windows y Mac OS X. Reproduce la mayoría de los archivos MPEG, VOB, AVI OGG/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, FLI, RM, NuppelVideo, YUV4MPEG, FILM, RoQ, PVA, soportados por algunos codecs nativos, XAnim, y DLL s Win32. Puede reproducir VideoCD, SVCD, DVD, 3ivx, DivX 3/4/5 e incluso películas WMV. Permite salvar el contenido stream en un archivo. Otra gran característica de MPlayer es el amplio rango de controladores de salida soportados. Funciona con X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, libcaca, DirectFB, y también puede usar GGI y SDL (y de esta manera todos sus controladores) y algunos controladores de bajo nivel específicos de algunas placas (para Matrox, 3Dfx y Radeon, Mach64, Permidia3).

46 3.3. Herramientas de captura de vídeo RTSP/RTP 29 Es un reproductor muy sólido ya que permite reproducir archivos MPEG dañados y archivos AVI incorrectos. Las características más importantes de Mplayer son las siguientes: Codificación desde una amplia variedad de formato de archivos y decodificadores. Utiliza todos los codecs soportados por ffmpeg libavcodec. Codificación/Multiplexación de archivos AVI entrelazados con su respectivo índice. Creación de archivos desde flujos de audio externos. Audio MP3 VBR. Copia de flujos (de audio y vídeo). Corrección de cuadros por segundo. Gran facilidad para añadir plugins. Subtítulos. En lo relativo a los flujos RTSP puede decodificarlos con gran facilidad. Simplemente se debe realizar la siguiente operación: $ mplayer rtsp://direccion rtsp Para codificar estas acciones MPlayer utiliza la librería LIVE555 Streaming Media [10], que permite implementar el cliente RTSP. Las funcinalidades RTSP de MPlayer pueden ser usadas en dos sentidos: MPlayer puede ser usado para visualizar los flujos MPEG/RTP enviados por las aplicaciones usando su correspondiente archivo.sdp. MPlayer puede también reproducir otros rtsp streams, incluido MPEG-4 audio y vídeo. Al ser una aplicación de código abierto se podría modificar su código para poder obtener la señal RTSP y modificarla como se pretende en este proyecto.

47 3.3. Herramientas de captura de vídeo RTSP/RTP VLC VLC [19] media player (inicialmente VideoLAN Client) es un reproductor multimedia del proyecto VideoLAN; es un software de código libre distribuido bajo licencia GPL. Soporta muchos códecs de audio y vídeo, así como diferentes tipos de archivos, además soporta los formatos de DVD, VCD y varios protocolos streaming. También puede ser utilizado como servidor en unicast o multicast, en IPv4 o IPv6, en una red de banda ancha. Utiliza la biblioteca códec libavcodec del proyecto FFmpeg para manejar los muchos formatos que soporta, y emplea la biblioteca de descifrado DVD libdvdcss para poder reproducir los DVDs cifrados. Además VLC tiene soporte para Vídeo4Linux. Figura 3.5: Visión General VLC Soporta también múltiples sistemas operativos como Linux, Microsoft Windows, Mac OS X, BeOS, BSD, Pocket PC y Solaris. Para la captura de stream es una gran solución ya que: Puede ser usado como cliente receptor de stream. Puede ser usado como servidor para mandar stream. Ya que VLC es capaz de mandar en forma de flujo todos los formatos que pueda reproducir.

48 3.4. Visión por computador y procesamiento de imágenes 31 Soporta los siguientes formatos de salida stream: RTP/UDP, RTSP, RTP/DCCP, Raw UDP, Multicast, HTTP y MMSH. Para poder recibir un flujo RTSP en vlc basta con ejecutar: $ vlc rtsp:// Pero las funcionalidades de VLC en cuanto a flujos RTSP no acaban ahí, ya que a parte de actuar como cliente también puede actuar de servidor, esto se puede hacer creando Vídeo On Demand. Primero habrá que ejecutar VLC en modo telnet con una dirección,un puerto y una contraseña: % vlc --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host :5554 El siguiente paso es conectarse a la vlc telnet y crear un objeto VOD ( Video On Demand): new Test vod enabled setup Test input my_video.mpg Ahora ya es posible acceder a este flujo de vídeo, simplemente habrá que conectarse al video on demand que se ha creado y se empezará a reproducir my video.mpg : vlc rtsp://server:5554/test VLC también permite controlar múltiples streaming al mismo tiempo y posee un organizador que permite realizar esta tarea de forma eficiente. VLC permite añadir plugins con total facilidad, lo que podría ser de gran ayuda para este proyecto Visión por computador y procesamiento de imágenes Introducción Hace años el término visión por computador podría sonar a ciencia ficción, pero en las últimas decadas la visión de la computadoras es una realidad. Las máquinas pueden ser construidas para ver. Existen máquinas diseñadas par poder reconocer el ojo humano en escaners de retina e incluso vehículos que son conducidos usando una cámara.

49 3.4. Visión por computador y procesamiento de imágenes 32 El principal objetivo de la visión por computador es tomar decisiones útiles y eficaces sobre objetos reales a partir del filtrado de imágenes. Es necesario construir una descripción del modelo para cada imagen. La visión artificial tiene como finalidad la extracción de información del mundo físico a partir de imágenes, utilizando para ello un computador. Se trata de un objetivo ambicioso y complejo que actualmente se encuentra en una etapa primitiva. Gran parte del cerebro humano está dedicado a la visión. Allan Turing creía que una computadora podría conseguir la suficiente inteligencia para poder comprender escenas. Algunos de estos objetivos son todavía lejanos, pero, sin embargo, en los últimos años ha habido un sorprendente crecimiento de algunas de estas líneas de investigación Aplicaciones Son numerosas las aplicaciones de la visión por computador, a continuación se describirán las más importantes: Biomedicina: Las aplicaciones médicas de la visión por computador son muy numerosas y podemos destacar el análisis de imágenes tomadas por rayos x, análisis de imágenes tomadas por ultrasonidos y la aplicación en los análisis de sangre. Figura 3.6: Resonancia magnética (izquierda) e imagen binaria (derecha) resultado de cambiar el valor de los pixels

50 3.4. Visión por computador y procesamiento de imágenes 33 Identificación: Es un campo importante dentro de la visión por computador ya que nos permite detección e identificación de caras, objetos, identificación de huellas dactilares, etc. Militares: Podemos destacar dentro de este campo la detección y seguimiento de objetos que permite detectar y seguir un objetivo militar, el análisis de imágenes para reconocer el terreno y la aplicación en armas inteligentes. Robótica: Para el guiado de robots industriales y la navegación de robots móviles. En la figura 3.7 se puede observar el diseño de un vehículo que utiliza visión por computador y más concretamente OpenCV ganador del campeonato DARPA Urban donde participan vehículos sin conductor. Figura 3.7: Vehiculo robot Stanley desarrollado en la Univeridad de Stanford Agricultura: Análisis de imágenes de plantaciones tomadas por satélites para poder hacer seguimiento de los cultivos y observar posibles enfermedades en las plantas. Control de Tráfico: Con el uso de la visión por computador se pueden identificar las matrículas de vehículos automáticamente. Otra utilidad es el control de tráfico con semáforos automáticos que según la cantidad de vehículos actúan de una forma u otra. Seguridad: Como ya se ha comentado, ésta es una de las aplicaciones actuales más importantes de la visión por computador entre sus funciones se puede destacar: la vigilancias de edificios, detección de explosivos, etc.

51 3.4. Visión por computador y procesamiento de imágenes 34 Controles de Calidad: Es muy útil para realizar controles de calidad a diferentes productos. Entre otros se pueden destacar: Inspección de contenedores. Inspección de motores. Inspección de cristales. Control de calidad de alimentos. Inspección de soldaduras. Inspección de circuitos impresos. Inspección madera, tela, fundiciones, papel. Verificación de etiquetas Etapas de un sistema de visión por computador El ser humano captura la luz a través de los ojos, y esta información circula a través del nervio óptico hasta el cerebro donde se procesa. Existen razones para creer que el primer paso de este procesado consiste en encontrar elementos más simples en los que descomponer la imagen (como segmentos y arcos). Después el cerebro interpreta la escena y por último actúa en consecuencia. La visión por computador, en un intento de reproducir este comportamiento, se puede definir en varias fases, que se pasarán a describir con más detalle a continuación. Figura 3.8: Etapas de la visión por computador

52 3.4. Visión por computador y procesamiento de imágenes Captura de Imágenes Esta fase, que es puramente sensorial, consiste en la adquisición de imágenes e involucra el proceso de transformación de los estímulos de luz que reflejan los objetos observados y que inciden en los foto-sensores de una cámara de vídeo a valores digitales almacenados en la memoria de una computadora. Los sensores transforman la intensidad de la luz que incide en ellos a cargas eléctricas, generando una señal eléctrica de vídeo similar a la de una videograbadora. Finalmente la señal de vídeo es digitalizada por un convertidor Analógico/Digital que genera una imagen digital interpretable por el ordenador. La imagen digital es esencialmente una transformación bidimensional de números discretos. Normalmente la resolución de una imagen digitalizada es superior a los 512x512 píxeles, donde cada píxel representa un valor binario, del tono de gris o de color de la imagen Preprocesamiento En este subsistema los procesos buscan modificar y preparar los valores de los píxeles de una imagen digitalizada para producir una forma que sea mucho más adecuada para las operaciones subsecuentes. El procesamiento de bajo nivel, como también se le conoce a esta fase, principalmente lleva acabo dos tareas: Mejora de la imagen: Tiene como objetivo incrementar la calidad de las imágenes o enfatizar aspectos de particular interés de las imágenes. Su objetivo normalmente implica cierto grado de juicios subjetivos acerca de la calidad de la imagen obtenida y depende específicamente de la aplicación. Las operaciones más comúnmente realizadas en esta tarea son el ajuste de contraste y el filtrado para eliminación de ruido Reconstrucción de imágenes: El objetivo es recuperar la imagen original después de ser degradada por efectos conocidos, tales como la distorsión geométrica o el desenfoque de la cámara causados por la óptica utilizada o el movimiento de los objetos. Para realizar este preprocesamiento se utilizan filtros, donde un filtro es un mecanismo de cambio o transformación de una señal de entrada a la que se le aplica una función,

53 3.4. Visión por computador y procesamiento de imágenes 36 conocida como función de transferencia, para obtener una señal de salida. En este caso la señal de entrada sería la imagen. Figura 3.9: Funcionamiento de un filtro Se pueden realizar filtros sobre varios domininios, de los que podemos destacar: Operaciones básicas entre píxeles: Son las operaciones que se realizan directamente sobre los píxeles y se pueden clasificar en operaciones aritmético-lógicas y operaciones geométricas. Dentro de las operaciones aritmético-lógicas podemos destacar: Conjunción: Operación lógica AND entre los bits de dos imágenes. Se usa para borrar píxeles en una imagen. Disyunción: Operación lógica OR entre los bits de dos imágenes. Se usa para añadir píxeles a una imagen. Negación: Inversión de los bits que forman una imagen. Se usa para obtener el negativo de una imagen. Suma, resta, multiplicación y división: Realiza alguna de estas operaciones para cambiar el valor de un píxel Entre las operaciones geométricas podemos destacar la traslación, el escalado y la rotación de píxeles. Operaciones sobre el histograma: Se conoce como histograma de los niveles de cuantización de la imagen, o simplemente histograma de la imagen, a un diagrama de barras en el que cada barra tiene una altura proporcional al número de píxeles que hay para un

54 3.4. Visión por computador y procesamiento de imágenes 37 nivel de cuantización determinado. Dentro de estas operaciones se pueden destacar las siguientes: Aumento y reducción de contraste: Se utiliza para ello funciones de transferencia del histograma. Estas funciones corresponden a aplicaciones, que para cada punto del dominio sólo tiene un valor de imagen. Con una función de transferencia que aclare los niveles claros y oscurezca los niveles oscuros, conseguirá sobre el conjunto de la imagen un efecto visual de aumento de contraste. Ecualizado del histograma: Tiene por objetivo obtener un nuevo histograma, a partir del histograma original, con una distribución uniforme de los diferentes niveles de intensidad. Figura 3.10: Ecualizado del histograma sobre una imagen: (arriba) imagen original con su correspondiente histograma; (abajo) ecualizado del histograma.

55 3.4. Visión por computador y procesamiento de imágenes 38 Filtrado espacial:los filtros espaciales son filtros que se realizan directamente sobre la imagen y por tanto en el dominio del espacio. Casi todos los filtros espaciales están basados en la convolución matemática cuya fórmula es: f(x) h(x) = f(x)h(u x)dx (3.1) En teoría de filtros, la función f(x) corresponde a la señal de entrada y h(x) corresponde al filtro que se desea aplicar, denominando a esta última función impulsional. Aunque hay diferentes tipos de filtros espaciales, los más usados son: Filtros de suavizado: El filtrado de suavizado espacial se basa en el promediado de los píxeles adyacentes al píxel que se evalúa. Filtros de obtención de contornos: El cálculo de la derivada direccional de una función permite conocer cómo se producen los cambios en una dirección determinada. Tales cambios suelen corresponder a los contornos de los objetos presentes en las imágenes. Operaciones en el dominio de la frecuencia: Las representaciones en el dominio de la frecuencia, detallan con cuánta frecuencia se repiten ciertos patrones en una imagen, y con ello consiguen representar la información de esa imagen. Esta representación puede ser especialmente útil, ya que teniendo la frecuencia de repetición de patrones se pueden detectar y alterar directamente elementos presentes en las imágenes como el ruido, los contornos o las texturas. Operaciones morfológicas: Se puede emplear la morfología para construir filtros, algunos filtros que la utilizan pueden ser: Eliminación de ruido: Este filtro elimina los objetos de una imagen que tienen un tamaño menor que un elemento estructurante determinado. Extracción de contornos: Este filtro obtiene los contornos de una figura restándole su interior. Relleno de huecos.

56 3.4. Visión por computador y procesamiento de imágenes 39 Adelgazamiento: Esta operación adelgaza los elementos de una imagen hasta que se reducen a un esqueleto interior a la misma Segmentación La segmentación es el estado inicial del proceso de reconocimiento, en donde las imágenes adquiridas son divididas sistemáticamente en regiones o segmentos significativos que cumplen con cierto predicado. El proceso de segmentación no centra su atención en lo que representan las regiones, sino únicamente en el proceso de dividir las imágenes en regiones de cierta uniformidad que corresponden a partes o al objeto completo de la escena analizada. Figura 3.11: Segmentación de una imagen en color Existen varias propiedades que se utilizan en el proceso de segmentación, entre otras la intensidad (los valores de gris), los parámetros de color, los bordes, la textura y el movimiento, de modo que los predicados incluyen cualquiera de estos atributos y son el mecanismo esencial que controla la partición de las imágenes. Entre las muchas técnicas utilizadas en la etapa de segmentación se pueden destacar las siguientes: Segmentación basada en la umbralización: La umbralización es un proceso que permite convertir una imagen de niveles de gris o de color en una imagen binaria, de tal forma que los objetos de interés se etiqueten con un valor distinto al de los píxeles del fondo. La umbralización es una técnica de segmentación rápida, que tiene un coste

57 3.4. Visión por computador y procesamiento de imágenes 40 computacional bajo y que puede ser realizada en tiempo real durante la captura de la imagen usando un ordenador personal de propósito general. Dentro de la umbralización se puede destacar la umbralización fija y la generalizada. Técnicas basadas en la detección de contornos: La segmentación basada en detección de contornos agrupa un gran número de técnicas que usan la información proporcionada por las fronteras de los objetos que aparecen en una imagen. Puesto que se desea encontrar los objetos individuales presentes en una imagen, parece lógico que si se encuentran las fronteras de tales objetos con el fondo se podría segmentar los objetos de la escena general. Dentro de este tipo de técnica, hay 2 métodos que se pueden usar principalmente para detectar contornos: Segmentación basada en las componentes conexas: Se puede plantear detectar los objetos presentes en una imagen sin más que encontrar las componentes conexas de la misma. Esto ocurre cuando los objetos tienen un color uniforme y distinto del fondo, lo que permite asegurar que los contornos del objeto se corresponden con los bordes de la componente conexa. Detección de contornos con filtros de gradiente: Técnicas basadas en el crecimiento de regiones: Determinan zonas dentro de una imagen basándose en criterios de similaridad y proximidad entre los píxeles de la misma. En estas técnicas la homogeneidad (o falta de homogeneidad) entre regiones adyacentes es el criterio utilizado para unir (o dividir) regiones de la imagen. Dicha homogeneidad se puede definir a partir de criterios como: el nivel de gris medio, el color, la forma, etc. El resultado de la segmentación es una partición de la imagen en regiones homogéneas. En general, las técnicas basadas en regiones trabajan mejor en imágenes con ruido. Dentro de estas técnicas se pueden destacar: Unión de regiones: Este procedimiento agrupa píxeles de la imagen formando regiones de similares características. Inicialmente se elige una colección de píxeles de manera aleatoria que actúan como semillas para comenzar el crecimiento. A estos puntos de la imagen se les agrega los adyacentes cuando tienen valores que

58 3.4. Visión por computador y procesamiento de imágenes 41 cumplen algún criterio de homogeneidad con los puntos semilla. Si ocurre esto, pertenecen a la misma región y pasan a tener los mismos valores que los puntos semilla. División de regiones: Es un proceso en cierta forma opuesto al de unión de regiones. Se parte una única región que representa a toda la imagen, y si dicha región no satisface el criterio de homogeneidad establecido, la región inicial se divide, de manera secuencial, en subregiones de las que se estudia su homogeneidad. Otros enfoques para la segmentación: Existen numerosas técnicas de segmentación, aparte de las explicadas hasta ahora, que no pueden ser englobadas estrictamente en ninguno de los tres grupos descritos: Segmentación basada en el color. Segmentación basada en la textura. Segmentación basada en el movimiento Reconocimiento de Características y clasificación Donde se identifican las características que distinguen a cada uno de los objetos que pueden aparecer en una imagen. El resultado de esta etapa es la descripción de los objetos por un vector de sus características inherentes. Las características que normalmente se utilizan para la descripción de los objetos tienen que ver con la forma, ya sea interna o externa de las regiones, su color, textura o incluso su estructura geométrica. Además, la descripción debe ser invariante a la posición, orientación, e idealmente con respecto a la escala de los objetos. Finalmente se determina a qué grupo o clase dentro de un grupo de posibles clases pertenece cada uno de los objetos que aparecen en una imagen. En esencia se utilizan algunas o todas las características de los objetos que se han extraído de las imágenes para tomar una decisión correcta acerca de a qué categoría pertenece el objeto. Los métodos de clasificación más empleados son los estadísticos y sintácticos. Los estadísticos agrupan los objetos mediante discriminantes. Comúnmente se utilizan métodos paramétricos como la Regla de Bayes y no paramétricos como los Discriminantes lineales,

59 3.4. Visión por computador y procesamiento de imágenes 42 Distancia mínima, Aproximación lineal a pedazos (k vecinos más cercanos), etc. Los modelos sintácticos realizan un reconocimiento utilizando gramáticas de formas. Cada patrón se describe totalmente en términos de un conjunto de sub-patrones, los cuales, a su vez, pueden describirse con patrones más simples. Se establece una analogía jerarquizada (como un árbol) entre la estructura de los patrones y la sintaxis de un lenguaje, cuya gramática y métodos de análisis sintáctico se utilizan para clasificar los objetos OpenCV OpenCV [15] (Open Source Computer Vision) es un conjunto de librerías de funciones de programación cuyo uso principal es la visión por computador en tiempo real. Son librerías de código abierto desarrolladas en C/C++ originalmente por Intel. Es multiplataforma y se puede ejecutar bajo Max OS X, Windows y Linux. Está diseñado para poder ser usado conjuntamente con la librería de Procesamiento de Imágenes de Intel (IPL), pero ha extendido posteriormente sus funcionalidades aunque sigue compartiendo el mismo formato de imágenes (IplImage) con IPL Recursos Entre las principales recursos de OpenCV se pueden destacar las siguientes: Manipulación de imágenes como por ejemplo conversión de formatos y copia de imágenes. Entrada de vídeo con cámaras y salida en ficheros de imágenes. Manipulación de vectores, matrices y funciones de álgebra lineal. Estructuras de datos dinámicas como listas, colas y árboles. Procesamiento básico de imágenes entre los que se pueden destacar: filtros, detección de bordes, conversiones de color, operaciones basadas en morfologías, histogramas y pirámide de imágenes.

60 3.4. Visión por computador y procesamiento de imágenes 43 Análisis estructural como por ejemplo : análisis de contornos, transformación de distancias, tranformada de Hough, aproximaciones poligonales. Calibración de cámaras. Reconocimiento de objetos. Etiquetado de imágenes Módulos Dentro de las librerías de OpenCV podemos encontrar 4 módulos bien diferenciados: Módulo cv: Contiene las funciones principales. Módulo cvaux: Funciones auxiliares de OpenCV, también contiene funciones que se encuentran en grado de experimentación. Módulo cxcore: Contiene las estructuras de datos y el soporte para funciones de álgebra lineal. Módulo highgui: Contiene las funciones para programación de interfaces gráficas de usuario Tipos de datos en OpenCV Opencv proporciona tipos de datos básicos para su utilización. A continuación se describirán brevemente los tipos de datos más importantes: IplImage: Es el tipo de datos básico en Opencv. Con este tipo de datos se representan todos los tipos de imágenes con sus componentes y características. En el cuadro 3.1 podemos ver los componentes principales que forman esta estructura.

61 3.4. Visión por computador y procesamiento de imágenes 44 Componente widthstep nchannels TimageData width y height depth Descripción número de bytes entre puntos de la misma columna y filas sucesivas indica el número de canales de color de la imagen puntero a la primera columna de los datos de la imagen anchura y altura de la imagen expresadas en píxeles información sobre el tipo de valor de los píxeles Cuadro 3.1: Descripción de los componentes principales de IplImage CvArr: Es lo que se denomina un metatype, es decir, un tipo de dato ficticio que se utiliza de forma genérica a la hora de describir los parámetros de las funciones. CvArr* se utiliza para indicar que la función acepta arrays de más de un tipo. CvMat: Estructura empleada para operar con imágenes. Es una estructura de datos que se caracteriza porque aparte de almacenar los elementos como cualquier matriz, ofrece la posibilidad de acceder a información adicional que puede resultar de gran utilidad. CvScalar: La estructura CvScalar es simplemente un vector de cuatro elementos, es muy útil a la hora de acceder a los píxeles de una imagen, sobre todo si es una imagen en color. CvPoint: Define las coordenadas de un punto usando números enteros. CvPoint2D32f: Define las coordenadas de un punto usando punto flotante. CvSize: Estructura utilizada para definir las dimensiones de un rectángulo en píxeles Bazar Bazar [3] es una librería para la visión por computador basada en detección de puntos. En particular puede detectar y registrar conocidos objetos planos e imágenes. Contiene también un potente sistema geométrico y fotométrico de calibración de cámaras.

62 3.4. Visión por computador y procesamiento de imágenes Módulos Bazar está compuesto por varios módulos implementados en 2 librerías: Starter: Contiene las estructuras básicas y herramientas matemáticas. Garfeild: Sus funcionalidades principales son detección de puntos clave y unión de puntos. Está diseñado para realizar una rápida detección de objetos planos en una imagen. Realizando esto en un proceso de 2 fases: fase de entrenamiento y fase on-line. Durante la fase de entrenamiento, rasgos de puntos en un modelo de imagen. Y durante la segunda fase se llama a los reconocedores de objetos planos y se establecen las uniones con el modelo de puntos establecido en la fase anterior Gandalf Gandalf [5] es una librería para la visión por computador y algoritmos numéricos escrita en C, lo cual permite desarrollar aplicaciones con una gran portabilidad y que tengan una gran eficiencia cuando se ejecutan. Gandalf ha sido utilizado para desarrollar mokey software para reconocimiento de movimientos desarrollado por Imagineer Systems Ltd en Amsterdam, mokey realiza seguimiento de objetos en movimiento en una secuencia de imágenes. Las características más destacadas del diseño de Gandalf son las siguientes: Uso eficiente de la memoria utilizando estructuras de datos dinamicamente reconfigurables. Enfasis en el soporte de algoritmos numéricos. Representación de imágenes muy flexible y eficiente. Conjunto de operaciones de matrices como trasposición e inversión. Explota las ventajas computacionales y de compilación de los lenguajes C y C++. Se reducen los niveles de abstracción, lo que es apropiado para objetos simples como imágenes y matrices.

63 3.4. Visión por computador y procesamiento de imágenes Módulos Gandalf está dividido en los siguientes paquetes o módulos: Common: Contiene herramientas de propósito general que son usadas por otros módulos. Incluye rutinas para almacenamiento en memoria, listas, funciones numéricas y manipulación de arrays. Linear algebra: Incluye funciones de manipulación de vectores y matrices. Image: Contiene funciones de bajo nivel para creación y manipulación de imágenes que soportan escala de grises, imágenes en color RGB con o sin canales alpha y con varios niveles de profundidad para píxeles. Soporta también vectores en 2 y 3 dimensiones de imágenes. Vision: Contiene funciones muy útiles de visión por computador como pueden ser detección de arcos, líneas y esquinas ARToolKit ARToolKit [2] es una librería software para desarrollar aplicaciones de realidad aumentada. Éstas son aplicaciones que añaden información virtual a la información existente en el mundo real. Una de las dificultades de este tipo de aplicaciones es conocer exactamente dónde está mirando en cada momento el usuario. Para resolver este tipo de problemas AR- ToolKit usa algoritmos de visión por computador que calculan la posición real de la cámara y la orientación relativa de las marcas en tiempo real. Algunas de las principales características de esta herramienta son: Está implementado en C y C++. Es multiplataforma ya que soporta Linux, Windows, Mac OS X y SGI. Una librería multiplataforma de vídeo que incluye: múltiples tipos de entradas, múltiples formatos soportados (RGB/YUV420P, YUV), seguimiento de múltiples cámaras e interfaz de usuario.

64 3.4. Visión por computador y procesamiento de imágenes 47 Detección plana en tiempo real. Funciones de calibrado sencillas y eficientes. Librería sencilla pra graficos basada en GLUT. Renderizado de gran velocidad basado en OpenGL. Soporte de 3 dimensiones para VRML. Soporta otros lenguajes como Java y Matlab. Completo conjunto de ejemplos y documentación. Código abierto con licencia GPL para uso no comercial Módulos ARToolKit es un software ToolKit que aporta funciones predefinidas que pueden ser necesarias para desarrollar un aplicación de realidad aumentada. Pero sus partes pueden ser usadas también por separado para realizar otro tipo de tareas de visión por computador. ARToolKit depende de otras librerías lo que podemos ilustrar en la figura 3.12

65 3.4. Visión por computador y procesamiento de imágenes 48 Figura 3.12: Dependencias de una aplicación desarrollada con ARToolkit y otras librerías. ARToolKit está compuesta por cuatro módulos que se describen a continuación: Módulo AR: funciones de seguimiento de marcas, calibración y colección de parámetros. Módulo Vídeo: Colección de funciones para captura de entradas de vídeo frames. Contiene las funciones de la plataforma de captura SDK. Módulo Gsub: Colección de funciones gráficas basadas en OpenGL y librerías GLUT. Módulo Gsub Lite: Funciones que reemplazan las de la librería anterior por una colección más eficiente de funciones gráficas independientes de otras librerías. En la figura 3.13, se muestra el paso por los diferentes módulos de una aplicación.

66 3.4. Visión por computador y procesamiento de imágenes 49 Figura 3.13: Proceso de ARToolKit Tipos de datos en ArToolKit ARToolKit manipula diferentes tipos de variables. Internamente utiliza variables globales. Se usan diferentes tipos de formatos de imágenes entre sus diferentes módulos. En la Figura 3.14 se muestran todos los diferentes formatos soportados. Algunos formatos sólo están disponibles para algunas plataformas y algunos Hardware. Figura 3.14: Distintos tipos de formatos para representar una imagen en ARToolKit VXL VXL [20] (Vision-something-Libraries) es una colección de C++ librerías diseñadas para el desarrollo e implementación de aplicaciones con visión por computador. Está diseñado por TargerJr y el Image Understanding Environment (IUE) con la intención de crear un sistema rápido y eficiente. Está escrito en ANSI/ISO C++ y está diseñado para ser portable sobre múltiples plataformas.

67 3.4. Visión por computador y procesamiento de imágenes Módulos VXl contiene los siguientes módulos: Vnl: Contiene funciones numéricas y algoritmos. Las características más destacadas de esta librería son las siguientes: Operaciones esenciales de matrices y vectores. Clases especializadas para matrices y vectores con propiedades particulares. Por ejemplo la clase vnl diagonal matrix da una eficiente matriz diagonal con tamaño fijo. Descomposición de matrices. Polinomios reales. Optimización. Estandarización para funciones comunes y constantes. Vil: Contiene las funciones para cargar, salvar y manipular imágenes con soporte para gran variedad de formatos incluyendo soporte para imágenes de gran tamaño. El principal objetivo es dar acceso flexible a todas las imágenes en 2 dimensiones. Permite: Fácil acceso a todo tipo de imágenes. Rápido acceso para las imágenes en disco con una penalización de un 10 % de velocidad con respecto a la imágenes en memoria. Carga de gran velocidad para subconjuntos de una imagen. No es necesario cargar toda la imagen para acceder sólo a una porción. Eficiente control de memoria. Vgl: Funciones para primitivas de geometría con representación para 2 y 3 dimensiones. Se pueden destacar: Representación de puntos, líneas y planos. Figuras cónicas en 2 dimensiones.

68 3.4. Visión por computador y procesamiento de imágenes 51 Rectángulos. Polígonos. Vectores dirigidos. Vsl, vbl y vul: Conjunto de plataformas independientes y funcionales NeatVision NeatVision [14] es un un entorno de desarrollo software para análisis de imágenes para Java. Fue desarrollado por el grupo Vision Systems Group, de la universidad de Dublín. Los desarrolladores pueden crear soluciones a sus problemas de visión por computador usando la librería de algoritmos predefinidos. Estos algoritmos los cuales están presentes en forma de componentes gráficos pueden ser combinados en el espacio de trabajo para crear soluciones más complejas. Contiene alrededor de 290 algoritmos de manipulación y procesado de imágenes. Esta herramienta actualmente permite utilizar su código en aplicaciones propias del usuario de Java. Una de las condiciones que pone NeatVision a sus usuarios, es que las clases modificadas o mejoradas que vienen en el paquete, sean notificadas y enviadas a NeatVision para su examinación y posible incorporación a las nuevas versiones de NeatVision. Una de la grandes ventajas de NeatVision, como puede observarse en la figura 3.15, es que utiliza iconos para identificar sus filtros y algoritmos. Por lo que va formando diagramas para representar las etapas que se han ido siguiendo.

69 3.4. Visión por computador y procesamiento de imágenes 52 Figura 3.15: Diagrama de bloques desarrollado dentro de NeatVision Herramientas comerciales A parte de las herramientas descritas anteriormente, existen muchas otras herramientas comerciales que no son de código abierto. Estas herramientas, aunque destacan por su gran potencia, tienen el inconveniente de tener un precio elevado y que tienen un ciclo de actualizaciones relativamente largo. Muchos de ellos están ligados a alguna plataforma en particular, lo que impide el uso de la aplicación bajo otros sistemas. Todos ellos proporcionan funciones de procesamiento y análisis de imágenes, reconocimiento de patrones, estadísticas y calibración de la cámara a través del propio entorno o a través de librerías de funciones, desarrollados en la mayoría de las ocasiones en C/C++. Sin embargo,no suelen poner a disposición del usuario su código fuente, y en la mayoría de los casos hablamos de librerías monolíticas, muy pesadas y no demasiado rápidas. A continuación se dará una breve descripción de las más importantes Aphelion El sistema Aphelion [1] es un software de desarrollo muy completo para el procesamiento y análisis de imágenes, disponible para Windows, y que propone funciones de tratamiento

70 3.4. Visión por computador y procesamiento de imágenes 53 muy avanzadas. Es utilizado por investigadores y desarrolladores de aplicaciones en los campos médico, militar, de ciencia de materiales, geología, control de calidad e inspección. Sus principales ventajas son que es un entorno de desarrollo, procesamiento de imágenes, librerías de reconocimiento de objetos y un tutorial de uso muy sencillo. Posee los últimos avances en morfología matemática y representación simbólica, así como eficientes herramientas de análisis, reconocimiento de patrones y clasificación. Uno de los principales módulos de Aphelion es Recognition Toolkit, desarrollado por la compañía Recognition Science, Inc., que pone a disposición de los usuarios, un conjunto muy completo de herramientas de reconocimiento y clasificación de objetos basadas en el análisis por componentes principales y el cálculo de atributos. Los clasificadores pueden ser generados automáticamente liberando al usuario de tener que especificar complejas reglas para el reconocimiento de objetos. Suministra herramientas de reconocimiento de formas capaces de procesar datos continuos, discretos e incluso simbólicos. El módulo contiene una serie de operadores para la clasificación, el aprendizaje, la evaluación de atributos, la codificación y extracción de nubes de puntos (clusters). El núcleo del módulo incluye el conjunto de clasificadores, los operadores de aprendizaje, una rutina de reagrupamiento (clustering) estándar, operadores de evaluación y análisis de atributos, así como funciones utilitarias para el pre-procesamiento y constitución de bases de aprendizaje y la generación de clasificadores definidos por el usuario. Otros módulos importantes de Aphelion son: Módulo 3D: Procesar y visualizar imágenes tridimensionales que poseen la misma funcionalidad y capacidad de cálculo que sus equivalentes en 2D. Módulo Color: Permite al usuario manipular imágenes a color gracias a herramientas avanzadas de segmentación y de extracción de objetos, en función de la intensidad de sus colores. Incluye cuatro métodos semiautomáticos de segmentación: umbral de color interactivo, distancia entre colores, crecimiento de regiones y partición morfológica. Módulo Image Montage: Permite reconstruir una imagen a partir de imágenes más pequeñas.

71 3.4. Visión por computador y procesamiento de imágenes 54 Módulo Kriging:Este módulo permite eliminar el ruido generado durante la adquisición de una imagen empleando técnicas de filtrado basadas en el análisis Kriging geoestadística. Módulo Multifocus: Generación de una imagen nítida a partir de múltiples imágenes desenfocadas. 2 la MIL Matrox Imaging Library [11] (MIL) es un kit de desarrollo para la visión por computador, tratamiento de imágenes médicas y análisis de imágenes. Contiene ActiveMil que es una colección de controles ActiveX para manejar captura, transferencia, análisis y visualización de imágenes. Incluye también otra aplicación llamada Matrox Inspector, una herramienta interactiva para Microsoft Windows y una interfaz para utilidades de cámaras HIPS HIPS [6] es un conjunto de módulos para el procesamiento de imágenes que contiene un entorno de herramientas muy potente. Fue desarrollado en la Universidad de Nueva York y ahora es mantenido por uno de sus desarrolladores originales Michael Landy. Está desarrollado para UNIX. Está dividido de forma modular y flexible, contiene una gran documentación. Con HIPS se pueden tratar secuencias de imágenes de la misma manera que si fueran simples frames. Ha sido desarrollado para transformaciones simples de imágenes, filtros, convoluciones, procesos de transformación como por ejemplo el de Fourier, detección de arcos, comprensión digital de imágenes y computación de estadísticas de imágenes. Cualquier proceso de tratamiento de imágenes puede ser realizado eficientemente. Una de las ventajas de HIPS es que cada imagen que se guarda en el sistema contiene su propio historial de transformaciones que han sido aplicadas a esa imagen. Se incluyen también un conjunto de subrutinas las cuales permiten tratar con una secuencia estándar de imágenes y una gran librería con funciones para el procesamiento de imágenes. Es compatible con varios tipos de máquinas entre ellos:vax y Microvax, Sun, Apollo, Masscomp, NCR Tower, Iris e IBM AT. La diferencia respecto a las otras aplicaciones comerciales descritas, es que HIPS es

72 3.4. Visión por computador y procesamiento de imágenes 55 la única que pone a disposición del cliente su código fuente Wit Wit [21] es una herramienta gráfica, desarrollada por la empresa Canadiense Coreco Imagin Inc., la cual se basa en desarrollos de subgrafos para hacer un procesamiento de imágenes. Con esta herramienta se pueden hacer procesos de visión pasiva y visión activa, ya que genera código que puede ser utilizado en C/C++. Al igual que con NeatVision, las aplicaciones son realizadas con diagramas de bloques, como se puede ver en la figura 3.16, donde podemos apreciar el diseño de un proceso de captura en wit por bloques en el que se adquiere un frame y después se muestra. Figura 3.16: Ejemplo de funcionamiento de WiT Algunas de las características y utilidades más importantes de Wit son: Librerías para el procesamiento de imágenes: Contiene alrededor de 400 funciones que pueden ser usadas en Wit o directamente desde aplicaciones C/C++. Una interfaz flexible para cámaras que es compatible para gran variedad de dispositivos. Motor Wit: Un potente motor de ejecución con componentes DDL y ActiveX. Ejecución en multiples CPUs: Pueden utilizar múltiples CPU dentro de un PC. Generador de código C: Puede convertir aplicaciones gráficas en código C.

73 Capítulo 4 Método de trabajo 4.1. Introducción 4.2. Fase de análisis y requisitos Análisis de Herramientas Herramientas de tratamiento de imágenes y visión por computador Descripción de cada caso de uso 4.3. Fase de diseño Capturar la señal RTP/RTSP Dividir la señal en frames Filtrado de cada frame por separado Rehacer la señal Enviar la señal Mostrar el vídeo Visión general del sistema 4.4. Fase de implementación Capturar la señal RTP/RTSP Dividir la señal en frames Filtrado de cada frame por separado Rehacer la señal Enviar la señal Mostrar el vídeo 56

74 4.1. Introducción Introducción Para el desarrollo de este proyecto se ha seguido un método de desarrollo en cascada ascendente y descendente. Es decir, se permite la posibilidad de, cuando se han encontrado problemas en una fase, volver a la fase anterior para realizar cambios. El proceso de desarrollo ha utilizado también algunas partes del proceso unificado como por ejemplo la notación UML y que ha sido dirigido por casos de uso. Para implementar este proceso se han seguido las siguientes fases: Fase de análisis y requisitos: Se estudiarán los requisitos y objetivos generales del sistema propuestos en el capítulo 2 para proceder a la construcción de la vista funcional del sistema, que será implementada en forma de diagrama de casos de uso. Según esta vista del sistema, se tomarán decisiones respecto a los medios y herramientas que se van a utilizar después de analizar cada una de las herramientas comentadas en el capítulo 3. Fase de diseño: Se realizará el diseño general del sistema y para mayor claridad y concisión se aportarán diagramas en notación UML para que sea más claro y conciso como por ejemplo diagramas de clases y de secuencias. Fase de implementación: Se explicarán las partes más importantes de la codificación de la aplicación, así como los principales problemas que se han encontrado y cómo se han solventado. Fase de pruebas: Se desarrollarán diferentes pruebas para comprobar la robustez del sistema y verificar que cumple con los objetivos requeridos. Los resultados de estas pruebas serán explicados en el capítulo 5.

75 4.2. Fase de análisis y requisitos 58 Figura 4.1: Fases de desarrollo 4.2. Fase de análisis y requisitos Como se explicó en el capítulo 2, el requisito principal de este proyecto es realizar un marco de trabajo para capturar flujos de vídeo RTSP/RTP que permita añadir todo tipo de filtros y mecanismos de procesamiento de imágenes. Es decir, realizar una aplicación que permita la captura de un flujo de vídeo procedente de una fuente RTSP/RTP, procesar y tratar cada imagen por separado para posteriormente rehacer el flujo RTSP/RTP, bien para mostrarlo por pantalla o para ser enviado a otros dispositivos a través de la red. Analizando este requisito principal vemos que puede ser dividido en las siguientes funcionalidades de la aplicación o casos de uso: Capturar la señal RTSP/RTP. Dividir la señal en frames. Filtrado de cada frame por separado. Rehacer la señal.

76 4.2. Fase de análisis y requisitos 59 Enviar la señal. Mostrar la señal. Con estas funcionalidades se ha obtenido el diagrama de casos de uso o vista funcional de la aplicación de la figura 4.2 Figura 4.2: Vista funcional de la aplicación A continuación se han ordenado los casos de uso según el orden en que se irán implementando. Para establecer este orden, se ha realizado una priorización de casos de uso atendiendo

77 4.2. Fase de análisis y requisitos 60 a criterios de dependencia entre ellos. 1. Capturar la señal RTSP/RTP. 2. Dividir la señal en frames. 3. Rehacer la señal. 4. Enviar la señal. 5. Mostrar la señal. 6. Filtrado de cada frame por separado Análisis de Herramientas Se ha analizado cada una de las herramientas propuestas en el capítulo anterior estudiando en qué grado cumplen cada uno de los requisitos del proyecto y se han escogido las que satisfacen en mayor medida estos requerimientos. A continuación veremos la elección en cada uno de los dos campos de herramientas: Herramientas que permitan el tratamiento de flujos RTSP/RTP y herramientas que permitan el tratamiento de las imágenes y la extracción de datos como pueden ser herramientas basadas en la visión por computador Herramientas RTSP/RTP Con respecto a estas herramientas los requisitos que se deben cumplir son los siguientes: Compatibilidad con varios sistemas operativos. Permitir la captura flujos RTSP/RTP. Permitir enviar flujos RTSP/RTP. Compatibilidad con MPEG-4. Posibilidad de decodificar flujos de vídeo. Posibilidad de codificar flujos de vídeo.

78 4.2. Fase de análisis y requisitos 61 Código abierto que permita su modificación. Eficiencia para poder ser utilizado en tiempo real. En la tabla 4.1 se pueden observar la comparativa de las diferentes librerías RTP estudiadas en el capítulo anterior. Según estos datos se puede apreciar la similitud de estas librerías. A pesar de que son librerías muy robustas, no se adaptan totalmente a la utilidad que se requiere en este proyecto. El principal problema de este tipo de herramientas es que no son herramientas de codificación y decodificación de vídeo. Por lo que con ellas se podrían enviar y recibir paquetes RTP, pero no se podría codificar y decodificar esta señal en forma de vídeo. Por este aspecto se ha decidido que no es conveniente utilizar para este proyecto estas librerías, ya que la complejidad de implementar la codificación y decodificación de vídeo es muy grande. Herramienta Requisito ccrtp ortp JRTPLIB UCL Java.net.RTP Multiplataforma Sí Sí Sí Sí Sí Captura de paquetes RTP Sí Sí Sí Sí Sí Enviar paquetes RTP Sí Sí Sí Sí Sí Compatibilidad con MPEG-4 Indirecto Indirecto Indirecto Indirecto Indirecto Codificar flujos de vídeo No No NO No No Decodificar flujos de vídeo No No No No No Codigo abierto Sí Sí Sí No No Lenguaje de Programación C++ C C++ C++ Java Facilidad de uso Buena Buena Mala Mala Buena Flujos RTSP Indirecto Indirecto Indirecto Indirecto Indirecto Cuadro 4.1: Comparativa de las librerías RTP El siguiente tipo de herramientas que se estudiaron en el capítulo anterior son los codificadores y decodificadores de audio y vídeo. En la tabla 4.2 podemos observar una comparativa de estas 3 aplicaciones.

79 4.2. Fase de análisis y requisitos 62 Herramienta Requisito MPEG4IP MPlayer VLC Multiplataforma Sí Sí Sí Compatibilidad con MPEG-4 Sí Sí Sí Codificar flujos de vídeo Sí Sí Sí Decodificar flujos de vídeo Sí Sí Sí Codigo abierto Sí Sí Sí Lenguaje de Programación C++ C C++ Facilidad de su código Mala Mala Buena Capturar flujos RTSP Sí Sí Sí Enviar flujos RTSP No No Sí Cuadro 4.2: Comparativa de las herramientas de codificación y decodificación Este tipo de herramientas tienen varias ventajas con respecto a las librerías de captura RTP: La captura de los flujos RTSP se realiza de forma directa. Pueden codificar y decodificar flujos de vídeo. Lo que nos permitirá abstraernos de estos aspectos. Estas ventajas nos han hecho inclinarnos por usar una de estas herramientas. Como se puede observar en la tabla 4.2, las 3 herramientas estudiadas son muy similares, pero para realizar este proyecto se ha optado por usar VLC por los siguientes motivos: Es la única que permite enviar flujos RTSP. Esto es un requisito fundamental para este proyecto, ya que como se explicó en capítulos anteriores es necesario que la aplicación pueda actuar de cámara virtual; es decir, pueda modificar la señal y volver a enviarla a la red. Tiene un código fácilmente entendible y una buena documentación. Se pueden insertar nuevas funcionalidades fácilmente en forma de plugin.

80 4.2. Fase de análisis y requisitos 63 Por lo tanto se utilizará VLC, que nos va a permitir capturar flujos de vídeo RTSP/RTP. Estudiando las diferentes aplicaciones de esta herramienta se observa que no posee una forma directa para poder modificar los flujos de vídeo Herramientas de tratamiento de imágenes y visión por computador Estas herramientas nos permitirán modificar las imágenes. Los requerimientos que se exigen son: Que se pueda utilizar bajo varias plataformas. Sean de código abierto. Que permita el procesamiento de imágenes. Posea funciones para el análisis de estructuras. Tenga funciones para reconocimiento de objetos. Tenga un número suficiente de filtros. Sea una librería muy amplia. La comparativa según estos requerimientos de las librerías descritas en el capítulo anterior se pueden ver en las tablas 4.3 y 4.4.

81 4.2. Fase de análisis y requisitos 64 Herramienta Requisito OpenCV Bazar Gandalf ARToolKit VXL Multiplataforma Sí Sí Sí Sí Sí Procesamiento de imágenes Sí No Sí No Sí Análisis de estructuras Sí No Sí Sí Sí Reconocimiento de objetos Sí Sí Sí Sí No Amplitud de la librería Muy Grande Pequeña Normal Grande Normal Cantidad de filtros Muy Grande Normal Grande Normal Normal Codigo abierto Sí Sí Sí Si Si Lenguaje de Programación C++ C C++ C++,Java y Matlab C++ Facilidad de uso Buena Normal Normal Mala Buena Cuadro 4.3: Comparativa de las librerías de visión por computador Herramienta Requisito Neatvision Aphelion MIL HIPS Wit Multiplataforma Sí No No No No Procesamiento de imágenes Sí Sí Sí Sí Sí Análisis de estructuras No Sí Sí Sí Sí Reconocimiento de objetos Indirecto Sí No No No Amplitud de la librería Normal Grande Normal Normal Grande Cantidad de filtros Normal Grande Normal Normal Grande Codigo abierto Sí No Sí No No Lenguaje de Programación Java C Java C++ C++ Facilidad de uso Muy Buena Buena Mala Buena Muy Buena Cuadro 4.4: Comparativa de las librerías de visión por computador (II) Tras la comparativa realizada en las tablas anteriores se ha elegido OpenCV como herramienta ya que es la que más se adecúa a los requisitos del proyecto. Es una librería muy amplia

82 4.2. Fase de análisis y requisitos 65 a la que cada vez se le están añadiendo más funcionalidades y como el objetivo del proyecto es realizar un marco de trabajo que nos permita añadir filtros fácilmente se ha pensado que al ser esta herramienta la más utilizada, el aprovechamiento del proyecto será mayor.un usuario podrá crear filtros en OpenCV y los podrá utilizar con señales de vídeo RTSP estándar Descripción de cada caso de uso En esta sección se dará una primera aproximación de cada caso de uso, intentando dar una descripción textual, usando tablas de descripción y proponiendo posibles diagramas de análisis que permitan entender mejor el caso de uso que se va a implementar en fases siguientes Capturar la señal RTP/RTSP Figura 4.3: Diagrama de análisis del caso de uso Capturar la señal RTP/RTSP Como se ha decidido que la herramienta que se va a utilizar es VLC, se tendrá que buscar un mecanismo que permita a la aplicación coger la señal de vídeo de VLC; es decir, VLC capturará una señal RTSP y nuestra aplicación cogerá ese vídeo de VLC. En la figura 4.3

83 4.2. Fase de análisis y requisitos 66 se pueden ver los componentes implicados en este caso de uso. Se tendrán 2 actores, uno el usuario que interactúa con la interfaz para establecer la dirección rtsp de la que quiere recibir la señal de vídeo, y el otro la propia señal de vídeo que al ser un elemento externo es tratada como actor. También están implicados los controladores de VLC y el controlador propio de la aplicación (controller). En la tabla 4.6 se da una descripción con más detalle de la forma de interactuar que tienen los distintos componentes. Nombre: Capturar la señal RTP/RTSP Abstracto: No Postcondiciones El flujo RTSP es capturado Rango 1 Flujo Normal: 1.El usuario introduce la dirección RTSP. 2.La interfaz manda esta dirección a VLC. 3.El controlador de VLC conecta con la dirección RTSP. 4.VLC recibe el flujo RTSP. 5.VLC manda el flujo al controlador de la aplicación. Descripción: Un usuario introduce la dirección RTSP sobre la que se quiere realizar la captura, la interfaz del programa mandará esta aplicación a VLC que se conectará con la dirección y comenzará a recibir el flujo; mientras esto ocurre el controlador de nuestra aplicación se comunicará con VLC para recibir el flujo de vídeo. Cuadro 4.5: Descripción textual del caso de uso Capturar la señal RTSP/RTP

84 4.2. Fase de análisis y requisitos Dividir la señal en frames Figura 4.4: Diagrama de análisis del caso de uso Dividir la señal en frames Para poder hacer filtrado de imágenes se necesita tratar por separado cada uno de los frames de los que está compuesta la señal de vídeo. Como se ha decidido que se va a utilizar OpenCV, estos frames deberán estar en el formato adecuado que permitan a OpenCV acceder a estas imágenes, por lo que como las imágenes son capturadas por VLC será necesario transformar estas imágenes a un formato válido para OpenCV. En la figura 4.4 se pueden observar una primera aproximación de los diferentes componentes que realizarán estas acciones. Se utilizarán 2 controladores, uno de ellos el controlador de la aplicación y el otro un controlador encargado de realizar la conversión del formato de la imagen. Podemos ver que también participan las 2 entidades de los dos formatos de imágenes. En la tabla 4.6 se describen con más detalles las distintas funcionalidades de este caso de uso y de cada componente.

85 4.2. Fase de análisis y requisitos 68 Nombre: Dividir la señal en frames Abstracto: No Postcondiciones Podemos tratar la señal en imágenes independientes Rango 2 Flujo Normal: 1.El controlador (controller) de la aplicación recibe la señal RTSP. 2.Se van extayendo de la señal imágenes en formato de VLC. 3.Se manda la imágen en formato VLC al conversor. 4.El conversor convierte la imágen VLC a una imágen formato OpenCV. Descripción: Este caso de uso es el proceso desde que el controlador recibe la señal y va cogiendo de esta señal cada imagen por separado, estas imágenes estarán en formato VLC por lo que para que puedan ser tratadas con OpenCV serán mandadas a un conversor que transformará este tipo de imágenes al formato de OpenCV. Cuadro 4.6: Descripción textual del caso de uso Dividir la señal en frames

86 4.2. Fase de análisis y requisitos Filtrado de cada frame por separado Figura 4.5: Diagrama de análisis del caso de uso Filtrado de cada frame por separado Cuando se obtenga la imagen en el formato adecuado a OpenCV se le podrán aplicar cualquier filtro implementado en esta herramienta. En la figura 4.5 encontramos los diferentes componentes que participarán a simple vista en este caso de uso: Dos controladores, el conversor y el filtro, y una entidad la imagen que será filtrada ya en formato OpenCV. En la tabla 4.7 se explicará con más detalle este caso de uso.

87 4.2. Fase de análisis y requisitos 70 Nombre: Filtrado de cada frame por separado Abstracto: No Postcondiciones Se obtendrá una nueva imagen en formato OpenCV Rango 3 Flujo Normal: 1.El conversor manda la imagen OpenCV al filtro. 2.El filtro realiza una operación sobre la imagen. 3.Se realiza cierta transformación en la imagen. 4.La imagen se manda al conversor. Descripción: En este caso de uso, el filtro OpenCV recibirá una imágen en el formato adecuado. Este filtro realizaŕa una operación sobre la imágen como puede ser por ejemplo detectar si en la imagen hay una cara y se hará una transformación en la imagen Por ejemplo, marcar con un círculo la cara encontrada y se devolverá esta nueva imagen al conversor en el mismo formato que la imagen original Cuadro 4.7: Descripción textual del caso de uso Filtrado de cada frame por separado En este proyecto se implementará un filtro que permita la detección de gestos realizados con las manos. Para ello se deben seguir los siguientes pasos: 1. Detectar en la imagen de entrada la mano. 2. Obetener las coordenadas de la posición de la mano. 3. Reconocer el gesto que realiza la mano.

88 4.2. Fase de análisis y requisitos Rehacer la señal Figura 4.6: Diagrama de análisis del caso de uso Rehacer la señal Cuando la imagen ha sido filtrada por un filtro de OpenCV es necesario devolver la imagen al formato VLC. Para ello se vuelve a utilizar el conversor que hará el proceso contrario que realizó en el caso de uso de División en frames, es decir, a partir de una imagen en formato OpenCV devolverá una imagen en formato VLC con las mismas características. En la figura 4.6 se pueden apreciar los componentes implicados en este caso de uso: El controlador de la aplicación, el controlador de VLC y las entidades de las respectivas imágenes de entrada y de salida del conversor. En la tabla 4.8 se dará una descripción más detallada del caso de uso.

89 4.2. Fase de análisis y requisitos 72 Nombre: Rehacer la señal Abstracto: No Postcondiciones Se obtendrá una señal RTSP Rango 4 Flujo Normal: 1.El conversor recibe una imagen OpenCV. 2.El conversor convierte la imagen OpenCV a formato VLC. 3.El conversor manda la imagen al controlador. 4.El controlador manda la imagen al controlador de VLC. Descripción: En este caso de uso se obtendrá una nueva señal RTSP a partir de imágenes en formato OpenCV; para ello el conversor convertirá la imagen al formato VLC y se las irá mandando al controlador que se las mandará a VLC. Cuadro 4.8: Descripción textual del caso de uso Rehacer la señal Enviar la señal Figura 4.7: Diagrama de análisis del caso de uso Enviar la señal

90 4.2. Fase de análisis y requisitos 73 Una vez que la imagen está en un formato VLC, si el usuario lo desea podrá volver a crear el flujo RTSP para que sea enviado a través de la red a otros usuarios (cámara virtual). A simple vista, en este proceso participarán los componentes del diagrama de análisis de la figura 4.7, dos actores, uno de ellos representa el nuevo flujo RTSP y el otro representa al propio usuario. También intervendrá el controlador de VLC. En la siguiente tabla podemos ver una descripción más detallada del caso de uso. Nombre: Enviar la señal Abstracto: No Postcondiciones Se enviará la señal RTSP a través de la red Rango 4 Flujo Normal: 1.El controlador VLC recibirá la nueva señal. 2.Si el usuario a marcado esta opción. 3.Se creará un nuevo flujo RTSP que será enviado por la red. Descripción: En este caso de uso se volverá a crear una señal RTSP que será enviada por la red y otros usuarios podrán recibir esta señal que es una modificación de la original. Cuadro 4.9: Descripción textual del caso de uso Enviar la señal

91 4.2. Fase de análisis y requisitos Mostrar el vídeo Figura 4.8: Diagrama de análisis del caso de uso Mostrar el vídeo El usuario puede tener la opción de en vez de rehacer el flujo para ser enviado por la red, como veíamos en el caso de uso anterior, simplemente visualizar el vídeo en su propia máquina. En este caso de uso intervendrán : El controlador VLC que mandará a visualizar las imágenes, una interfaz por la que se visualizará el vídeo y un actor, el propio usuario.

92 4.3. Fase de diseño 75 Nombre: Mostrar el vídeo Abstracto: No Postcondiciones Rango 4 Flujo Normal: 1.El controlador VLC recibirá la nueva señal. 2.Si el usuario a marcado esta opción. 3. VLC reproducirá la señal Descripción: El usuario podrá ver la reproducción del vídeo que se ha modificado Cuadro 4.10: Descripción textual del caso de uso Mostrar el vídeo 4.3. Fase de diseño En esta sección se dará una visión más detallada del sistema. Se empezará diseñando cada caso de uso analizado en la sección anterior, hasta llegar a un diseño general del sistema. Para poder dar una descripción más detallada se utilizarán diagramas de secuencia y de clases Capturar la señal RTSP/RTP Como se ha visto en la fase de análisis este caso de uso tiene la función de recibir una señal de vídeo RTSP para posteriormente pasar a su procesamiento. Esto se hará a través del programa VLC que ya permite la captura de vídeos RTSP y otro tipos de streamming. Es decir, VLC capturará y decodificará la señal, y la aplicación de nuestro proyecto tendrá que obtener esta señal de VLC para su procesamiento. En la figura 4.9 se puede apreciar una ilustración de esta idea.

93 4.3. Fase de diseño 76 Figura 4.9: Captura de la señal de vídeo a través de VLC Para poder realizar esta operación se ha estudiado con gran profundidad el código de VLC, para ver como maneja este programa las señales de vídeo y se ha decidido que la mejor opción es realizar un plugin dentro del propio VLC que capture la señal de salida de VLC. Existen varios tipos de plugins que se pueden crear para VLC: vídeo output: Este tipo permite obtener la salida de vídeo de VLC. vídeo filter: Este tipo permite obtener la salida de vídeo y modificarla. audio output: Este tipo permite obtener la salida de audio de VLC. audio filter: Este tipo permite obtener la salida de audio y modificarla. El tipo de plugin más adecuado para este proyecto es el vídeo filter, ya que se quiere capturar la señal pero no sólo para visualizarla, sino que se quiere tratar con filtros. Por lo que se realizará un plugin de tipo vídeo filter que obtenga la señal de reproducción de vídeo de VLC. En la figura 4.10 se muestra el diagrama de secuencia de este caso de uso, dando ya más detalles que los que se daban en la fase de análisis. El controlador de la aplicación que mostrábamos en la fase anterior ha sido sustituido por la clase plugin que realizará las funciones que se habían impuesto a ese controlador (controller). Como se observa en el diagrama, el usuario introducirá la dirección rtsp que desea filtrar por medio de una interfaz de usuario, esta interfaz ejecutará vlc pasándole la dirección rtsp. VLC creará un hilo de salida de vídeo e inicializará el plugin pasándole este hilo.

94 4.3. Fase de diseño 77 Figura 4.10: Diagrama de secuencia del caso de uso Capturar la señal RTP/RTSP De este modo, se consigue capturar una señal de vídeo abstrayéndonos del modo en el que se realiza la conexión rtsp y del modo en el que se decodifica el vídeo, ya que se utilizan funciones del propio VLC que permiten realizar estas acciones Dividir la señal en frames Este proceso consistirá en a partir de la señal de vídeo out, que ha obtenido el plugin en el caso de uso anterior, ir extrayendo de ésta cada frame por separado. Como ya se ha explicado, este proceso es en tiempo real por lo que la eficiencia en esta fase es muy importante. El principal problema al que nos enfrentamos es que los frames extraídos de la señal de vídeo VLC no son compatibles con OpenCV, por lo que no pueden ser tratados por esta librería. Por lo que se llevará a cabo un proceso de conversión de cada una de las imágenes VLC en imágenes de OpenCV. Estos dos formatos de imágenes son estructuras de datos totalmente independientes:

95 4.3. Fase de diseño 78 picture t: Estructura que representa una imagen o frame en VLC. IplImage: Estructura que representa una imagen o frame en OpenCV. Este proceso se debe llevar a cabo de forma que se mantengan exactamente las mismas características que tiene la imagen en el formato original en la nueva imagen. Y el encargado de realizarlo será la clase conversor. Figura 4.11: De picture t a IplImage En la figura 4.12 se muestra el diagrama de diseño de este caso de uso. En este diagrama se puede apreciar con más detalle el diseño de este caso de uso. El plugin obtiene un picture t del hilo de vídeo. Y va pasando cada una de estas picture t al Conversor que crea una nueva imagen IplImagen con los datos de picture t.

96 4.3. Fase de diseño 79 Figura 4.12: Diagrama de secuencia del caso de uso dividir la señal en frames Filtrado de cada frame por separado Este caso de uso como ya se explicó, consiste en filtrar la imagen, es decir, filtrar la IplImage. Al tener la imagen en este formato se podrá aplicar cualquier filtro realizado en OpenCV. Como se fue dicho en secciones anteriores, el objetivo es implementar un filtro que permita reconocer una mano humana en una imagen y posteriormente analizar esta mano para comprobar si realiza alguno de los gestos que tiene almacenados para detectar.

97 4.3. Fase de diseño 80 Figura 4.13: Proceso del filtro de detección de gestos A parte de realizar el filtro de reconocimiento de gestos se usarán los clasificadores de OpenCV para realizar un filtro de detección de caras. Figura 4.14: Diagrama de secuencia del caso de uso filtrado de cada frame por separado En la figura 4.14 se puede ver el diagrama de secuencia de este caso de uso. El conversor

98 4.3. Fase de diseño 81 llamará a la función filtrar del Filtro y éste realizará una de las operaciones del filtrado que haya escogido el usuario en la interfaz. Se modificará la IplImage y será devuelta al conversor Rehacer la señal Una vez concluido el proceso de filtrado se obtendrá una nueva IplImage con cierta modificación de la inicial. Para que vlc pueda procesar esta imagen para que sea visualizada, habrá que seguir el proceso contrario que se siguió en el otro caso de uso; es decir, a partir de esta IplImage se obtendrá una picture t que sea reconocible para VLC sin perder ninguna de las características de la imagen.

99 4.3. Fase de diseño 82 Figura 4.15: Diagrama de secuencia del caso de uso rehacer la señal Como se puede apreciar en la figura 4.15 el conversor llamará a una función propia que al pasarle una IplImage nos cree una nueva picture t. En la fase de implementación se explicará cómo se lleva a cabo este proceso de conversión de imágenes. Posteriormente la picture t es devuelta al plugin para que proceda con el siguiente caso de uso Enviar la señal Tras procesar la señal, ésta puede ser mandada a otros equipos a través de la red. Para ello habrá que devolverle el control a VLC y crear un flujo RTSP. Al igual que en la fase de

100 4.3. Fase de diseño 83 captura nos abstraemos de cómo VLC realiza estas acciones, lo único que debemos hacer es hacerlo a través de las funciones propias de VLC. Figura 4.16: Diagrama de secuencia del caso de uso enviar la señal En la figura 4.16 se presenta el diagrama de secuencia de este caso de uso que nos da un diseño más detallado de lo que se va a implementar dentro de la funcionalidad de enviar la señal. Simplemente se le dirá a VLC que envíe esta nueva imagen que se ha creado. Y VLC irá mandando un flujo con las imágenes procesadas que le irá dando el plugin Mostrar el vídeo Finalmente se le dice a VLC que reproduzca la señal y el usuario podrá ver el vídeo en una interfaz. Como se ve en el diagrama de secuencia 4.17, el Plugin irá dando a VLC una a una las picture t que debe ir reproduciendo. Nuestra aplicación se abstraerá de la forma en que

101 4.3. Fase de diseño 84 VLC reproduce esta señal, simplemente le decimos cual es la picture t que debe reproducir con display(picture t). Figura 4.17: Diagrama de secuencia del caso de uso mostrar vídeo Visión general del sistema Después de diseñar cada caso de uso por separado, damos ahora un visión general del sistema diseñado. Para ello, en la figura 4.18 se muestra el diagrama de clases definidas para esta aplicación. A este diagrama se le podrán añadir atributos y operaciones, si es necesario, en la fase de implementación, pero los cambios no variarán la estructura general de este diseño.

102 4.3. Fase de diseño 85 Figura 4.18: Diseño general de la aplicación En este diagrama se puede ver que el diseño se centra principalmente en las siguientes clases: Plugin: Es la clase principal de la aplicación que será añadido a la lista de módulos (plugines) de VLC y se encargará de obtener el hilo de vídeo de VLC y comunicarse con el Conversor para realizar las actividades explicadas en los diagramas de secuencia. Interfaz: Interfaz de usuario en la que el usuario introduce la dirección que desea reproducir y el tipo de filtro que quiere utilizar. Esta será la encargada de ejecutar VLC pasándole la dirección rtsp.

103 4.3. Fase de diseño 86 VLCcontroller: Clase de control de vlc que proporcionará al Plugin el hilo de salida de vídeo (vou t thread t). vout thread t: Hilo de salida de vídeo proporcionado por VLC. picture t: Imagen de vlc que es extraída del hilo vout thread t. Ya que este hilo va mandando imágenes. Conversor: Clase encargada de realizar las conversiones de formatos. Tiene una relación de asociación bidireccional con el Plugin, ya que se realiza una comunicación entre ambas clases y una asociación unidireccional con las clases picture t e IplImage ya que son utilizadas por esta clase. Filtro: Es la clase encargada de filtrar las IplImage por lo que tiene una relación de asociación con esta clase. Al método constructor se le pasará un entero (tipo) que indicará qué tipo de filtro se va a inicializar. IplImage: Es una clase propia de OpenCV y se relaciona tanto con el Filtro como con el Conversor. En la figura 4.19, vemos la arquitectura general de la aplicación, así como el proceso que llevan a cabo transformando la señal rtsp. Estas fases son: 1. VLC recibe la señal rtsp. 2. VLC decodifica la señal rtsp y crea el hilo de vídeo vout thread t que es pasado al Plugin. 3. El plugin va cogiendo una a una las picture t del hilo de vídeo y se las pasa al Conversor. 4. El Conversor convierte las picture t en IplImage y las manda al filtro. 5. El filtro modifica las IplImage y las devuelve al Conversor. 6. El Conversor convierte las IplImage en picture t y las manda al Plugin. 7. Se van mandando las imágenes a VLC.

104 4.4. Fase de implementación Se recompone la señal rtsp. Figura 4.19: Arquitectura general de la aplicación Este proceso es un proceso continuo ya que las imágenes van llegando en tiempo real Fase de implementación Después de tener un diseño claro de la aplicación, gracias a los diagramas de secuencia y de clases, pasamos a la fase de codificación. La implementación del sistema se ha realizado utilizando el lenguaje de programación C++, debido a su fácil portabilidad entre distintas plataformas, eficiencia y rapidez. Además, tanto OpenCV como VLC, están implementados en este lenguaje y como se van a utilizar estas tecnologías, es necesario usar también C++. Además al ser una aplicación en tiempo real, el tiempo y la eficiencia son muy importantes y este lenguaje tiene muy en cuenta estos aspectos.

105 4.4. Fase de implementación 88 En esta sección se explicará cómo se han implementado las partes más importantes de los casos de uso diseñados anteriormente y se explicarán los algoritmos más importantes que se han implementado Capturar la señal RTP/RTSP En esta sección se presentarán los detalles más importantes respecto a la implementación de este caso de uso. Se ha dividido en 3 grandes aspectos importantes: VLC recibe una señal rtsp. Añadir Plugin a los módulos de VLC. Vout thread t. Estructura vout sys t VLC recibe una señal rtsp Para poder hacer que VLC reciba un flujo de vídeo rtsp de una determinada dirección rtsp, obtenemos la dirección que el usuario desea filtrar por medio de la interfaz. Tras obtener esta dirección la interfaz ejecutará VLC del siguiente modo: $ vlc rtsp:// Ejecutando el Plugin dentro de VLC. En la siguiente sección vemos como realizar esta acción Añadir Plugin a los módulos de VLC Para poder acceder a la señal de vídeo procesada por VLC, debemos añadir nuestra aplicación a su lista de módulos. En particular será añadido a la categoría de módulos de vídeo y a la subcategoría VIDEO VFILTER (para filtros de vídeo). Para poder realizar esta acción, se utlizará la sintaxis de descripción de módulos de VLC. Con ella se definirá el nombre que se quiere dar al módulo, una breve descripción textual de la función del módulo, los parámetros de entrada que recibe y las categorías. A continuación vemos como hemos agregado nuestro

106 4.4. Fase de implementación 89 Plugin: Listing 4.1: Descripción del Plugin 1 v l c m o d u l e b e g i n ( ) ; 2 s e t s h o r t n a m e ( ( c a p t u r e ) ) ; 3 s e t c a t e g o r y ( CAT VIDEO ) ; 4 s e t s u b c a t e g o r y ( SUBCAT VIDEO VFILTER ) ; 5 s e t d e s c r i p t i o n ( ( C a p t u r e and c o n v e r t v d e o t o OpenCV f o r m a t ) ) ; 6 s e t c a p a b i l i t y ( v d e o f i l t e r, 10 ) ; 7 a d d i n t e g e r ( image width, 1, NULL, WIDTH TEXT, WIDTH LONGTEXT, VLC TRUE ) ; 8 a d d i n t e g e r ( image h e i g h t, 1, NULL, HEIGHT TEXT, HEIGHT LONGTEXT, VLC TRUE ) ; 9 s e t c a l l b a c k s ( Create, D e s t r o y ) ; 10 v l c m o d u l e e n d ( ) ; El Plugin ha sido registrado en la lista de módulos con el nombre de capture. Se le han asignado dos enteros image-width e image-height de parámetros de entrada para que se pueda introducir las dimensiones de salida de la imagen. Con la llamada a set callbacks decimos a qué funciones queremos que se llamen automáticamente al crear y destruir el plugin, en este caso llamamos a Create y a Destroy. Este módulo será basicamente un bucle infinito que realizará las siguientes funciones: 1. Encontrar la siguiente imagen (picture t) que se va a visualizar. 2. Filtrar la imagen. 3. Esperar hasta el tiempo de emisión de esa imagen. 4. Emitir la imagen. 5. Manejar eventos.

107 4.4. Fase de implementación Hilo de salida de vídeo: Vout thread t Cuando se crea un módulo en vlc, al método de creación se le pasa como parámetro automáticamente un objeto vlc de la clase vlc object t. De este objeto se extraerá el hilo de salida de vídeo (Vout thread t). Esta estructura es muy compleja y básicamente maneja una cola de imágenes(picture t) y subimágenes guardando toda la información necesaria. Por lo que de este hilo de vídeo se irán extrayendo las imágenes que van a ser filtradas. A este hilo de vídeo, se le deben asignar las funciones que deben ser llamadas periódicamente en nuestro caso se le han asignado las siguientes: pf init: Esta función es llamada una vez tras crear el plugin y en nuestro caso le hemos asignado nuestra función Init. Automáticamente se le pasará como parámetro a esta función el vout thread t. Esta función sólo será llamada una vez por cada ejecución del programa y servirá para inicializar las estructuras de Vout thread t, así como otras que se van a utilizar. pf render: Esta función es llamada cada vez que hay una nueva picture t para procesar. Le hemos asignado nuestra función Render que será la encargada de ir pasando las imágenes al conversor. pf end Esta función es llamada antes de destruir el plugin y nos servirá para eliminar de memoria alguna de las estructuras creadas. Se le ha asignado la función End. Otras funciones de Vout thread t, como pf manage y pf control, que no van a ser utilizadas, han sido puestas a NULL. En la función Init se ha inicializado el hilo de vídeo de salida, para ello se han definido varios elementos con respecto al formato de salida: output.i chroma: Color y planos que se le van a asignar a la salida de vídeo. Ha sido inicializado para adaptarse al resultado del método Render. output.i width: Ancho de la imagen de salida. Se le asignará la dimensión que el usuario haya introducido. output.i height: Longitud de la imagen de salida. Se le asignará la dimensión que el usuario haya introducido.

108 4.4. Fase de implementación 91 output.i aspect: Aspecto de la imagen de salida. Ha sido inicializado para adaptarse al resultado del método Render. Tras definir estos elementos con respecto a la salida de vídeo se creará un nuevo hilo de salida de vídeo que respete el formato asignado. Para ello se utilizará la función: vout_create( p_vout, &fmt ) Los parámetros de entradas de esta función serán el hilo de vídeo original y el formato que se le quiere asignar al nuevo hilo de salida de vídeo. El resultado de esta operación será un nuevo hilo de salida de vídeo con el formato definido previamente, que será el que se usará para procesar las imágenes Estructura vout sys t El hilo de salida de vídeo tiene un elemento que es la estructura vout sys t, que es una estructura que permite almacenar ciertos datos en el hilo de salida de vídeo. En nuestro caso se ha implementado esta estructura con los siguientes componentes: Listing 4.2: Descripción de la estructura vout sys t 1 s t r u c t v o u t s y s t { 2 i m a g e h a n d l e r t p image ; 3 v o u t t h r e a d t p v o u t ; 4 i n t i c v i m a g e s i z e ; 5 i n t i f r a m e s ; 6 f l o a t f s c a l e ; 7 p i c t u r e t p p r o c i m a g e ; 8 i n t i w i d t h ; 9 i n t i h e i g h t ; 10 I p l I m a g e p c v i m a g e [VOUT MAX PLANES ] ; 11 } ; Como se puede observar en el listing anterior, en esta estructura guardamos los siguientes elementos:

109 4.4. Fase de implementación 92 p vout: En este campo guardaremos el nuevo hilo de vídeo de salida que se creará con el formato adecuado como se explicaba en la sección anterior. p proc image: Imagen resultante que quedará tras el proceso de conversión y filtrado. p cv image: Servirá para guardar la actual imagen tras convertirla a formato OpenCV. p image: Servirá para poder tratar imágenes. i cv image size: Tamaño de la imagen en formato OpenCV. i frames: Número de frames que han sido analizados Dividir la señal en frames Las partes más importantes con respecto a este caso de uso son las siguientes: Obtener una picture t de vout thread t. Convertir de picture t a IplImage. A continuación se dará una descripción más detallada de cada una de estas partes Obtener una picture t de vout thread t Cuando se ha creado el hilo de salida de vídeo, el siguiente paso es ir extrayendo una a una las picture t que van llegando a este hilo. Para implementar esto en primer lugar se ha creado un buffer directo que contenga en cada momento el máximo número de picture t posibles. Esto nos permitirá ganar en eficiencia, ya que se irán sacando las imágenes del buffer. Para crear este buffer se ha usado la siguiente sentencia: ALLOCATE_DIRECTBUFFERS( VOUT_MAX_PICTURES ); A continuación, en el Plugin, dentro de la función Render, se irán creando una a una las imágenes (picture t).seguidamente se muestra el algoritmo que permite ir realizando esta acción:

110 4.4. Fase de implementación 93 Listing 4.3: Extraer imágenes del hilo de vídeo 1 p i c t u r e t p o u t p i c = NULL; 2 while ( ( p o u t p i c = v o u t C r e a t e P i c t u r e ( p vout >p sys >p vout, 0, 0, 0 ) ) == NULL ) { 3 i f ( p vout >b d i e p vout >b e r r o r ) { 4 p r i n t f ( ERRORR\n ) ; 5 return ; 6 } 7 msleep ( VOUT OUTMEM SLEEP ) ; 8 } Vemos que simplemente se espera en un bucle infinito hasta que se pueda crear una nueva imagen; es decir, hasta que se reciba una nueva imagen. Si no se obtiene la imagen dormimos el bucle hasta que se pueda obtener. Para crear la imagen llamamos a la función vout CreatePicture pasando como parámetro el hilo de vídeo. Cuando se obtiene ésta, es enviada al Conversor para que la convierta a formato OpenCV Convertir de picture t a IplImage Dentro del conversor se ha implementado el método convertirtoiplimage que toma una imagen en formato picture t y devuelve una imagen en formato OpenCV. Estas dos tipos de imágenes son representadas por dos estructuras totalmente independientes. Por lo que tendremos que ir introduciendo los elementos de la estructura picture t dentro de los campos de una IplImage. En las siguientes tablas se muestran los elementos más importantes de cada una de las estructuras.

111 4.4. Fase de implementación 94 Nombre Tipo Descripción Format vídeo frame format t Propiedades y formato de la imagen p[ ] plane t Contiene los diferentes planos de la imagen i planes int Número de planos de la imagen i status int Estado de la imagen Date mtime t Tiempo previsto para la reproducción de la imagen b progressive vlc bool t Si forma parte de una secuencia progresiva i nb fields int Campos de la imagen que deben ser reproducidos p data uint8 t * Dirección de memoria al buffer de datos p next struct picture t * Referencia a la siguiente imagen Cuadro 4.11: Elementos más importantes de la estructura picture t Nombre Tipo Descripción nsize int Tamaño entero de la imagen ID int Identificador único de la imagen nchannels int Número de canales de color de la imagen depth int Profundidad de la imagen heigth int Dimensión de la imagen width int Dimensión de la imagen channelseq byte[] Valor de los pixels imagedata byte* Estructura para representar las características de la imagen p next struct picture t * Referencia a la siguiente imagen colormodel byte[] modelo de color de la imagen Cuadro 4.12: Elementos más importantes de la estructura IplImage Como se puede ver en la tabla 4.11, en la estructura picture t no se dispone de los datos reales de la imagen, sino que esta imagen está compuesta por diferentes planos (matriz de estructuras plane t), y en estos planos es donde disponemos de los datos reales de la imagen.

112 4.4. Fase de implementación 95 En la siguiente tabla podemos ver los componentes de la estructura plane t. Nombre Tipo Descripción p pixels uint8 t * Puntero al comienzo de los datos del plano i lines int Número de bytes en una linea,incluyendo márgenes i pitch int Número de canales de color de la imagen i pixel pitch int Tamaño de un píxel (por defecto es 1) según los canales de color i visible lines int Número de líneas visibles en un plano i visible pitch int Número de pixels visibles en una linea Cuadro 4.13: Elementos más importantes de la estructura plane t Como vemos, las IplImage no tienen planos, por lo que se creará una IplImage por cada uno de los planos de picture t. Por eso tenemos en la estructura vout sys t el componente IplImage *p cv image[vout MAX PLANES], matriz cuyas posiciones representan los diferentes planos de picture t y en la que iremos guardando una IplImage por cada posición. Lo primero que se debe hacer es obtener las dimensiones de la nueva imagen que se va a crear. Para poder crear el tamaño de una IplImage se usa la siguiente función: CvSize cvsize( int width, int height ); Devuelve una estructura llamada CvSize utilizada para definir las dimensiones de un rectángulo en píxeles. Tendremos que introducir a esta función las dimensiones del plano, y en la estructura plane t no se tienen las dimensiones del plano. En la figura 4.20 se puede ver la descomposición del plano en píxeles y líneas.

113 4.4. Fase de implementación 96 Figura 4.20: Plano de una picture t Observando esta figura, se deduce claramente que se pueden obtener las dimensiones de un plano de la siguiente forma: width: El ancho de la imagen puede ser calculado conociendo el número de píxeles que hay en una línea. Esa información se tiene en i visible pitch. Pero como el tamaño de un píxel puede tener distinto tamaño (aunque suele ser uno) según los canales de color que este tenga, se dividirá entre el tamaño del píxel. i visible pitch i pixel pitch (4.1) heiht: Como vemos en la figura 4.20 la altura del plano será el número de líneas visibles del plano. Y está dimensión se obtiene de i visible lines. Después de obtener el tamaño de la IplImage se creará una imagen de ese tamaño para ello se utiliza la siguiente función: IplImage* cvcreateimageheader(cvsize size,int depth,int channels); Esta función nos devolverá una IplImage, a esta función se le han pasado los siguientes parámetros: size: Las dimensiones de la imagen calculadas anteriormente.

114 4.4. Fase de implementación 97 depth: Profundidad que se le asignará a la imagen. Se ha elegido 8 bit de enteros sin signo para representar los valores de color de la imagen. En OpenCV se representa mediante la constante IPL DEPTH 8U. channels: Indica el número de canales de color que va a tener la imagen. Le asignamos i pixel pitch que nos proporciona el número de canales de color que tiene cada píxel. Por lo que así se obtendrá una IplImage de las dimensiones, profundidad y color requeridos. Pero esta imagen no es más que un esqueleto que no contiene todavía realmente los datos del plane t. El siguiente paso es asignar los datos del plano a la estructura IplImage, recién creada. Como se puede observar en la tabla 4.12, las estructuras de datos IplImage se diferencian respecto a las picture t y sus planos en que las imágenes no son almacenadas por píxel sino que son almacenadas como arrays de niveles de color. Estos arrays suelen estar almacenados en orden BGR. Y este array está representado en imagedata[] como se puede observar en la siguiente tabla. imagedata[0] imagedata[1] imagedata[2] imagedata[3] imagedata[4] imagedata[5] B G R B G R Cuadro 4.14: Campos del array ImageData En cada plane t se guardan los datos relativos a los píxeles del plano en el puntero p pixel, por lo que habrá que introducir estos datos en el campo imagedata de IplImage. Para realizar esta acción se ha usado la siguiente función: void cvsetdata( CvArr* array, void* data, int step ) Que permite introducir los datos data dentro de array de longitud step in bytes. Por lo que como parámetros de la función se le ha pasado: array: Se le ha pasado el campo imagedata de la IplImage que se ha creado. data: Los datos que queremos copiar dentro de array en este caso p pixel campo de plane t.

115 4.4. Fase de implementación 98 step: Es el número de campos columnas que va a tener el array, en nuestro caso uno para cada canal de color; es decir, le pasamos i pitch de plane t. Realizando esta copia de datos quedaría totalmente transformado un plano t en una IplImage. Ahora se debe realizar todas estas acciones para cada uno de los planos de picture t. A continuación se puede ver el algoritmo completo de transformación que a partir de una picture t obtiene un array de IplImage, una por cada plano de picture t. Listing 4.4: Algoritmo de tranformación de picture t a IplImage 1 p l a n e s = p sys >p p r o c i m a g e >i p l a n e s ; 2 p sys >i c v i m a g e s i z e = p l a n e s ; 3 f o r ( i = 0 ; i < p l a n e s ; i ++ ) { 4 sz = c v S i z e ( abs ( p sys >p p roc i mage >p [ i ]. i v i s i b l e p i t c h / 5 p sys >p p roc i mage >p [ i ]. i p i x e l p i t c h ), 6 abs ( p sys >p p roc i mage >p [ i ]. i v i s i b l e l i n e s ) ) ; 7 p sys >p c v i m a g e [ i ] = cvcreateimageheader ( sz, IPL DEPTH 8U, 8 p sys >p p roc i mage >p [ i ]. i p i x e l p i t c h ) ; 9 c v S e t D a t a ( p sys >p c v i m a g e [ i ], 10 ( char ) ( p sys >p p roc i mage >p [ i ]. p p i x e l s ), p sys >p p r o c i mage >p [ i ]. i p i t c h ) ; 11 } Como podemos ver en el algoritmo a partir de la imagen p proc image que se encuentra dentro de la estructura p sys se obtendrá la matriz de IplImage p cv image que es también un campo de p sys Filtrado de cada frame por separado Tras obtener una imagen en formato OpenCV es el momento de poder filtrarla, para ello se podrá utilizar cualquier filtro de OpenCV. En esta sección se explicará como se ha implementado el filtro para la detección de gestos de manos y como se ha aplicado el clasificador

116 4.4. Fase de implementación 99 de caras para realizar el filtro de detección de rostros. La posibilidad de añadir nuevos filtros es muy grande ya que OpenCV es una herramienta con una amplia gama de funciones que permiten realizar todo tipo de acciones con imágenes Filtro de detección de caras Este filtro a partir de una IplImage de OpenCV detectará si en ésta hay alguna cara humana modificando la imagen original marcando la cara con un círculo. Primero, se debe suavizar la imagen y pasarla a escala de grises, ya que los colores no son interesantes para poder buscar una cara, ya que simplemente nos centraremos en formas geométricas. Para realizar esta acción, se utiliza la siguiente función de OpenCV que nos dará la imagen de entrada en escala de grises: cvcvtcolor(iplimage orig, IplImage dest, CV_GRAY2GRAY) Cuando se obtiene una imagen con las dimensiones y colores adecuado se procederá a la detección de caras en la imagen. Para ello se utilizará la siguiente función: CvSeq* cvhaardetectobjects( const IplImage* img, vhidhaarclassifiercascade* cascade, CvMemStorage* storage, double scale_factor, int min_neighbors, int flags); Esta función encuentra regiones rectangulares en la imagen de entrada que tienen una gran probabilidad de contener los objetos para los que el parámetro cascade ha sido entrenado, devolviendo estas regiones como una secuencia de rectángulos. Esta función escanea la imagen varias veces en diferentes escalas. Aplicando algoritmos de heurística para reducir el número de regiones analizadas. Por lo que simplemente se deberá pasar como parámetro un CvHidHaarClassifierCascade entrenado para detectar caras. Estos clasificadores son archivos XML y en particular se ha usado un clasificador de OpenCV que nos permite encontrar caras de frente. Este clasificador es haarcascade frontalface alt.xml.

117 4.4. Fase de implementación 100 Después se obtendrá una secuencia de rectángulos donde se encuentran las caras por lo que lo único que se debe hacer es recorrer esta secuencia e ir marcando con un círculo cada una de las caras Detección de manos Al contrario que con la detección de caras, para el reconocimiento de manos OpenCV no dispone de ningún clasificador entrenado para realizar esta labor. Por lo que se ha implementado dicho clasificador para este proyecto. Realizar un clasificador requiere un largo y tedioso proceso. En la figura 4.21 se pueden ver las diferentes etapas que se han seguido para realizar el clasificador. Figura 4.21: Etapas para realizar el clasificador de manos El primer paso que se debe seguir para crear el clasificador será tomar las imágenes que van a ser utilizadas para entrenar dicho clasificador. Estas imágenes son de dos tipos: Imágenes negativas: Son imágenes tomadas de forma arbitraria. Lo más importante de estas imágenes, es que no contengan el objeto a clasificar, en este caso que no contengan

118 4.4. Fase de implementación 101 ninguna mano. Estas imágenes pueden ser imágenes de diferentes lugares. Para realizar el clasificador se han usado 5000 imágenes. En la figura 4.22 se puede observar una pequeña muestra de estas imágenes. Figura 4.22: Ejemplo de la muestra de imágenes negativas utilizadas Imágenes Positivas: Son imágenes en las que se encuentra el objeto a clasificar de una forma clara en este caso, imágenes de manos. Para realizar el clasificador se han tomado más de 2500 imágenes de las que finalmente se han utilizado 1400 imágenes. Estas imágenes han sido tomadas desde diferentes ángulos, con diferentes fondos y diferente iluminación. En la siguiente figura podemos observar un ejemplo de las imágenes tomadas.

119 4.4. Fase de implementación 102 Figura 4.23: Ejemplo de las imágenes positivas utilizadas Una vez adquiridas las imágenes se pasará a la siguiente etapa, crear la muestra. Para crear la muestra se utilizará el siguiente comando de OpenCV: opencv-createsamples -info positives/info.txt -vec infovec.vec -num w 20 -h 20 Donde num es el número de imágenes positivas, w y h la longitud que se desea que tengan las imágenes de muestra de salida, -vec el vector de salida e info.txt es un archivo de texto que contiene la información de donde se encuentran las manos en las imágenes positivas. Este archivo tiene la siguiente estructura: Ruta_imagen número x y ancho largo Por lo que en cada una de las 1400 imágenes se deberán obtener las dimensiones y coordenadas de donde se encuentra la mano. Para facilitar esta tarea se ha implementado una herramienta de marcado utilizando OpenCV, que creará el archivo de texto automáticamente y permitirá marcar las manos con un rectángulo utilizando el ratón. Tras realizar este proceso se creará el vector que contiene las imágenes de muestra, estas imágenes estarán normalizadas, en escala de grises y con el tamaño adecuado. En la figura 4.24 podemos encontrar un pequeño ejemplo de la muestra generada.

120 4.4. Fase de implementación 103 Figura 4.24: Ejemplo de la muestra La siguiente etapa, después de crear la muestra, es la de entrenamiento del clasificador. Para ello se ha utilizado el siguiente comando de OpenCV: opencv-haartraining -data trainout -vec infovec.vec -bg negatives.txt -nstages 30 -nsplits 2 -minhitrate maxfalsealarm 0.5 -npos neg w 20 -h 20 -mem 700 -mode ALL Donde cada uno de los argumentos tienen el siguiente significado: data: Ruta de salida del clasificador. vec: Vector de la muestra que se ha creado en la fase anterior. bg: Archivo de texto con la ruta de las imágenes negativas. nstages: Número de etapas que van a ser entrenadas. A un mayor número de etapas, más potente será el clasificador. En este caso se han usado 30 etapas, que es un número alto. nsplit: Determina la debilidad del clasificador a utilizar. En nuestro caso es 2, lo que indica que se utilizará el clasificador CART con 2 divisiones internas de nodos. minhitrate: Mínimo rango de cada etapa. Se estima a partir del número de etapas. maxfalsealarm: Máximo rango que se permite de falsas alarmas para cada etapa del clasificador. Cuanto mayor sea este rango, peor será el clasificador.

121 4.4. Fase de implementación 104 npos: Número de elementos positivos de la muestra. neg: Número de elementos negativos de la muestra. w y h: Longitud de las imágenes. mem: Memoria que se va a utilizar para el proceso de entrenamiento. Este entrenamiento de OpenCV esta basado en AdaBoost [33] que es un algoritmo de aprendizaje que se centra en 2 aspectos importantes: Seleccionar un conjunto de características que representen la mano. Entrenar este clasificador con una combinación lineal de las mejores características. La fase de entrenamiento tiene un alto nivel computacional y necesita varias horas para finalizar el proceso. En este caso se tardaron 20 horas en tener un clasificador robusto. En el capítulo de resultados se describirán los resultados obtenidos. Cuando la fase de entrenamiento ha terminado disponemos de un clasificador cascade en formato XML que podrá ser usado de la misma forma que en la detección de caras; es decir, se creará un algoritmo que a partir de una imagen de entrada nos diga si contiene alguna mano. Para ello se realizará el proceso ya explicado en el caso de la detección de caras: 1. Se normalizará la imagen de entrada. 2. Se pasará a escala de grises. 3. Se pondrá en el tamaño adecuado. 4. Se usará el método objectdetect pasándole como parámetros la imagen de entrada y el clasificador cascade que se ha creado. Tras realizar este proceso, se conocerá en cada imagen si hay una mano y si es así, las coordenadas exactas donde se encuentra. Estos datos serán mandados al reconocedor de gestos para que diga si esa mano está realizando alguno de los gestos. La forma de implementar el reconocedor de gestos será explicada en la siguiente sección.

122 4.4. Fase de implementación Filtro de reconocimiento de gestos Tras obtener las imágenes de las manos, estamos preparados para implementar el algoritmo de reconocimiento de gestos. Para nosotros, un gesto va a ser cualquier cambio o movimiento desde una posición original de la mano (mano abierta) a una nueva forma o posición, por ejemplo cerrar el puño, apuntar con el dedo, mover un dedo, etc. En la figura 4.25 se muestran algunos ejemplos de posibles gestos. Figura 4.25: Ejemplo de posibles gestos Al detector de gestos le irán llegando, una a una, la secuencia de manos que va detectando el detector de manos. Por lo que se deberá conocer en cada momento, qué cambios se han ido produciendo en la mano con respecto de la mano anterior. Sólo nos centraremos en los cambios de una imagen respecto a la otra. Para ello se ha realizado el siguiente proceso: Se irá guardando siempre la última imagen de mano procesada, para compararla con la siguiente. Cuando llegue una nueva imagen de una mano, se comparará con la última imagen para saber los cambios que se han producido. Con la librería OpenCV disponemos de la siguiente función que nos va a permitir obtener la diferencia de dos imágenes en una nueva imagen: cvabsdiff (img1, img2, resultado);

123 4.4. Fase de implementación 106 Por lo que con esta función obtendremos una nueva imagen que representa únicamente los cambios producidos entre las dos últimas imágenes. Será necesario representar en una única imagen un gesto y servirá como patrón para comparar el grado de parecido que tiene con otras imágenes. Para formar las imágenes únicas que representen el gesto, se irán añadiendo a una imagen las diferencias que se van produciendo entre las dos últimas imágenes. Para diferenciar el orden en el que se han producido los cambios se utilizan distintos colores: Se usará el color rojo para representar los cambios más recientes que se han producido. El color azul representará los cambios más antiguos en la imagen. Cuando llega una nueva imagen se compara con la anterior se obtiene la diferencia y esta diferencia se añade en color rojo a la imagen que va formando el gesto pasando a colores más azules la parte del gesto que ya contiene la imagen y desapareciendo de la imagen las partes más antiguas (en color azul). Figura 4.26: Proceso de cambios de color si no hay cambios en la imagen En la figura 4.28 se puede observar como pasan los colores de rojo a azul de una mano que no realiza ningún movimiento. Finalmente la imagen desaparece ya que no se produce ningún cambio en la mano. Por lo que finalmente, se obtendrá una única imagen con colores azules y rojos que represente el gesto. En la siguiente figura se muestra la evolución de la imagen cuando se realiza el gesto de cerrar el puño, la imagen señalada sería cuando se ha finalizado el gesto y sería la imagen que sirve de muestra del gesto.

124 4.4. Fase de implementación 107 Figura 4.27: Proceso de gesto En la imagen marcada vemos que la parte azul corresponde a la posición original de la mano y la roja al movimiento que ha realizado (cerrar el puño). A continuación se mostrarán las partes más importantes del algoritmo que lleva a cabo todo el proceso explicado. Listing 4.5: Algoritmo de detección de gestos 1 i f (! l a s t ) 2 l a s t = cvcloneimage ( s m a l l i m g ) ; 3 cvabsdiff ( small img, l a s t, l a s t ) ; 4 c v C o n v e r t S c a l e ( l a s t, l a s t, ) ; 5 c v C o n v e r t S c a l e ( r e s, r e s, 0. 9, 0.5) ; 6 / / ponemos l o s cambios de e s t e frame 7 c v S e t ( r e s, c v S c a l a r ( ), l a s t ) ; 8 / / ahora l a u l t i m a es e s t e frame 9 cvreleaseimage (& l a s t ) ; 10 l a s t = s m a l l i m g ; 11 / / l a componente r o j a es r e s d i r e c t a m e n t e 12 I p l I m a g e c r e s = c vcreateimage (WSIZE, IPL DEPTH 8U, 3) ; 13 c v S e t Z e r o ( c r e s ) ; 14 cvmerge ( 0, 0, r e s, 0, c r e s ) ; / / BGR 15 / / l a componente a z u l es 255 r e s 16 I p l I m a g e b l u e = c v C reateimage ( WSIZE, IPL DEPTH 8U, 1) ;

125 4.4. Fase de implementación c v S e t Z e r o ( b l u e ) ; 18 cvsubrs ( r e s, c v S c a l a r ( ), blue, r e s ) ; 19 cvmerge ( blue, 0, 0, 0, c r e s ) ; / / Mezcla de l a componente a z u l y r o j a El sistema dispondrá de varias imágenes patrones de gestos (de colores azul y rojo) con las que comparar, y si el grado de parecido entre la imagen patrón de un gesto y la imagen que se ha creado es muy alto se determinará que ese gesto se ha producido. Estas imágenes patrones son almacenadas a través de la clase CodeBook que guarda las rutas de donde se almacenan realmente estas imágenes y dispone de 2 métodos importantes: void insert(iplimage* img, std::string name): Función que permite insertar nuevas imágenes en el Codebook. IplImage* findsimilar(iplimage* img, double dif, std::string name): Función que devuelve la imagen almacenada en el codebook más parecida a img almacenando en dif el valor de la diferencia entre ambas imágenes. Esta función es utilizada para obtener la imagen más similar a una dada y así conocer si esta imagen coincide con alguno de los gestos almacenados en CodeBook. Figura 4.28: Ejemplo de imagen patrón que representa cerrar el puño y mover el dedo índice Rehacer la señal Cuando acaba el proceso de filtrado el Filtro le da la nueva IplImage al Conversor. Y este debe convertir la imagen al formato de VLC. En esta sección se muestra como se ha implementado este proceso.

126 4.4. Fase de implementación Convertir de IplImage a picture t Al diseñar el sistema se pensó en realizar la función convertirtopicture que aceptara una IplImage como parámetro y devolviera esa imagen en una estructura picture t. Pero al realizar la implementación del caso contrario (pasar de picture t a IplImage) se ha observado que este proceso ya no es necesario. Esto es debido a que tras realizar la conversión del algoritmo 4.5 cualquier modificación que se realice en la IplImage se hará también en la imagen original. Ya que al asignar los datos del plano a los datos de la IplImage con la función: cvsetdata( p_sys->p_cv_image[i], (char*)(p_sys->p_proc_image->p[i].p_pixels), p_sys->p_proc_image->p[i].i_pitch ); Cuando se modifique p sys->p cv image[i] estos cambios se harán automáticamente en p sys- >p proc image->p[i] ya que con la función cvsetdata hace que estas dos estructuras estén compartiendo los mismos datos. La ganancia con respecto a la eficiencia del sistema es muy grande, ya que se ahorrará el tiempo de realizar la conversión desde IplImage a picture t Enviar la señal Tras realizar todo el proceso anterior, el usuario tiene la opción de enviar la señal a otro equipo a través de la red, creando un nuevo flujo rtsp. Al igual que cuando se captura la señal rtsp, nuestro programa se abstrae de estas acciones usando las funcionalidades de VLC. Para realizar esta acción si el usuario ha introducido esta opción automáticamente se creará un script que ejecutará VLC en modo telnet con una dirección,un puerto y una contraseña: % vlc --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host :5554 Y creará un objeto VOD ( Vídeo On Demand) con la información de la rtsp de origen y que lance el plugin:

127 4.4. Fase de implementación 110 new Test vod enabled setup Test input rtsp://direccion_de_captura --vout-filter Capture Por lo que se irá creando un nuevo flujo que será un filtrado del flujo original que cualquier otro usuario puede capturar con vlc desde otra maquina conectada a través de la red. Para ello, simplemente ese usuario deberá introducir la nueva dirección rtsp: vlc rtsp://server:5554/test Mostrar el vídeo El usuario no tiene por qué querer mandar la señal a otras máquinas, sino que quizás desea simplemente ir mostrando el vídeo filtrado en su propio ordenador. Para ello, el método Render del plugin, cuando el Conversor le va dando las nuevas picture t filtradas, deberá decirle a VLC que saque por su salida de vídeo estas imágenes. Esto se hace con dos funciones principalmente: vout_datepicture(vout_thread_t *p_vout, picture_t *p_pic, date d) Con esta función se le asignarán a la nueva picture t el tiempo exacto en el que se tiene que reproducir. En nuestro caso, le asignaremos el tiempo en el que estaba previsto que se reproduciera la imagen original. Esto permitirá sincronizar el audio con el vídeo de forma correcta. Ahora sólo queda decir a vlc que reproduzca esta imagen y para ello se usa la función: vout_displaypicture(vout_thread_t *p_vout, picture_t *p_pic) A esta función se le pasa como parámetro el hilo de salida de vídeo y la picture t filtrada que se quiere reproducir. Como resultado las imágenes serán visualizadas por el usuario en su pantalla.

128 Capítulo 5 Resultados 5.1. Introducción 5.2. Resultados del proceso de captura Eficiencia al realizar la captura Posibilidad de trabajo distribuido 5.3. Resultados del clasificador de Manos 5.4. Resultados en la detección de gestos Eficiencia Interacción con el computador 5.1. Introducción En este capítulo se explicarán los resultados más importantes obtenidos a nivel de tiempo y eficiencia, tanto del proceso de captura como del proceso de filtrado. Además, se propondrán algunas de las posibilidades para las que se ha probado el software desarrollado Resultados del proceso de captura En esta sección se explicarán los resultados más importantes con respecto al proceso de captura de la señal RTSP. 111

129 5.2. Resultados del proceso de captura Eficiencia al realizar la captura Se han realizado mediciones de tiempo para comprobar la latencia del Plugin realizado. Para ello se ha medido el tiempo que tarda VLC en mostrar la señal en varias situaciones: Tiempo que se tarda sin que se realice la conversión VLC-OpenCV-VLC. Tiempo que se tarda realizando la conversión VLC-OpenCV-VLC. Haciendo una pequeña modificación en la imagen, que no suponga pérdida de tiempo, por lo que este tiempo no se tendrá en cuenta. A continuación, se detallarán y se compararán los resultados obtenidos en ambas mediciones:

130 5.2. Resultados del proceso de captura 113 Frame Con conversión Sin conversión Diferencia 1 0, , ,21 2 0, , ,12 3 0,3412 0, ,18 4 0, , ,24 5 0, , ,31 6 0, , ,28 7 0, , ,07 8 0, , ,13 9 0, , , ,2006 0, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,12 Cuadro 5.1: Tiempos en us de los 20 primeros frames En la tabla 5.1 vemos el tiempo obtenido en milisegundos de cada una de las medidas. Y la diferencia de tiempos entre las 2 medidas en un mismo frame. Calculando la diferencia media en los 50 primeros frames esta es de 0,15 us. Es decir, de media sólo se tardan 0,15 us en realizar la conversión de formato vlc a OpenCV y de nuevo a vlc. Esta diferencia es una cantidad muy pequeña que no se va a apreciar por el ojo humano cuando se reproduzca un flujo RTSP. En la siguiente figura se puede apreciar las diferencias entre las 2 medidas.

131 5.2. Resultados del proceso de captura 114 Figura 5.1: Tiempo obtenidos en la medidas realizando la conversión(azul) y sin realizar la conversión (rojo) Se puede concluir que el resultado obtenido es un resultado muy positivo ya que las diferencias en tiempo de utilizar nuestra aplicación y no utilizarla son prácticamente inexistentes Posibilidad de trabajo distribuido El trabajo de procesamiento y filtrado de vídeos puede ser una tarea costosa computacionalmente, por lo que es mejor que esta tarea pueda ser distribuida en varios ordenadores. El diseño del sistema permite realizar el procesamiento distribuido de una fuente de vídeo. Este trabajo en paralelo se puede realizar en varios computadores donde a cada uno de estos se le asignará un trabajo concreto. A continuación se explicarán las distintas formas de procesamiento que permite el sistema. La primera forma de trabajo distribuido que permite el sistema es que varios ordenadores reciban, procesen y filtren distintos flujos de vídeo RTSP para finalmente enviar de nuevo estos flujos a otra máquina que sea la encargada de unir todos los flujos de vídeo en un único flujo RTSP. En la siguiente figura se puede ver un esquema que representa esta idea.

132 5.2. Resultados del proceso de captura 115 Figura 5.2: Arquitectura distribuida: unión de flujos de vídeo Una de las posibles aplicaciones de este tipo de arquitecturas, puede ser a partir de imágenes de 3 cámaras distintas, formar una única imagen panorámica. Teniendo mayor eficiencia que si la imagen panorámica la mandara un única cámara, ya que de esta forma el filtrado de las imágenes se realizará de forma paralela en varias máquinas. Otra de las ventajas de este sistema es que se pueden conseguir imágenes con dimensiones superiores que si se utilizan cámaras panorámicas.

133 5.2. Resultados del proceso de captura 116 Figura 5.3: Imagen panorámica a partir de las fuentes de 3 cámaras El siguiente tipo de trabajo distribuido que se puede realizar con la aplicación, está enfocado a que cada computador realice una etapa del filtrado. Por ejemplo, para el detector de gestos, un computador podría realizar la tarea de encontrar las manos en el flujo principal y, posteriormente rehacer el flujo de vídeo conteniendo únicamente las imágenes de las manos, y este flujo será recibido por otro computador que realizará la tarea de detectar si esas manos contienen gestos. En la figura 5.4 se puede apreciar un esquema del diseño de esta idea.

134 5.2. Resultados del proceso de captura 117 Figura 5.4: Arquitectura distribuida: Filtrado por separado De esta forma el sistema es mucho más eficiente ya que mientras la máquina 2 esta detectando gestos en el frame n la máquina 1 detectará manos en el frame n+1. Por lo que, en este caso en particular, se realizará la tarea de filtrado el doble de rápido. La tercera forma de distribuir el trabajo esta basada en la misma forma de distribución que la estrategia anterior, es decir, que cada máquina realice una parte del filtro, pero en este caso, las 2 máquinas recibirán la misma señal de vídeo. Por lo que estas máquinas deberán comunicarse entre ellas para ver que tipo de filtrado realiza cada una. Por ejemplo, para nuestro filtro de detección de gestos nuevamente la máquina 1 realizará la detección de manos y la máquina 2 la de gestos. Como las 2 máquinas reciben la misma señal de vídeo, si la máquina 1 ha encontrado una mano en el frame n simplemente deberá decirle las coordenadas de dónde se encuentra la mano a la máquina 2 y ésta se encargará de detectar si es o no un gesto. Para

135 5.3. Resultados del clasificador de Manos 118 que ambos máquinas se comuniquen se utiliza un canal de eventos. La figura 5.5 resume el diseño de esta idea. Figura 5.5: Arquitectura distribuida: Filtrado por separado con la misma señal de vídeo 5.3. Resultados del clasificador de Manos Como se explicó en el capítulo anterior, la última fase del entrenamiento de un clasificador de objetos de OpenCV es la fase de pruebas, para realizar esta pruebas OpenCV dispone del siguiente comando: opencv-performance -data handdetector.xml -info info.txt Para realizar esta prueba se han utilizado 50 imágenes que contienen manos. En el archivo info.txt se le dice las coordenadas donde se encuentran las manos. Y la herramienta nos devuelve los siguientes datos: Objetos encontrados. Objetos perdidos. Falsos positivos.

136 5.3. Resultados del clasificador de Manos 119 Imagen Encontrados Perdidos Falsos Positivos

137 5.3. Resultados del clasificador de Manos Total Cuadro 5.2: Resultados de las pruebas del clasificador

138 5.3. Resultados del clasificador de Manos 121 En el cuadro 5.2 se dan los resultados obtenidos en las 50 imágenes de prueba. Se puede apreciar que el nivel de acierto es muy alto, ya que se alcanza un 96 % de aciertos; es decir, hay un 96 % de posibilidades de que si existe una mano en una imagen, el clasificador la encuentre. En la siguiente figura se pueden ver algunas de las imágenes de salida de las pruebas, en las que se ha producido acierto y ningún falso positivo. Figura 5.6: Imágenes resultado del test del clasificador En la tabla 5.2 se aprecia que se han producido 16 falsos positivos; es decir, que en las 50 imágenes se han marcado como manos 16 objetos que no son manos. Estos falsos positivos son debidos a las diferencias de ambientes, fondos y luminosidad. La ventaja es que estos falsos positivos suelen ser imágenes muy pequeñas que cuando se realice el filtrado, a través de la función ObjectDetect, serán descartados automáticamente. En la figura 5.7 se dan algunos ejemplos de los falsos positivos que se han producido.

139 5.4. Resultados en la detección de gestos 122 Figura 5.7: Imágenes resultado del test del clasificador con falsos positivos Con estos resultados se concluye que el clasificador tiene un alto grado de robustez y eficiencia, ya que su índice de aciertos es muy alto Resultados en la detección de gestos En esta sección se describirán los resultados más importantes que se han conseguido en la detección de gestos Eficiencia Al igual que con la parte del filtro encargada de detectar manos, se han realizado pruebas a este filtro que nos permiten comprobar la eficiencia de este detector de gestos. Como el detector de gestos no es un clasificador, no se podrá utilizar la herramienta opencv-performance y las pruebas se han realizado manualmente. Concretamente se han probado 2 gestos: Gesto 1: Pasar de la posición original mano abierta a la posición final mano cerrada.

140 5.4. Resultados en la detección de gestos 123 Figura 5.8: Gesto 1 Gesto 2: Pasar de la posición original mano abierta a la posición final mano cerrada y movimiento del dedo índice. Figura 5.9: Gesto 2 Se ha realizado cada uno de los gestos 100 veces para comprobar la eficiencia y robustez del sistema, en el siguiente cuadro se da un resumen de los resultados obtenidos. Gesto Resultado Gesto1 Gesto2 Aciertos Fallos 30 5 Falsos positivos 5 4 % Aciertos 70 % 95 % Cuadro 5.3: Resultados de las pruebas realizadas al detector de gestos El nivel de acierto en ambos gestos es muy alto. Se observa que los datos del gesto 2 son mucho mejores que los del gesto 1, ya que éstos alcanzan un acierto del 95 % esto es debido a que el gesto 2 tiene mucho más movimiento, y este detector de gestos está basado en el

Así de fácil. Cortar, descargar y convertir vídeos o sonidos. Controles avanzados del reproductor multimedia VLC

Así de fácil. Cortar, descargar y convertir vídeos o sonidos. Controles avanzados del reproductor multimedia VLC Así de fácil. Cortar, descargar y convertir vídeos o sonidos. Controles avanzados del reproductor multimedia VLC VLC media player es un reproductor multimedia y framework multimedia libre, de código abierto

Más detalles

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. http://www.icc.uji.es. CAPÍTULO 8: El nivel de transporte en Internet

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. http://www.icc.uji.es. CAPÍTULO 8: El nivel de transporte en Internet Redes (IS20) Ingeniería Técnica en Informática de Sistemas http://www.icc.uji.es CAPÍTULO 8: El nivel de transporte en Internet ÍNDICE 1. Introducción Curso 2002-2003 - Redes (IS20) -Capítulo 8 1 1. Introducción

Más detalles

PROTOCOLO DE TRANSPORTE EN TIEMPO REAL RTP

PROTOCOLO DE TRANSPORTE EN TIEMPO REAL RTP PROTOCOLO DE TRANSPORTE EN TIEMPO REAL RTP R EDES - 3º I NGENIERÍA T ÉCNICA I NFORMÁTICA D E S ISTEMAS Autor: Gil Cabezas, Jesús Curso 2008/2009 ( i62gicaj@uco.es) Volver al índice 1 Í NDICE D E C ONTENIDOS

Más detalles

Tecnología IP para videovigilancia... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el

Tecnología IP para videovigilancia... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el para videovigilancia....... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el protocolo IP. La tecnología de las cámaras de red permite al usuario

Más detalles

Yull Arturo Matamba Valencia Andrés Xavier Rogel Valarezo

Yull Arturo Matamba Valencia Andrés Xavier Rogel Valarezo Yull Arturo Matamba Valencia Andrés Xavier Rogel Valarezo Sustentación de velocidades de usuario hasta 144 kbit/s, con cobertura y movilidad completas en zonas extensas y hasta 2 Mbit/s, en situaciones

Más detalles

Tecnología Streaming

Tecnología Streaming UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA DEPARTAMENTO DE ELECTRÓNICA Tecnología Streaming Integrantes: Marcela Barria 201002019-3 Eduardo Hales 201030003-k Profesor: Agustín González Fecha: 26 de Agosto

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

e-netcamanpr INDICE: Manual de Instalación

e-netcamanpr INDICE: Manual de Instalación INDICE: INTRODUCCIÓN... 4 ELEMENTOS DEL SISTEMA.... 5 SOFTWARE.... 5 ARQUITECTURA DE LA SOLUCIÓN SOFTWARE.... 5 INSTALACIÓN DEL SISTEMA.... 8 CÁMARA.... 8 VELOCIDAD DEL VEHICULO.... 9 MODELO ACONSEJADO....

Más detalles

CELERINET ENERO-JUNIO 2013 ESPECIAL

CELERINET ENERO-JUNIO 2013 ESPECIAL 70 Seguridad en Voz sobre Redes de Datos Juan Carlos Flores García UANL-FCFM Universidad Autónoma de Nuevo León Facultad de Ciencias Físico Matemáticas San Nicolás de los Garza, Nuevo León, México Resumen:

Más detalles

MANUAL DE USUARIO. Introducción

MANUAL DE USUARIO. Introducción MANUAL DE USUARIO Introducción Este programa se ha diseñado para su uso como aplicación de videoconferencia multiplataforma. Emplea un protocolo de establecimiento de sesión llamado SIP, y se ha programado

Más detalles

Formatos de audio y vídeo: códecs

Formatos de audio y vídeo: códecs Formatos de audio y vídeo: códecs Antonio Yáñez Izquierdo Octubre 2011 Antonio Yáñez Izquierdo () Formatos de audio y vídeo: códecs Octubre 2011 1 / 23 Formatos de audio y vídeo: códecs Códecs Códecs Códecs

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

Tema 4.1: - TRANSPORTE-

Tema 4.1: - TRANSPORTE- Tema 4.1: - TRANSPORTE- -Introducción - Terminología OSI - Tipologia y complejidad - Servicios - Calidad de servicio - Conexiones de transporte - Transporte en Internet - Introducción. Su función básica

Más detalles

Capítulo 4: Requerimientos.

Capítulo 4: Requerimientos. Capítulo 4: Requerimientos. Una vez que se ha analizado con detalle los nuevos paradigmas en la educación, nos podemos dar cuenta que para poder apoyar cambios como estos y para poder desarrollar nuevos

Más detalles

Tecnologías de Streaming

Tecnologías de Streaming Tecnologías de Streaming Francisco José Suárez Alonso UNIVERSIDAD DE OVIEDO Área de Arquitectura y Tecnología de Computadores Curso 2010/2011 Tecnologías de Streaming Introducción Servicios Arquitectura

Más detalles

INSTITUTO TECNOLÓGICO DE SALINA CRUZ. Fundamentos De Redes. Semestre Agosto-Diciembre 2014. Reporte De Lectura

INSTITUTO TECNOLÓGICO DE SALINA CRUZ. Fundamentos De Redes. Semestre Agosto-Diciembre 2014. Reporte De Lectura INSTITUTO TECNOLÓGICO DE SALINA CRUZ Fundamentos De Redes Semestre Agosto-Diciembre 2014 Reporte De Lectura Lectura Capítulo IV UNIDAD 3: Capa de red y direccionamiento de la red: IPv4 NOMBRE: Liña Quecha

Más detalles

INFORMÁTICA IE. Términos a conocer y conceptos básicos. World Wide Web (WWW):

INFORMÁTICA IE. Términos a conocer y conceptos básicos. World Wide Web (WWW): INFORMÁTICA IE MÓDULO INTERNET Términos a conocer y conceptos básicos World Wide Web (WWW): Digamos, simplemente, que es un sistema de información, el sistema de información propio de Internet. Sus características

Más detalles

Capitulo I. Introducción

Capitulo I. Introducción Capitulo I. Introducción 1.1 Descripción del trabajo El ser humano, como todos sabemos tiene la necesidad de comunicarse, de ser escuchado y sobretodo interactuar con los demás seres vivos que lo rodean.

Más detalles

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET 1 EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET La familia de protocolos TCP/IP fue diseñada para permitir la interconexión entre distintas redes. El mejor ejemplo es Internet: se trata

Más detalles

1. Instala servicios de configuración dinámica, describiendo sus características y aplicaciones.

1. Instala servicios de configuración dinámica, describiendo sus características y aplicaciones. Módulo Profesional: Servicios en Red. Código: 0227. Resultados de aprendizaje y criterios de evaluación. 1. Instala servicios de configuración dinámica, describiendo sus características y aplicaciones.

Más detalles

Capas del Modelo ISO/OSI

Capas del Modelo ISO/OSI Modelo ISO/OSI Fue desarrollado en 1984 por la Organización Internacional de Estándares (ISO), una federación global de organizaciones que representa aproximadamente a 130 países. El núcleo de este estándar

Más detalles

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN Tabla de Contenidos LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN... 1 Tabla de Contenidos... 1 General... 2 Uso de los Lineamientos Estándares...

Más detalles

Aspectos Básicos de Networking

Aspectos Básicos de Networking Aspectos Básicos de Networking ASPECTOS BÁSICOS DE NETWORKING 1 Sesión No. 4 Nombre: Capa de transporte del modelo OSI Objetivo: Al término de la sesión el participante aplicará las principales características

Más detalles

UNIVERSIDAD DE SALAMANCA

UNIVERSIDAD DE SALAMANCA UNIVERSIDAD DE SALAMANCA FACULTAD DE CIENCIAS INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS Resumen del trabajo práctico realizado para la superación de la asignatura Proyecto Fin de Carrera. TÍTULO SISTEMA

Más detalles

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA E. SÁEZ, M. ORTIZ, F. QUILES, C. MORENO, L. GÓMEZ Área de Arquitectura y Tecnología de Computadores. Departamento de Arquitectura

Más detalles

TRANSMISION DIGITAL. PCM, Modulación por Codificación de Pulsos

TRANSMISION DIGITAL. PCM, Modulación por Codificación de Pulsos MODULACIÓN TRANSMISION DIGITAL La amplia naturaleza de las señales analógicas es evidente, cualquier forma de onda está disponible con toda seguridad en el ámbito analógico, nos encontramos con una onda

Más detalles

Fuente: http://www.kzgunea.net

Fuente: http://www.kzgunea.net APRENDE A NAVEGAR SERVICIOS DE INTERNET Internet es como el mercado del pueblo en día de feria. En el mercado los puestos se organizan por secciones: por un lado la fruta, por otro las hortalizas, por

Más detalles

LINEAMIENTOS DE VIDEOCONFERENCIA

LINEAMIENTOS DE VIDEOCONFERENCIA LINEAMIENTOS DE VIDEOCONFERENCIA 1 OBJETIVO Describir los lineamientos aplicados en la gestión y administración de los servicios de videoconferencia en las sedes de la Universidad Autónoma de Tamaulipas.

Más detalles

ATEL ASESORES C.A IP Multimedia Subsystem Prof. Diógenes Marcano

ATEL ASESORES C.A IP Multimedia Subsystem Prof. Diógenes Marcano SIP Capítulo 3 Pág. 1 SIP es un protocolo para señalización definido por el IETF según el RFC3261. SIP permite establecer, liberar y modificar sesiones multimedia y está basado en un modelo de transacciones

Más detalles

Características de los servicios de transferencia de contenidos multimedia

Características de los servicios de transferencia de contenidos multimedia Características de los servicios de transferencia de contenidos multimedia formador Ezequiel Llarena Borges formador Ezequiel Llarena Borges 1 Compresión o codificación del audio Tipos de compresión (Formatos

Más detalles

INSTALACIÓ N A3ERP. Informática para empresas INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

INSTALACIÓ N A3ERP. Informática para empresas INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS Página 1 de 20 INSTALACIÓ N A3ERP INTRODUCCIÓN La instalación de a3erp v9 ha sufrido una trasformación importante respecto a sus versiones anteriores. Cualquier instalación exige la existencia de un pc

Más detalles

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas: SISTEMAS DISTRIBUIDOS DE REDES 1. SISTEMAS DISTRIBUIDOS Introducción y generalidades La computación desde sus inicios ha sufrido muchos cambios, desde los grandes equipos que permitían realizar tareas

Más detalles

Introducción a las Redes de Computadoras. Obligatorio 2 2011

Introducción a las Redes de Computadoras. Obligatorio 2 2011 Introducción a las Redes de Computadoras Obligatorio 2 2011 Facultad de Ingeniería Instituto de Computación Departamento de Arquitectura de Sistemas Nota previa - IMPORTANTE Se debe cumplir íntegramente

Más detalles

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD Fecha última revisión: Diciembre 2010 Tareas Programadas TAREAS PROGRAMADAS... 3 LAS TAREAS PROGRAMADAS EN GOTELGEST.NET... 4 A) DAR DE ALTA UN USUARIO...

Más detalles

Person IP CRM Manual MOBILE

Person IP CRM Manual MOBILE Manual MOBILE División Informática BuscPerson Telecomunicaciones : Manual MOBILE 0.- Introducción 3 0.1 Configuración de los terminales 3 0.2 Acceso de Usuarios 3 1.- Funcionalidades CRM 5 1.1 Agenda del

Más detalles

Guía de uso del Cloud Datacenter de acens

Guía de uso del Cloud Datacenter de acens guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar

Más detalles

UNIVERSIDAD TECNICA DEL NORTE

UNIVERSIDAD TECNICA DEL NORTE UNIVERSIDAD TECNICA DEL NORTE FACULTAD DE INGENIERIA EN CIENCIAS APLICADAS ESCUELA DE INGENIERIA EN SISTEMAS COMPUTACIONALES MANUEL DE USUARIO TEMA: SISTEMA INFORMÁTICO PARA LA PROMOCIÓN Y PUBLICIDAD DE

Más detalles

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor

Más detalles

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y Capítulo VI Conclusiones En este capítulo abordaremos la comparación de las características principales y de las ventajas cada tecnología Web nos ofrece para el desarrollo de ciertas aplicaciones. También

Más detalles

Redes de Área Local: Configuración de una VPN en Windows XP

Redes de Área Local: Configuración de una VPN en Windows XP Redes de Área Local: Configuración de una VPN en Windows XP Tatiana Echegoyen Blasco Facultad de Informática UPV - Curso 2005/2006 Índice 1. Qué es una VPN?...2 2. Cómo funciona una VPN?...2 3. Por qué

Más detalles

FUNCIONALIDADES e-netcamanpr

FUNCIONALIDADES e-netcamanpr FUNCIONALIDADES e-netcamanpr DT-FN-0111.v.1.0 IProNet Sistemas 2009 e-netcamanpr es la solución de IProNet Sistemas para el reconocimiento y detección de matrículas. Un sistema automático de reconocimiento

Más detalles

Multimedia Streaming. Memoria del proyecto Streaming Multimedia (audio) Departamento de desarrollo de software. Lexon S.A.

Multimedia Streaming. Memoria del proyecto Streaming Multimedia (audio) Departamento de desarrollo de software. Lexon S.A. Multimedia Streaming Memoria del proyecto Streaming Multimedia (audio). Lexon S.A. Memoria del proyecto de Streaming de audio Introducción El proyecto desarrolla un sistema de transmisión unidireccional

Más detalles

Este documento se distribuye bajo los términos de la licencia Creative Commons by sa. http://creativecommons.org/licenses/by sa/2.

Este documento se distribuye bajo los términos de la licencia Creative Commons by sa. http://creativecommons.org/licenses/by sa/2. Análisis de aplicación: Visual Understanding Environment (VUE) Este documento ha sido elaborado por el Centro de excelencia de software libre de Castilla La Mancha (Ceslcam, http://ceslcam.com). Copyright

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

Clientes de XProtect Acceda a su vigilancia

Clientes de XProtect Acceda a su vigilancia Clientes de XProtect Acceda a su vigilancia Tres formas de ver la vídeovigilancia Para un fácil acceso a la vídeovigilancia, Milestone ofrece tres interfaces de usuario flexibles: XProtect Smart Client,

Más detalles

CONCLUSIONES 155 A través de cada uno de los capítulos del presente documento se han enumerado una serie herramientas de seguridad que forman parte del sistema de defensa de una red y que, controlan su

Más detalles

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento Qué es AT-Encrypt nos permitirá dotar de contraseña a cualquier documento o carpeta. Este documento o carpeta sólo será legible por aquel que conozca la contraseña El funcionamiento del cifrado (o encriptación)

Más detalles

Oficina Online. Manual del administrador

Oficina Online. Manual del administrador Oficina Online Manual del administrador 2/31 ÍNDICE El administrador 3 Consola de Administración 3 Administración 6 Usuarios 6 Ordenar listado de usuarios 6 Cambio de clave del Administrador Principal

Más detalles

Gestión de la Configuración

Gestión de la Configuración Gestión de la ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 1 ESTUDIO DE VIABILIDAD DEL SISTEMA... 2 ACTIVIDAD EVS-GC 1: DEFINICIÓN DE LOS REQUISITOS DE GESTIÓN DE CONFIGURACIÓN... 2 Tarea EVS-GC 1.1: Definición de

Más detalles

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Entre los más conocidos editores con interfaz de desarrollo tenemos: Herramientas de programación Para poder programar en ensamblador se precisa de algunas herramientas básicas, como un editor para introducir el código, un ensamblador para traducir el código a lenguaje

Más detalles

Ejercicios Tema 1 1.- Supongamos que hay exactamente un switch de paquetes entre un host que envía y un host que recibe. Las tasas de transmisión entre el host que envía y el que recibe son R 1 y R 2 respectivamente.

Más detalles

CAPÍTULO 3 VISUAL BASIC

CAPÍTULO 3 VISUAL BASIC CAPÍTULO 3 VISUAL BASIC 3.1 Visual Basic Microsoft Visual Basic es la actual y mejor representación del viejo lenguaje BASIC, le proporciona un sistema completo para el desarrollo de aplicaciones para

Más detalles

Seminario Electrónico de Soluciones Tecnológicas sobre VPNs de Extranets

Seminario Electrónico de Soluciones Tecnológicas sobre VPNs de Extranets Seminario Electrónico de Soluciones Tecnológicas sobre VPNs de Extranets 1 de 12 Seminario Electrónico de Soluciones Tecnológicas sobre VPNs de Extranets 3 Bienvenida. 4 Objetivos. 5 Interacciones de Negocios

Más detalles

MANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico)

MANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico) MANUAL DE AYUDA SAT Móvil (Movilidad del Servicio Técnico) Fecha última revisión: Abril 2015 INDICE DE CONTENIDOS INTRODUCCION SAT Móvil... 3 CONFIGURACIONES PREVIAS EN GOTELGEST.NET... 4 1. INSTALACIÓN

Más detalles

LiLa Portal Guía para profesores

LiLa Portal Guía para profesores Library of Labs Lecturer s Guide LiLa Portal Guía para profesores Se espera que los profesores se encarguen de gestionar el aprendizaje de los alumnos, por lo que su objetivo es seleccionar de la lista

Más detalles

INSTALACIÓN A3ERP INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

INSTALACIÓN A3ERP INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS INSTALACIÓN A3ERP INTRODUCCIÓN La instalación de a3erp v9 ha sufrido una trasformación importante respecto a sus versiones anteriores. Cualquier instalación exige la existencia de un pc al que le asignaremos

Más detalles

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl 1 Colección de Tesis Digitales Universidad de las Américas Puebla Morales Salcedo, Raúl En este último capitulo se hace un recuento de los logros alcanzados durante la elaboración de este proyecto de tesis,

Más detalles

Plan de ahorro en costes mediante telefonía IP

Plan de ahorro en costes mediante telefonía IP Plan de ahorro en costes mediante telefonía IP Sección de Telefonía IP IngeniaTIC Desarrollo S.L. PLAN DE AHORRO EN COSTES MEDIANTE TELEFONÍA IP Sección de Telefonía IP Introducción El presente documento

Más detalles

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014 RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014 FAMILIA PROFESIONAL: INFORMATICA Y COMUNICACIONES MATERIA: 28. DESARROLLO WEB EN ENTORNO SERVIDOR CURSO: 2º DE CFGS DESARROLLO DE APLICACIONES

Más detalles

CFGM. Servicios en red. Unidad 5 Servicio FTP. 2º SMR Servicios en Red

CFGM. Servicios en red. Unidad 5 Servicio FTP. 2º SMR Servicios en Red CFGM. Servicios en red Unidad 5 Servicio FTP CONTENIDOS 1.1. Cómo funciona el servicio FTP? 1.2. Características principales del servicio FTP 2. El cliente FTP 2.1. Uso del navegador web como cliente FTP

Más detalles

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia. DISCOS RAID Raid: redundant array of independent disks, quiere decir conjunto redundante de discos independientes. Es un sistema de almacenamiento de datos que utiliza varias unidades físicas para guardar

Más detalles

Maxpho Commerce 11. Gestión CSV. Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd

Maxpho Commerce 11. Gestión CSV. Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd Maxpho Commerce 11 Gestión CSV Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd Índice general 1 - Introducción... 3 1.1 - El archivo CSV... 3 1.2 - Módulo CSV en Maxpho... 3 1.3 - Módulo CSV

Más detalles

Análisis de aplicación: Cortafuegos de la distribución Zentyal

Análisis de aplicación: Cortafuegos de la distribución Zentyal Análisis de aplicación: Cortafuegos de la distribución Zentyal Este documento ha sido elaborado por el Centro de Apoyo Tecnológico a Emprendedores bilib, www.bilib.es Copyright 2011, Junta de Comunidades

Más detalles

Ayuda de Symantec pcanywhere Web Remote

Ayuda de Symantec pcanywhere Web Remote Ayuda de Symantec pcanywhere Web Remote Conexión desde un navegador web Este documento incluye los temas siguientes: Acerca de Symantec pcanywhere Web Remote Protección de la sesión de Web Remote Formas

Más detalles

TRANSFERENCIA DE FICHEROS FTP

TRANSFERENCIA DE FICHEROS FTP TRANSFERENCIA DE FICHEROS FTP INTRODUCCIÓN Internet basa su funcionamiento en un conjunto de protocolos de red sin los cuales la comunicación, a cualquier nivel, sería imposible. Algunos de los protocolos

Más detalles

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

Análisis de aplicación: TightVNC

Análisis de aplicación: TightVNC Análisis de aplicación: TightVNC Este documento ha sido elaborado por el Centro de Apoyo Tecnológico a Emprendedores bilib, www.bilib.es Copyright 2011, Junta de Comunidades de Castilla La Mancha. Este

Más detalles

GedicoPDA: software de preventa

GedicoPDA: software de preventa GedicoPDA: software de preventa GedicoPDA es un sistema integrado para la toma de pedidos de preventa y gestión de cobros diseñado para trabajar con ruteros de clientes. La aplicación PDA está perfectamente

Más detalles

CAPITULO I El Problema

CAPITULO I El Problema CAPITULO I El Problema 1. CAPITULO I EL PROBLEMA. 1.1. PLANTEAMIENTO DEL PROBLEMA. Desde su nacimiento la Facultad de Administración, Finanzas e Informática dispone del departamento de la biblioteca, con

Más detalles

GENERACIÓN DE TRANSFERENCIAS

GENERACIÓN DE TRANSFERENCIAS GENERACIÓN DE TRANSFERENCIAS 1 INFORMACIÓN BÁSICA La aplicación de generación de ficheros de transferencias permite generar fácilmente órdenes para que la Caja efectúe transferencias, creando una base

Más detalles

Protocolo PPP PPP Protocolo de Internet de línea serie (SLIP)

Protocolo PPP PPP Protocolo de Internet de línea serie (SLIP) Protocolo PPP 1 PPP Hoy en día, millones de usuarios necesitan conectar sus computadoras desde su asa a las computadoras de un proveedor de Internet para acceder a Internet También hay muchas personas

Más detalles

4. Programación Paralela

4. Programación Paralela 4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios

Más detalles

Informe de Avance IV

Informe de Avance IV Difusión Multimedial Inalámbrica IP: Informe de Avance IV 13-09-01 1/8 Universidad Técnica Federico Santa María Departamento de Electrónica Informe de Avance IV Proyecto FDI Difusión Multimedial Inalámbrica

Más detalles

Centro Universitario de Ciencias Exactas e Ingenierías DIVISION DE ELECTRONICA Y COMPUTACION

Centro Universitario de Ciencias Exactas e Ingenierías DIVISION DE ELECTRONICA Y COMPUTACION CYBERSYS SISTEMA ADMINISTRADOR DE CYBERCAFÉS José Eduardo González Pacheco Oceguera eduardo.gonzalez-pacheco@siemens.com Juvenal Guevara Velasco juvenal1@hotmail.com Marcos Sairick Sánchez Castañeda msanchez@redwoodsystems.com.mx

Más detalles

CAPÍTULO 1 Instrumentación Virtual

CAPÍTULO 1 Instrumentación Virtual CAPÍTULO 1 Instrumentación Virtual 1.1 Qué es Instrumentación Virtual? En las últimas décadas se han incrementado de manera considerable las aplicaciones que corren a través de redes debido al surgimiento

Más detalles

Capa de TRANSPORTE. Ing. José Martín Calixto Cely Original: Galo Valencia P.

Capa de TRANSPORTE. Ing. José Martín Calixto Cely Original: Galo Valencia P. Capa de TRANSPORTE Ing. José Martín Calixto Cely Original: Galo Valencia P. Capa de Transporte La Capa 1 crea y transporta las corrientes de bits; La Capa 2 encapsula los paquetes de datos en tramas, y

Más detalles

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar CAPITULO 4 Requerimientos, Análisis y Diseño El presente capítulo explica los pasos que se realizaron antes de implementar el sistema. Para esto, primero se explicarán los requerimientos que fueron solicitados

Más detalles

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web.

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web. Modulo I. Introducción a la Programación Web. 1.1 Servidor Web. Antes de analizar lo que es un servidor Web y llevara a cabo su instalación, es muy importante identificar diferentes elementos involucrados

Más detalles

1.4.1.2. Resumen... 1.4.2. ÁREA DE FACTURACIÓN::INFORMES::Pedidos...27 1.4.2.1. Detalle... 1.4.2.2. Resumen... 1.4.3. ÁREA DE

1.4.1.2. Resumen... 1.4.2. ÁREA DE FACTURACIÓN::INFORMES::Pedidos...27 1.4.2.1. Detalle... 1.4.2.2. Resumen... 1.4.3. ÁREA DE MANUAL DE USUARIO DE ABANQ 1 Índice de contenido 1 ÁREA DE FACTURACIÓN......4 1.1 ÁREA DE FACTURACIÓN::PRINCIPAL...4 1.1.1. ÁREA DE FACTURACIÓN::PRINCIPAL::EMPRESA...4 1.1.1.1. ÁREA DE FACTURACIÓN::PRINCIPAL::EMPRESA::General...4

Más detalles

En este capítulo se describe la forma de cómo se implementó el sistema de video

En este capítulo se describe la forma de cómo se implementó el sistema de video En este capítulo se describe la forma de cómo se implementó el sistema de video por medio de una cámara web y un servomecanismo que permitiera al usuario ver un experimento en el mismo instante en que

Más detalles

Capítulo 1 Documentos HTML5

Capítulo 1 Documentos HTML5 Capítulo 1 Documentos HTML5 1.1 Componentes básicos HTML5 provee básicamente tres características: estructura, estilo y funcionalidad. Nunca fue declarado oficialmente pero, incluso cuando algunas APIs

Más detalles

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta Configuración de una red con Windows Aunque existen múltiples sistemas operativos, el más utilizado en todo el mundo sigue siendo Windows de Microsoft. Por este motivo, vamos a aprender los pasos para

Más detalles

Formatos y Compatibilidad. Años anteriores al 2005 los formatos analógicos más comunes eran:

Formatos y Compatibilidad. Años anteriores al 2005 los formatos analógicos más comunes eran: Formatos y Compatibilidad Los formatos analógicos de video están desapareciendo rápidamente del mercado, abriéndole paso a una nueva generación de formatos de videos denominados digitales, con una calidad

Más detalles

ACCESO AL SERVIDOR EXCHANGE MEDIANTE OWA

ACCESO AL SERVIDOR EXCHANGE MEDIANTE OWA ACCESO AL SERVIDOR EXCHANGE MEDIANTE OWA El Acceso al correo a través de OWA (Outlook Web Access) es una herramienta que permite a los usuarios consultar sus mensajes en una interfaz Web a través de un

Más detalles

Utilización del sistema operativo GNU/ Linux en las netbooks

Utilización del sistema operativo GNU/ Linux en las netbooks Utilización del sistema operativo GNU/ Linux en las netbooks El sistema operativo es la pieza de software básica de un sistema, que permite manejar los recursos de la computadora, abrir programas, manejar

Más detalles

Infraestructura Tecnológica. Sesión 5: Arquitectura cliente-servidor

Infraestructura Tecnológica. Sesión 5: Arquitectura cliente-servidor Infraestructura Tecnológica Sesión 5: Arquitectura cliente-servidor Contextualización Dentro de los sistemas de comunicación que funcionan por medio de Internet podemos contemplar la arquitectura cliente-servidor.

Más detalles

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios INTRODUCCION Tema: Protocolo de la Capa de aplicación. FTP HTTP Autor: Julio Cesar Morejon Rios Qué es FTP? FTP (File Transfer Protocol) es un protocolo de transferencia de archivos entre sistemas conectados

Más detalles

Manual de usuario de IBAI BackupRemoto

Manual de usuario de IBAI BackupRemoto Manual de usuario de IBAI BackupRemoto Índice Cliente de IBAI BackupRemoto... 3 Descarga del cliente de IBAI BackupRemoto... 4 Instalación del cliente de IBAI BackupRemoto... 5 Instalación sobre Microsoft

Más detalles

El Modelo de Referencia OSI

El Modelo de Referencia OSI El Modelo de Referencia OSI Tabla de Contenidos 2. El Modelo de Referencia OSI... 2 2.1 Nivel físico...4 2.2 Nivel de enlace... 4 2.3 Nivel de red... 5 2.4 Nivel de transporte...5 2.5 Nivel de sesión...

Más detalles

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid MANUAL DE EMPRESA Modo de entrar en ÍCARO Para comenzar a subir una oferta de empleo, el acceso es a través del siguiente enlace: http://icaro.uam.es A continuación, aparecerá la página de inicio de la

Más detalles

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor. Procesamiento del lado del servidor La Programación del lado del servidor es una tecnología que consiste en el procesamiento de una petición de un usuario mediante la interpretación de un script en el

Más detalles

SAP BusinessObjects Edge BI Standard Package La solución de BI preferida para. Empresas en Crecimiento

SAP BusinessObjects Edge BI Standard Package La solución de BI preferida para. Empresas en Crecimiento SAP BusinessObjects Edge BI Standard Package La solución de BI preferida para Empresas en Crecimiento Portfolio SAP BusinessObjects Soluciones SAP para Empresas en Crecimiento Resumen Ejecutivo Inteligencia

Más detalles

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto INFORMÁTICA INFORMÁTICA 1 Sesión No. 4 Nombre: Procesador de Texto Contextualización La semana anterior revisamos los comandos que ofrece Word para el formato del texto, la configuración de la página,

Más detalles

TeCS. Sistema de ayuda a la gestión del desarrollo de producto cerámico

TeCS. Sistema de ayuda a la gestión del desarrollo de producto cerámico TeCS Sistema de ayuda a la gestión del desarrollo de producto cerámico En el origen de todo proyecto de éxito se halla la capacidad de encauzar y estructurar la creatividad TeCS ofrece un entorno de fácil

Más detalles

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable 1. Introducción. El Sistema de Administración de Información de un Negocio Franquiciable (SAINF)

Más detalles

Unidad III. Software para la administración de proyectos.

Unidad III. Software para la administración de proyectos. Unidad III Software para la administración de proyectos. 3.1 Herramientas de software para administrar proyectos. El software de administración de proyectos es un concepto que describe varios tipos de

Más detalles

Arquitectura de Aplicaciones

Arquitectura de Aplicaciones 1 Capítulo 13: Arquitectura de aplicaciones. - Sommerville Contenidos del capítulo 13.1 Sistemas de procesamiento de datos 13.2 Sistemas de procesamiento de transacciones 13.3 Sistemas de procesamiento

Más detalles

ELABORACIÓN DE TABLEROS DINÁMICOS DE COMUNICACIÓN CON EL PROGRAMA EDITOR TICO

ELABORACIÓN DE TABLEROS DINÁMICOS DE COMUNICACIÓN CON EL PROGRAMA EDITOR TICO ELABORACIÓN DE TABLEROS DINÁMICOS DE COMUNICACIÓN CON EL PROGRAMA (Tico 2.0) EDITOR TICO La idea principal que motivo este proyecto fue trasladar la definición tradicional de tablero de comunicación en

Más detalles