Está en la página 1de 47

TESIS

Preparada en el
Laboratorio de Tcnicas y Aplicaciones para la Multimedia Distribuida
Para la obtencin del ttulo de
LICENCIADO EN COMPUTACIN
De la Universidad Autnoma Metropolitana Unidad Iztapalapa

Mdulos software para la administracin de cmaras IP

Por

Asesor:

Andrs Flores Sanz


Moiss C . Marin Martinez
Dr. Luis Martin Rojas Crdenas

Octubre de 2004

Agradecimientos

Escribir estas lneas me tom un par de minutos, leerlas toma algunos segundos. Esta
brevedad no refleja el tiempo que fue necesario para dar vida a la oportunidad de
escribirlas.
Agradezco a POE la inspiracin que me ha dado su msica desde el 2000, y a las
personas que sin saberlo ayudaron a que este documento existiera, sin olvidar a las que
voluntariamente lo hicieron. Gracias.
Moiss

Estas breves letras son un tributo a mis padres, a mi madre por creer en mi y no
escuchar a los que le dijeron que no terminara la secundaria y a mi padre que me
ense que siempre hay un camino para llegar a lo deseado.
Gracias a ti mis expectativas van mas all de las fronteras y mi futuro me agrada cada
da ms, Gracias Mam.
No me rindo porque t no lo hiciste y lograste tu independencia, Gracias Pap.
Y algo extra.
Gracias Moiss por ensearme que un compaero de tesis puede convertirse en un
amigo de por vida, eres listo y vales mas de lo que crees. Se que tendrs una gran vida y
que la mereces. Lo aprend trabajando en esta tesis. Gracias Amigo.
Y gracias Ana por compartir y apoyarme en estos das en los que te he necesitado. No
sabes lo importante que fue Gracias Amor.
Andrs

Conjuntamente extendemos un agradecimiento al profesor Luis Martn quien nos


ofreci una oportunidad y nos permiti realizar este proyecto con l.
Las oportunidades de demostrar lo que uno puede hacer no se encuentran a diario y a las
personas que nos las brindan esperamos no fallarles, a usted profesor esperamos
haberle mostrado un poco de lo que podemos hacer y no haberle fallado.

Andrs y Moiss

Indice
Captulo 1.
Introduccin General
1.1 Introduccin
.
.
1.2 Objetivos del proyecto
.
.
1.3 Caractersticas de las Cmaras de red .
.
1.4 Caractersticas de la Cmara Axis 2100
.
1.5 Software para realizar aplicaciones de Telemonitoreo
1.6 JAVA vs C/C++
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

3
3
4
4
7
7

2.1 Descripcin del Sistema de Telemonitoreo


.
.
2.2 Caractersticas del Diseo Descendente para la Aplicacin
del Sistema de Telemonitoreo.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

10
12
12
13
18

Captulo 2
El Sistema de Telemonitoreo

Captulo 3
Despliegue de video por medio de Cambozola
3.1 Introduccin
.
3.2 Problemtica
.
3.3 Solucin propuesta
.
3.4 Implementacin de la solucin propuesta
3.5 Conclusiones
.

.
.
.
.
.

.
.
.
.
.

Captulo 4
Soporte para el manejo de planos arquitectnicos: imgenes vectoriales
4.1 Introduccin
.
4.2 Problemtica
.
4.3 Solucin propuesta
.
4.4 Implementacin de la solucin propuesta
4.5 Conclusiones
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

19
19
19
20
24

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

25
25
26
26
26
27
27
30
31

Captulo 5
Protocolo para la distribucin de video
5.1 Introduccin
.
.
5.2 Problemtica
.
.
5.3 Solucin propuesta
.
.
5.3.1 Definicin del protocolo de transmisin
.
5.3.2 Transferencia de una imagen fija
.
5.3.3 Transmisin de un conjunto de imgenes fijas
5.4 Implementacin de la solucin propuesta
.
5.5 Mejoras a la aplicacin
.
.
5.6 Conclusiones
.
.

Captulo 6
Conclusiones Generales y comentarios
6.1 Conclusiones Generales
6.2 Comentarios

.
.

.
.

.
.

.
.

.
.

.
.

32
32

Glosario
Bibliografa
Anexos

.
.
.

.
.
.

.
.
.

.
.
.

.
.
.

.
.
.

34
35
36

Captulo 1

Introduccin General

1.1 Introduccin
El telemonitoreo es un rea con muchas aplicaciones tanto en las actividades
cotidianas como para el control de procesos industriales, comnmente se utilizan dispositivos
analgicos con capacidades limitadas. Las aplicaciones de sistemas digitales IP para el
telemonitoreo abre un nmero de posibilidades tales como: monitoreo remoto sin limitaciones
a nivel planetario, bsqueda de imgenes y aprovechamiento de los dispositivos de
almacenamiento.
En este documento se explica el desarrollo de elementos que van encaminados a formar una
aplicacin para telemonitoreo completa. Se plantea la problemtica que presentan, la solucin
propuesta, su implementacin y finalmente exponemos nuestras conclusiones y comentarios
acerca de ese elemento y la informacin relacionada que encontramos en el proceso de
realizar esa tarea.

1.2 Objetivos del proyecto


El presente proyecto de investigacin, realizado bajo la coordinacin y supervisin del
Dr. Luis Martn Rojas Crdenas del Depto. de Ingeniera Elctrica, tiene los siguientes
objetivos:

o Aprender la programacin de aplicaciones multimedia en tiempo real.


o Crear funcionalidades sofisticadas para la vigilancia electrnica
o Disear un protocolo de transferencia para las necesidades del proyecto

1.3 Telemonitoreo va cmaras IP


Una cmara de red puede verse como una combinacin de una cmara y una
computadora. Cuenta con su propia direccin IP e integra funciones para comunicarse con
una red, se conecta directamente a la red como cualquier otro dispositivo, tiene integrados un
servidor http y ftp as como un cliente ftp y de correo. Algunas cmaras ms sofisticadas
integran funciones de deteccin de movimiento y salida de video analgico. Permiten acceder
a video en tiempo real desde cualquier computadora, reduciendo tiempo y costos, el video
puede almacenarse en locaciones distintas para mayor comodidad y seguridad. Pueden
colocarse en cualquier lugar mediante distintos esquemas de conexi n como LAN, DSL,
MODEM, adaptador inalmbrico o incluso telefona celular.
A diferencia de una web-cam una cmara de red es ms fcil de instalar, usar y administrar,
ofrece ms funcionalidades integradas y una mejor calidad de imagen y no necesita de una
computadora para conectarse a una red.
Una de las principales ventajas que una cmara de red tiene sobre una cmara analgica es la
capacidad de acceder a video en tiempo real desde cualquier lugar en cualquier momento,
adems una cmara analgica depende de cableado coaxial y videograbadoras, lo cual se ve
traducido en una mayor complejidad y costo.

1.4 Telemonitoreo con cmaras Axis 2100

Imagen 1. - Cmara axis 2100

Caractersticas Generales:
o Integra un servidor Web (con soporte para PHP3) y una interfaz de red.
o Utiliza como sistema operativo embedded Linux 2.0.33
o Soporta los protocolos TCP/IP, HTTP, FTP, SMTP, ARP, BOOTP, PPP, CHAP, PAP y DHCP.
Caractersticas de la Cmara:
o Cmara digital con color de 24 bits

Sensor de imagen
o ICX098AK Sony CCD con escaneo Progresivo RGB de de pulgada
o HxV: 659x494.
o Resolucin: 640x480 (pxeles)
Exposicin
o
o
o
o

Compensacin de luz
Control de ganancia automtico (AGC)
Balance de blanco automtico y visualizacin previa a la seleccin
Obturador electrnico: 1/30s - 1/30.000s (con adaptacin automtica)

Sensibilidad
o Iluminacin mxima: 10.000 lux
Lente:
o Foco 0,5 mm a infinito
o Lente estndar de 4,0 mm reemplazable con formato CS ( equivalente a una lente de una
cmara estndar de 35 mm con apertura de F2 . Es opcional una lente de 2,6 mm.)
Caractersticas del Hardware:
o
o
o
o

Utiliza el Chip de compresin de imgenes JPEG ARTPEC-1


Procesador ETRAX 100, 32 bits RISC, 100MIPS CPU
Memoria RAM de 8 MB
Memoria FLASH PROM de 2 MB

Alimentacin:
o Toma exterior de alimentacin 12V AC . Consumo mximo 7W.
Entorno operativo:
o Slo para instalaciones en interiores.
o Temperatura: 5- 40 C
o Humedad: 20-80%, no condensada.

Dimensiones y peso:
o
o
o
o

Alto: 4,1 cm
Ancho: 10,2 cm
Fondo: 14,7 cm
Peso: 0,24 kg

Conexiones:
o Cable par trenzado RJ45, conexin de red Ethernet 10/100 Mbit.
o Conexin mdem a travs del puerto RS-232, para uso dial- in o dial-out.
o Conector entrada/salida para activar la cmara en eventos externos.
Imgenes:
o
o
o
o
o

Hasta 10 imgenes/seg.
Imgenes fijas JPEG y motion-JPEG.
Compresin de imgenes a alta velocidad mediante hardware
Disponibles en 5 niveles de compresin.
Control de ancho de banda,

Entradas/Salidas:
o Conector Input/Output para activar la cmara con eventos externos
o Almacenamiento de imgenes en modo remoto va e- mail y FTP

Imagen 2. Componentes de la Cmara Axis 2100

Los componentes de la cmara capturan la imagen, que puede ser descrita como luz con
diferentes longitudes de onda, y la transforma en seales elctricas. Estas seales son
transformadas a seales digitales y transfe ridas a las funciones que comprimen la imagen y la
envan a la red.
Cabe destacar que la cmara de red Axis 2100 utiliza el chip dedicado a la compresin de
imgenes JPEG ARTPEC-1, de esta manera no interrumpe al procesador en el proceso de
compresin, con esto se utiliza la misma cantidad de tiempo para comprimir una imagen sin
importar que tan compleja es.

1.5 Software para realizar aplicaciones de Telemonitoreo


Las aplicaciones de Telemonitoreo pueden realizarse en cualquier lenguaje de
programacin que permita manejar conexiones bajo protocolos de Internet, desplegado de
imgenes en distintos formatos y video. Algunos lenguajes contienen funciones que facilitan
estas tareas, en algunos otros ser necesario implementar algunas o utilizar otras ya definidas
para obtener el funcionamiento deseado.
1.6 JAVA vs C/C++
Los sistemas operativos con los que tuvimos la posibilidad de trabajar durante este
proyecto fueron: Linux (Red Hat 9, Suse 8.2 , Suse 9) y Windows XP. Para poder realizar
pruebas simultaneas necesitbamos correr nuestras aplicaciones en distintos sistemas
operativos, por esta razn escogimos el lenguaje de programacin JAVA para desarrollarlas,
ya que este lenguaje de programacin permite ejecutar aplicaciones sobre distintas
plataformas, esta es una caracterstica que el lenguaje C/C++ no proporciona. En el caso de
C/C++ sera necesario recompilar el cdigo fuente del programa bajo el sistema operativo que
se vaya a utilizar, lo cual creara variaciones en el cdigo fuente original para llevar a cabo
una compilacin exitosa bajo Windows y una bajo Linux. Para mantener una sola versin del
cdigo fuente decidimos aprovechar la independencia de Sistema Operativo del lenguaje
JAVA.
Existen muchos editores para programar en JAVA, escogimos el editor Jbuilder 8 Personal
Edition porque nos pareci un buen punto de inicio para realizar aplicaciones en este lenguaje
dada la facilidad que proporciona para el manejo de eventos y diseo de interfaces grficas.

Captulo 2

El Sistema de Telemonitoreo

1.0 Descripcin del Sistema de Telemonitoreo


El trmino telemonitoreo no figura en el diccionario de la Real Academia Espaola,
tampoco la palabra en ingls telemonitoring lo hace en su correspondiente de la lengua
inglesa, por tal motivo es conveniente definir la manera en que utilizaremos este trmino.
Para propsitos de este documento utilizamos telemonitoreo para referirnos a la vigilancia
remota de un lugar mediante la transferencia de audio y/o video utilizando
telecomunicaciones.
El sistema de telemonitoreo que se consider en este trabajo se ilustra a continuacin::

Imagen 3. Sistema de Telemonitoreo

En esta ilustracin se aprecian las caractersticas del sistema, sus principales elementos son:

el conjunto de cmaras para vigilar el lugar, las cuales pueden monitorearse desde
cualquier punto de la red de rea local o bien en cualquier lugar del mundo mediante
la mayor red del mundo, Internet;

la aplicacin para administrar las cmaras, permitir tener un monitoreo organizado


de stas as como funcionalidades tales como:
-

vistas miniatura de todas las cmaras que se estn monitoreando,


un panel con las vistas miniatura de las cmaras y un plano con la ubicacin de
cada una de ellas,
deteccin de movimiento y
almacenamiento de imgenes y / o video en base a eventos

1.2 Caractersticas del Diseo Descendente para la Aplicacin del Sistema de Telemonitoreo.
Una buena manera de planear proyectos de software grandes es utilizar un diseo
descendente ( Top Down ), bajo este esquema de programacin cada tarea es descompuesta
en acciones ms simples para finalmente integrar los distintos mdulos en el proyecto final.
Bajo nuestro criterio, los mdulos en los que puede descomponerse esta aplicacin deben
atacar las siguientes tareas:

1) Mostrar un flujo de video proveniente de una cmara,


Entrada: La direccin IP de una cmara de red
Salida: Una ventana para cada direccin IP introducida

1) Mostrar una imagen vectorial en una ventana


Entrada: La ubicacin en disco de una imagen en algn formato vectorial
Salida: Una ventana que despliegue la imagen vectorial.

1) Mostrar 2 paneles en una ventana y crear ventanas hijas.


Descripcin: El panel derecho debe mostrar botones en posiciones introducidas
por el usuario, al dar clic en algn botn del panel derecho, se debe abrir una
nueva ventana hija en el panel izquierdo, cada botn del panel derecho debe
tener solamente una ventana hija en el lado izquierdo.

1) Deteccin de movimiento en 2 imgenes


Entradas: La ubicacin en disco de 2 imgenes similares, y un umbral de
percepcin de movimiento

Salida: Un mensaje que indique la existencia de movimiento.

La descripcin anterior de los mdulos da un panorama ms claro de cmo realizar la


aplicacin de administracin de cmaras que se utiliza en este Sistema de Telemonitoreo. Una
vez que se tienen los mdulos funcionando, se contina a la fase de comunicarlos para
acercarse a una primera versin de la aplicacin completa.
En el Captulo 2 se realiza el mdulo que resuelve la tarea de Mostrar un flujo de video
proveniente de una cmara, mientras que el Captulo 3 resuelve la tarea de Mostrar una
imagen vectorial en una ventana y se acerca a la problemtica que plantea la tarea 3 en lo
relacionado a ubicar botones en posiciones definidas por el usuario.

Captulo 3
Despliegue de video por medio de Cambozola
3.1 Introduccin

Cuando comenzamos a trabajar en esta rea del proyecto, tenamos como objetivo
continuar el trabajo hecho por un compaero cuyos esfuerzos estaban enfocados en la
realizacin de un applet, en Java, que mostrara una imagen proveniente de la cmara de red
Axis 2100 con la posibilidad de actualizarla. No utilizamos su investigacin porque
utilizamos una aproximacin distinta para atacar el problema de base, sin embargo, es
conveniente mencionar los problemas que se presentan bajo ese primer enfoque. l se
encontr con un problema: la direccin que utilizaba en el servidor http de la cmara para
recuperar una imagen le enviaba siempre la misma., es decir; tena un applet en Java que
mostraba siempre la misma imagen. Este problema se debe a que la direccin http en la
cmara ejecuta un script en CGI que se encarga de obtener una nueva imagen, este script no
se ejecutaba cuando el applet peda una nueva imagen, permitindole simplemente disfrutar
de una y solo una imagen digital.
Es posible utilizar una perspectiva diferente ya que la cmara Axis 2100 permite recuperar un
flujo de tipo MJPEG, esto es: Motion JPEG, imgenes JPEG consecutivas con marcadores
que indican dnde comienza y dnde termina cada una de ellas.

Imagen 4. Marcadores MJPEG

Es fcil imaginar las caractersticas de una aplicacin que pueda aprovechar un flujo de esta
naturaleza para recuperar las imgenes que contiene, podemos describir su funcionamiento
mediante el siguiente algoritmo:

0. Comenzar a recibir de la cmara el flujo MJPEG.


Repetir:
0. Copiar la informacin de una imagen en un buffer.
0. Desplegar el buffer en pantalla.
0. Esperar.
Hasta que se indique terminar.

El nivel de complejidad de una aplicacin como la que describimos en las lneas anteriores
radica principalmente en el uso eficiente del lenguaje de programacin que se elija para
desarrollarla.

10

Software Reutilizable
Por otra parte, existen muchos programas con una licencia del tipo GNU General
Public License, un licencia que permite, en pocas palabras, utilizar el software que se cobija
bajo ella, tomar partes de l, modificarlo e incluso redistribuirlo, siempre y cuando se
proporcione el cdigo fuente de todas las modificaciones realizadas para que otras personas
tengan las mismas facilidades que quienes lo utilizaron y / o modificaron; as como el respeto
de los autores originales.
La idea detrs de este tipo de licencias es precisamente ayudar a desarrolladores a
preocuparse en la problemtica principal de sus proyectos y no por los detalles bsicos que se
repiten en muchas otras aplicaciones; es decir, encaminarse hacia la creacin de chips de
software que puedan integrarse permitiendo avanzar en el desarrollo de un proyecto sin
detenerse a redescubrir el hilo negro ni resolver problemas ya resueltos de manera eficiente.

Cambozola v0.34
Cambozola v0.34, es un software con una licencia del tipo GNU, General Public
License. Su autor, Andy Wilcock, lo describe de la siguiente manera [13] :
Cambozola es un visor de flujos de imgenes como los producidos por webcams.
Netscape puede desplegarlos de manera correcta actualizando las imgenes como las
va recibiendo, pero algunos exploradores, como el Internet Explorer, no pueden
manejar este flujo y solo muestran la 1ra imagen. Cambozola es un ele mento para
utilizar en conjunci n con las pginas web, puede utilizarse en pginas para el
Internet Explorer as como para Nestcape. Tambin permite tener acceso a los flujos
desde la lnea de comando.

En otras palabras, Cambozola es un programa desarrollado en Java que muestra un flujo de


imgenes JPEG, permitiendo observar el flujo sin importar el navegador que se utilice, puede
funcionar como un applet en una pgina web o bien como una aplicacin.
A continuacin presentamos la manera en que utilizamos este software, proporcionado de
manera gratuita por su autor, para resolver el problema que se nos present en esta parte del
proyecto de investigacin, el cdigo fuente de la aplicacin se encuentra en los Anexos de
este documento.

11

3.2 Problemtica

Construir una aplicacin en Java para mostrar un flujo de video proveniente de una cmara de
red.

3.3 Solucin Propuesta


) Analizar el cdigo fuente y funcionamiento de cambozola v0.34
) Realizar un proyecto en JBuilder 8 Personal Edition, que integre las clases de
cambozola v0.34 tiles para satisfacer el problema planteado.
) Realizar pruebas con el proyecto obtenido para visualizar flujos de imgenes
provenientes de cmaras Axis ubicadas en distintos puntos geogrficos.

12

3.4 Implementacin de la solucin propuesta

a) Analizar el cdigo fuente y funcionamiento de cambozola v0.34

En la siguiente imagen se aprecian los componentes de Cambozola v0.34

Imagen 5. - Componentes de Cambozola v0.34

Accesories
Contiene el cdigo fuente de los accesorios que aparecen en la parte izquierda de la
ventana as como una imagen asociada a cada una de ellas.
Server
Contiene el cdigo fuente de un servidor de prueba que enva repetidamente un
conjunto de imgenes que se encuentran en testImages.
Shared
Contiene el cdigo fuente de las clases compartidas por el servidor y el cliente de este
software.

13

Viewer.java
La clase principal que permite establecer una conexin con un flujo MJPEG y
desplegarlo en una ventana.

Estableciendo la conexin
Las clases que permiten realizar la funcin principal de este software son las siguientes:
Viewer.java
StreamSplit.java
CamStream.java
El siguiente diagrama indica la manera en que los objetos de estas clases interactan.

Imagen 6. Interaccin de las clases

14

El funcionamiento es el siguiente, a un objeto de la clase Viewer se le indica una direccin IP


de la cual recibir el flujo, por ejemplo:
http://192.168.0.69/axis-cgi/mjpg/video.cgi?resolution=320x240
Este objeto inicializa las variables relacionadas con la direccin IP, configura los accesorios
activos y si todo marcha bien, instancia un nuevo objeto de la clase CamStream. Un objeto
de esta clase crea un socket con la direccin IP y el puerto 80, se auxilia adems de un objeto
de la clase StreamSplit para separar las imgenes del flujo mediante el mtodo
readToBoundary(String boundary), el resultado de este mtodo es almacenado en una variable
byte[] img para despus desplegarlo en pantalla.

b ) Realizar un proyecto en JBuilder 8 Personal Edition, que integre las clases de cambozola
v0.34 tiles para satisfacer el problema planteado.
JBuilder 8 Personal Edition proporciona una interfaz grfica que facilita la elaboracin y
control de proyectos realizados en Java, decidimos trabajar con esta versin porque es
gratuita, de esta manera contamos con las funcionalidades limitadas de un software legal.
Una vez entendido el funcionamiento de Cambozola, identificamos las modificaciones que
debamos realizar sobre la clase que realiza la conexin con el flujo MJPEG y lo despliega en
pantalla, Viewer.java, estas fueron:
-

Permitir recibir como parmetro la direccin IP del flujo MJPEG


Retirar el cdigo dependiente de ejecucin como applet
Habilitar los accesorios

Definimos una nueva clase dentro de package com.charliemouse.cambozola que incorpora


estas modificaciones con el nombre winClass.java
La aplicacin resultante, Visor MJPEG , consta de los siguientes archivos adems del package
com.charliemouse.cambozola :
Application1.java
Clase principal de este programa.
Instancia un nuevo objeto de tipo Marco1.
Marco1.java
Esta clase de interfaz crea un nuevo objeto de tipo winClass para cada direccin IP
que se le indique.
winClass.java
Esta clase establece la conexin con el flujo MJPEG y lo despliega en una ventana,
est basado en la clase Viewer.java

15

d ) Realizar pruebas con el proyecto obtenido para visualizar flujos de imgenes


provenientes de cmaras Axis ubicadas en distintos puntos geogrficos.
Escalabilidad
Al identificar las clases que participan en el funcionamiento de Cambozola, pudimos
delegar la responsabilidad de invocar esta funcionalidad primaria a una clase en un nivel
superior para poder tener una sola aplicacin ejecutando detrs la tarea de muchos clientes de
este software, por lo que la aplicacin permite realizar conexiones con varias cmaras a la
vez. Se realizaron pruebas sobre una conexin a 56KB con 6 cmaras y se obtenan intervalos
de actualizacin de entre 3 y 8 segundos.

Velocidad
Le toma a la aplicacin algunos segundos establecer la conexin con el flujo, una vez
realizada esta operacin pueden monitorearse ms cmaras que proporcionen un flujo de
imgenes MJPEG. Es ta aplicacin se prob sobre una conexin a 56KB y sobre la conexin
del laboratorio de Tcnicas y Aplicaciones para la Multimedia Distribuida, a manera
cualitativa podemos mencionar que la diferencia de velocidad es bastante notoria, mientras
que en una conexin casera de 56 KB las cmaras se refrescan en intervalos de tiempo ms
largo, una conexin ms rpida permite un monitoreo ms cercano al tiempo real.

A continuacin se muestran algunas imgenes del funcionamiento del Visor MJPEG.

Imagen 7. - Visor MJPEG

16

Imagen 8. - Ventana con accesorios

Imagen 9. Muestra de cmara

Imagen 10. - Muestra de cmara

17

3.5 Conclusiones
Sobre la planeacin y desarrollo
Ahora que nos encontramos redactando las tareas que realizamos en este proyecto, nos
damos cuenta que el tiempo utilizado para desarrollar la aplicacin que se describe en este
captulo fue excesivo. La razn de la divergencia entre el tiempo utilizado para la planeacin desarrollo y el tiempo, que ahora con la experiencia que no s dej el proyecto estimamos
necesario, se debe a los conocimientos mnimos que tenamos respecto a cmaras de red, al
lenguaje de programacin Java, al funcionamiento del esquema cliente - servidor y al formato
MJPEG.
Esta ignorancia, hasta entonces no culpable, tuvo que desaparecer para poder tener xito en el
objetivo de esta parte del proyecto de investigacin.
Sobre software libre y deteccin de movimiento
El software libre proporciona herramientas valiosas para el desarrollo, no solo rpido,
sino eficiente de proyectos, esta posibilidad de encontrar e integrar elementos existentes y
necesarios para problemticas nuevas permite que la humanidad avance en conjunto, ya que
ante nuestros conocimientos limitados sobre los temas de la naturaleza nuestra nica
posibilidad de tomar un poco de ella y obtener algo para beneficio general es brindarle un
golpe colectivo gracias a las ideas que algunos visionarios tienen..
Las cmaras de red integran aplicaciones que permiten distintas caractersticas de
administracin, sin embargo existen algunas otras aplicaciones desarrolladas por terceros que
extienden las funcionalidades que una cmara de este tipo ofrece. Los ejemplos que
conocemos son Cambozola [13] y Video Sensor 1.22 [15] [16], el primero ya lo describimos
en este captulo, el segundo ofrece la posibilidad de realizar deteccin de movimiento,
utilizando los recursos del equipo del usuario que accede a la pgina http de la cmara. Esta
aplicacin es un primer paso en la incorporacin de deteccin de movimiento para la
aplicacin encargada de la gestin de cmaras de red.

18

Captulo 4
Soporte para el manejo de planos arquitectnicos: imgenes vectoriales

4.1 Introduccin
Una de las funcionalidades que tendr el gestor de cmaras de red es poder ubicar
stas en un mapa, ya sea de un estadio, de un hipdromo, de un edificio o de una alberca.
Esta caracterstica permitir acceder a las cmaras de manera rpida mientras se est
consciente de su ubicacin en el entorno que se vigila.
El formato WMF (Windows Meta File) es un formato vectorial de imgenes creado por
Microsoft para ser utilizado en las plataformas Windows. Se diferencia de otros formatos de
imgenes como el JPEG porque cada elemento en la image n es independiente de la imagen
misma, vista como un solo elemento, permite adems la posibilidad de modificar su tamao
sin perdida de definicin y por lo regular el espacio que utiliza en disco es una fraccin del
espacio ocupado por la misma imagen en un formato no vectorial. Este formato de archivos se
utiliza por lo regular en clipart y logos, es claro que este formato no puede utilizarse para
fotos realistas con muchos detalles [12].
En relacin al gestor de cmaras, utilizar el formato vectorial WMF para representar los
mapas permite trabajar con archivos de tamao optimizado y poder realizar zoom in / out
sobre la imagen sin perder calidad.
Una alternativa a las imgenes WMF es el formato SVG (Scalable Vector Graphics) [14].
SVG es un lenguaje para describir imgenes en dos dimensiones en el formato XML, fue
creado por el World Wide Web Consortium (W3C), la industria sin fines de lucro con
especificaciones pblicas que creo HTML y XML. Ms de 20 organizaciones han particiado
en la definicin de SVG, algunos ejemplos son : Sun Microsystems, Adobe, Apple, IBM, y
Kodak. Este formato trabaja con la tecnologa java y sus especificaciones son pblicas.

4.2 Problemtica
Desarrollar una aplicacin que permita:
a) Mostrar imgenes vectoriales del formato WMF
b) Mostrar botones con posiciones especficas
4.3 Solucin propuesta
a) Mostrar imgenes vectoriales del formato WMF
Hay 2 opciones, la primera es desarrollar un visor para este tipo de imgenes, una tarea que
exige un tiempo considerable, pues requiere estudiar y analizar la especificacin del formato
as como de un conocimiento en el lenguaje de programacin bastante slido para que puedan
manipularse archivos a nivel de bytes con seguridad; la segunda opcin es utilizar visores de
licencia pblica

19

Decidimos utilizar la 2da aproximacin porque el tiempo con el que contamos es limitado,
adems de que nos permite dar una idea de la manera en que funcionar esta caracterstica en
el gestor de cmaras.
b) Mostrar botones con posiciones especficas
Utilizaremos un archivo de texto que contendr la ubicacin de los botones (que representan a
las cmaras), la ubicacin se refiere a coordenadas dentro de una ventana, en esta
aproximacin los botones son independientes de la imagen que se utilizar como mapa.

4.4 Implementacin de la solucin propuesta


a) Mostrar imgenes vectoriales del formato WMF
El visor que utilizamos es el WmfView 0.6 desarrollado por Albrecht Kleine [18], se
distribuye en el archivo WmfView06.tgz y contiene los siguientes elementos:

Imagen 11. Elementos de WmfView 0.6

Los archivos que permiten desplegar una imagen wmf en una ventana son WmfDecoder.java
y WmfView.java. La clase WmfView tiene proporciona el siguiente mtodo
public Image CreateWmfDecoder(String filename)
{
Image image;
try
{
WmfDecoder WDec=new WmfDecoder(new FileInputStream(filename));
image = createImage(WDec);
WDec=null;
}
catch (Exception ex)
{
ex.printStackTrace();
return null;
}
return image;
}

el cual recibe como argumento el nombre de un archivo wmf, instancia un objeto de tipo
WmfDecoder y crea una imagen a partir de l.

20

La clase WmfDecoder contiene los marcadores y elementos propios del formato wmf para
poder recuperar una imagen a partir de la informacin contenida en una imagen con este
formato.
Utilizando solo los elementos necesarios, el Visor de Imgenes WMF tiene los siguientes
archivos:

Imagen 12. Elementos de Visor de Imgenes WMF

Y funciona de la siguiente manera:


1. Se introduce el nombre de la imagen Wmf en la ventana principal y se da click en abrir:

Imagen 13. Ventana principal de Visor de Imgenes WMF

Al dar click en el boton Abrir se ejecuta el siguiente cdigo;


void btn1_actionPerformed(ActionEvent e) {
Image wmf;
WmfView IMG;
File f = new File(txtImagen.getText());
if(f.exists()){
lblStatus.setText("OK");
}
else{
lblStatus.setText("ERROR: No existe");
return;
}
IMG=new WmfView(txtImagen.getText(),false,false);
wmf=IMG.CreateWmfDecoder(txtImagen.getText());
TestBackgroundLayered T1=new TestBackgroundLayered(wmf);
T1.main(wmf);
}

El eve nto define un objeto de tipo Image y uno de tipo WmfView, despus de verificar que el
archivo existe instancia el objeto de tipo WmfView con el nombre del archivo, ejecuta el
mtodo .CreateWmfDecoder de este objeto para obtener la imagen que finalmente se utiliza
21

como argumento para instanciar un objeto de tipo TestBackgroundLayered, el cual es una


ventana que utiliza como fondo la imagen que se le indica como argumento.

Imagen 14. Visor de Imgenes WMF

Imagen 15. Imagen WMF

Pueden continuar abrindose ms imgenes repitiendo el paso anterior.

22

b) Mostrar botones con posiciones especficas


La idea es simple, definimos un arreglo de objetos de tipo botn:
Name= new JButton[b];
de un archivo de configuracin se obtiene el nmero de botones y la posicin de cada uno de
ellos. En el programa se utiliza un ciclo for para cargar cada botn en el arreglo y desplegarlo
en una ventana.
Por ejemplo, si en el archivo de configuracin se introduce la cadena 5151P5wP, se
indica que habrn 5 botones con las siguientes posiciones:
........b=5
49 53 0
49 80 1
241 53 2
241 119 3
241 80 4

El 1er elemento indica el nmero de botones, y el resto indica la posicin de cada uno de
ellos, es decir; se obtiene el equivalente en cdigo ASCII y se le suma 49. El archivo de
configuracin se utiliza de esta manera porque estaba en fase de desarrollo, lamentablemente
no pudimos continuar mejorando su diseo porque resulto ms importante desarrollar el
servidor-cliente que se describe en el siguiente captulo.

Con la cadena anterior se obtiene la siguiente distribucin:

Imagen 16. Ventana con arreglo de botones

23

4.5 Conclusiones

En esta parte de la tesis desarrollamos con xito una aplicacin que permite visualizar
imgenes WMF. Lamentablemente el visor en el que se basa la aplicacin sufre en desempeo
y veracidad al trabajar con imgenes formadas por muchos elementos, en los archivos de
ejemplo proporcionados con este documento, puede apreciarse que en algunos casos los
colores se ven alterados y en el peor de los casos hay elementos que se unen a otros mediante
trayectorias no planteadas originalmente. El archivo de prueba final, el mapa de la alberca
olmpica, es un claro ejemplo de las deficiencias del visor.

Imagen 17. Creditos de WMF2Viewer

Existe en visualizador de imgenes wmf en el mercado desarrollado por Piet Jonas, es


desarrollado en Java por Piet Jonas, y su licencia tiene un costo de $250 USD [17]. Este visor
no mostr ningn problema al desplegar imgenes con muchos elementos.
El programa que permite crear botones en una ventana se detuvo en fase de desarrollo porque
comenzamos a trabajar en el cliente-servidor de imgenes para una cmara de red Axis 2100
que se describe en el captulo 4 de este documento. Una etapa posterior requiere unir estas 2
pequeas aplicaciones en una sola para obtener la funcionalidad que se desea: mostrar las
cmaras (representadas mediante botones) sobre una imagen wmf con posiciones definidas en
un archivo de configuracin.

24

Captulo 5
Protocolo pa ra la distribucin de video
5.1 Introduccin

Las capacidades de cmputo de la cmara de red Axis 2100 hacen posible ejecutar
programas en ella, de esta manera no se utiliza tiempo del procesador en el cliente. La
aplicacin que se desea desarrollar para esta cmara es una que permita realizar deteccin de
movimiento en las imgenes que observa, de esta manera solo enva al cliente la informacin
relevante al entorno que se vigila, pues almacenar imgenes obtenidas en intervalos fijos
requieren de una gran cantidad de espacio, an siendo imgenes digitales. Si bien el
almacenamiento digital requiere menos espacio fsico que el almacenamiento analgico es
necesario hacerlo de manera inteligente, si se almacenan solo las imgenes de un lugar en las
que hubo movimiento, se ahorran recursos y tiempo.
El primer paso para desarrollar esta aplicacin es poder obtener 2 imgenes en cualquier
momento. La aplicacin servidor resuelve este punto al crear un directorio temporal en donde
se almacena la ltima imagen enviada a un cliente, as se tiene una imagen de referencia a
comparar con la nueva imagen que se pida. Pero las aplicaciones proporcionadas por el
fabricante permiten obtener imgenes de la cmara, por qu resulta importante hacer una
aplicacin para este mismo propsito? La respuesta es clara, para disponer de imgenes en la
cmara que puedan compararse cuando la parte de deteccin de movimiento est completa y
para tener un control sobre quienes acceden a la cmara al utilizar un puerto especfico y una
validacin diferente a la proporcionada por el fabricante.
5.2 Problemtica
Realizar una aplicacin cliente servidor de tal manera que el servidor pueda
ejecutarse en la cmara de red Axis 2100. El servidor debe implementar un mtodo para
validar al usuario que se conecta y utilizar un protocolo de transferencia de imgenes
apropiado.

25

5.3 Solucin propuesta


5.3.1 Definicin del protocolo de transmisin
El siguiente diagrama muestra el protocolo que decidimos utilizar:

Imagen 17. Especificacin del protocolo de transferencia.

El servidor puede enviar 2 tipos de mensajes:


0. Si la direccin IP est en la lista de direcciones vlidas se enva una imagen
dividida en mensajes de tamao fijo. El cliente recibir estos mensajes y terminara
cuando reciba un mensaje cuyo tamao sea menor al fijado. Este criterio de paro
se utiliza en otros protocolos de transferencia simple como TFTP.
0. Si la direccin IP no se encuentra en la lista, se enva el siguiente mensaje - error -

4.2.1

Transferencia de una imagen fija

El cliente enviar un mensaje al servidor (su contenido no importa, pues solo se


necesita para conocer la direccin IP), el servidor buscar en la lista de IPs vlidas al
cliente, si lo encuentra, comenzar a enviar fragmentos de imagen de tamao fijo hasta
terminar con la imagen. El cliente recibir los fragmentos hasta que aparezca uno de
tamao menor al fijado y en ese momento termina la conexin. Cada mensaje que
recibe lo desplegar en la salida estndar, esto permite dar ms flexibilidad al
momento de almacenar las imgenes.
El servidor mantendr abierto el puerto de peticiones desde que se inicia. Solo puede
darle servicio a un cliente a la vez.

26

4.2.1

Transmisin de un conjunto de imgenes fijas

El cliente esta diseado para solicitar una imagen, si se desea solicitar ms el cliente
debe ejecutarse muchas veces. Un visor para este servidor deber pasar por todo el
protocolo cuando necesite la siguiente imagen.

5.4 Implementacin de la solucin propuesta


Sobre las imgenes
El formato JFIF, es un formato JPEG con marcadores extra para permitir que tramas de bits
de una imagen JPEG puedan enviarse a una gran variedad de plataformas y aplicaciones. El
restart marker repite informacin que permite conocer las caractersticas de la imagen para
poder reconstruirla, esta informacin no se encuentra repetida en una imagen JPEG. esta
caracterstica permite sobreponerse a prdida de informacin al transferirla. La camara axis
2100 genera imgenes que cumplen con las especificaciones JFIF, pero no puede generar
marcadores para utilizar una fragmentacion lgica. Vase anexo Support case no. 30047.
Los marcadores se generan al momento de codificar la imagen, por lo tanto para introducir
nuestros propios marcadores es necesario decodificar y codificar una vez ms la imagen, lo
cual, dadas las caractersticas de la cmara, no es posible, pues deberamos incluir un
codificador JPEG en ella. Consideramos que una fragmentacin en un punto intermedio entre
la lgica y la que no toma en cue nta el formato de la imagen consistira en dividir la foto
utilizando los marcadores FF00, ya que estos marcadores en una primera examinacin
demostraron tener una aparicin distribuida a lo largo de los datos, lamentablemente, al
investigar el formato encontramos que la secue ncia FF00 no es el marcador 00; se utiliza 00
para indicar que FF no es principio de marcador sino datos de al imagen. Y dado que la
aparicin de este pseudo- marcador FF00 depende de la informacin de la imagen, no es
viable utilizarlo para fragmentar.
Por estas razones nuestro protocolo no utiliza una fragmentacion lgica.

27

Sobre el cliente
La implementacin del cliente se realizo partiendo de un esquema cliente servidor bastante
simple hasta cumplir con las caractersticas descritas en la solucin propuesta. A continuacin
se muestra el cdigo fuente de cliente.c

#include "net.c"
//en net.c se especifica el tamao de los paquetes en 10KB
#define DIRECCION 1
#define PUERTO
2
struct sockaddr_in serv;
int fd,len,i=0;
FILE *f2=NULL;
main (int argc, char *argv [])
{
char buffer [ETHSIZE]; //El buffer para almacenar la imagen
if (argc != 3) {
printf ("%s <IP address> <port>\n", argv [0]);
exit (1);
}

fd = create_UDP (&serv, argv [DIRECCION], atoi (argv [PUERTO]));


/* Se hace la qra peticin, el contenida de esta es irrelevante */
strcpy (buffer, "esta es una peticion desde el cliente");
send_UDP (fd, buffer, strlen (buffer) + 1, &serv);
while(1){ //Comienza a recibir la imagen
len=recv_UDP (fd, NULL, buffer, ETHSIZE);
for(i=0;i<len;i++)
printf("%c",buffer[i]); //Escribe en la salida estndar los paquetes.
if(len<ETHSIZE)
exit(0);
}
}

El cliente debe ejecutarse de la siguiente manera :


./cliente 148.206.49.71 7500 > img.g

De esta manera redirige a un archivo los mensajes que recibe. Este modo de funcionamiento
permite ser ms eficiente al momento de almacenar imgenes consecutivas pues puede
utilizarse un script que genere nombres consecutivos, basados en un contador de imagen o en
el reloj. Asi el cliente solo se encarga de realizar su tarea, pedir una imagen.

28

Sobre el servidor
Cuenta con 2 archivos de conviguracion iplist y task.list. El primero tiene el siguiente aspecto:
255.255.255.255
148.206.49.157
127.0.0.1
192.168.0.5
148.206.49.71
148.206.49.153
192.168.0.3
255.255.255.255

El segundo se necesita para poder ejecutar el servidor al iniciar la cmara, debe copiarse en el
directorio /etc en la camara. A continuacin se muestra su contenido:
once immune % /bin/bufferd : -start -buffername snap -snapshot -format
Foto.jpg -uri ftp://axis-cgi/jpg/640x480.jpg;
once % /mnt/flash/servidor;

Las instrucciones anteriores arrancan el buffer de imgenes en un directorio y ejecutan el


servidor. El funcionamiento del archivo task.list se explica con ms profundidad en nuestra
guia Axis 2100.
A continuacin se muestra el codigo fuente de servidor.c
#include "net.c"
#define PUERTO 7500
int fd,i=0,j=0,atam=0,ipvalida=0;
struct sockaddr_in cli, serv;
FILE *f1=NULL,*lista=NULL;
int main() {
char buffer[ETHSIZE];
char *s1=NULL,*iplista;
lista = fopen("/mnt/flash/iplist","r");
fd = create_UDP (&serv, NULL, PUERTO);

///El ciclo infinito del servidor


///Consiste en esperar peticiones, verificar la IP, obtener una nueva ////imagen y
enviarla en pedazos de 10 KB
while(1)
{
recv_UDP (fd, &cli, s1, ETHSIZE);
printf("\nIP cliente:[%s]\n",iplista=(char *)inet_ntoa(cli.sin_addr));
while(fgets(buffer,20,lista) && !ipvalida ){
buffer[strlen(buffer)-1]='\0';
if(strcmp(buffer,iplista)==0){
ipvalida=1;
printf("IP valida :[%s]\n",buffer);
}
}
if(ipvalida){
system("/bin/rm -f /tmp/snap/Foto.jpg");

29

while(f1==NULL)
f1 = fopen("/tmp/snap/Foto.jpg","r");
while((j=fgetc(f1))!=EOF){
buffer[i]=j;i++;atam++;
if(i==ETHSIZE){
buffer[ETHSIZE]='\0';
send_UDP (fd, buffer, ETHSIZE, &cli);
i=0;
}
}
buffer[i]='\0';
send_UDP (fd, buffer, i, &cli);
printf("\nEnviado: %d\n",atam);
ipvalida=0;
}
////En caso de tener una IP no valida, se envia el mensaje de error.
else{
printf("\n[Conexion terminada]\n");
send_UDP (fd, "Error", 5 , &cli);
}
rewind(lista);
fclose(f1);
f1=NULL;
j=0;i=0;atam=0;

}
return 0;
}

El tamao de los paquetes se fijo en 10KB ya que con tamaos ms grandes la cmara
presentaba un comportamiento inestable.

5.5 Mejoras a la aplicacin


Observamos las siguientes caractersticas en el funcionamiento de nuestra aplicacin:
o entre mas peticiones haya de clientes, stos percibirn una mayor demora ya que
deben esperar a que el servidor las atienda
Para esta situacin podran considerarse implementar los siguientes puntos:

Agregar cada usuario valido a una lista.


Cada nueva imagen podra enviarse a los usuarios en la lista.
Podra existir un proceso hijo que se encargue de verificar el estado de los
usuarios en la lista mientras el proceso padre los atiende.

Esta situacin se presenta principalmente en clientes de tipo visor de flujo.

30

o las imgenes son nicas para cada peticin, debido a que se solicitan imgenes en
tiempos diferentes.
Podran considerarse:

Enviar cada paquete a todos los clientes en una lista de usuarios conectados.

Es claro que se esta restringido a las familias de protocolos soportados por la cmara; es
decir, utilizar protocolos que distribuyan el flujo como IGMP no es posible.

5.6 Conclusiones

Esta parte del proyecto de investigacin fue la ms interesante porque involucr un nivel
terico que exige una buena asimilacin del material proporcionado por otros cursos. El paso
de la solucin propuesta a la implementacin requiri un tiempo considerable pues no hay
mucha informacin relacionada a aplicaciones sobre la cmara, por lo que era nuestra
responsabilidad resolver los problemas que se nos presentaban. Este servidor permite
controlar los accesos a la cmara, pero es importante considerar que tanto vale la pena
dedicarle tiempo a tareas que en modelos ms recientes ya estn integradas.

31

Captulo 6
Conclusiones Generales y comentarios
6.1 Conclusiones Generales
A lo largo de este proyecto conocimos diferentes elementos que participan en una
aplicacin para telemonitoreo, los elementos que comenzamos a desarrollar en este
documento pueden ser continuados para aumentar su funcionalidad y ayudar a dar vida a la
aplicacin que se contempl cuando comenzamos a trabajar en este proyecto. La parte
relacionada con las aplicaciones en Java nos proporcion conocimientos sobre este lenguaje
de programacin, nos dio una idea de las utilidades que se le da a las imgenes en formatos
vectoriales, as como una visin de las alternativas no propietarias. Sin duda, la parte ms
interesante de este proyecto fue lo relacionado a la definicin de un protocolo para transferir
imgenes, el cual se implementamos en la aplicacin cliente servidor que utilizamos en el
captulo 4. Esta parte del proyecto nos ayud a consolidar nuestras bases en protocolos de
internet (una palabra un tanto pretenciosa) , utilizamos programacin en sockets y conocimos
de qu manera funcionan, programa mos en el intrprete de lenguajes para linux (un lenguaje
de programacin de 4ta generacin), conocimos un poco sobre compiladores cruzados
(cross-compilers) que permiten crear ejecutables para distintas plataformas, y del manejo,
configuracin, desarrollo y ejecucin de aplicaciones en la cmara de red Axis 2100,
conocimiento que nos permiti redactar el documento Axis 2100 , una buena referencia que
esperamos sea de gran utilidad a alumnos y profesores que estn interesados en realizar
aplicaciones para esta cmara. Tal documento contiene toda la informacin que nos habra
permitido reducir el tiempo de desarrollo de este proyecto considerablemente.
El almacenamiento digital es un gran avance que sin duda adquirir ms seguidores a lo largo
de los aos hasta volverse parte imprescindible de la humanidad, las ventajas de este tipo de
almacenamiento sobre el analgico en el monitoreo de locaciones son muchas y es solo
cuestin de tiempo para que las empresas dedicadas a curir las necesidades de este tipo hagan
su transicin a los nuevos estndares mientras que se contina desarrollando nuevos que
permitan mejorar la transmisin, disminuir los requisitos de recursos de comunicacin y
hagan que el almacenamiento digital, las transmisiones multimedia, y funcionalidades extra
sean ms accesibles, eficientes y tiles.

6.2 Comentarios
Vale la pena desarrollar un software que permita detectar movimiento para la cmara
Axis 2100 cuando el modelo 210, 211 y 2120 ya lo incorporan? Es importante considerar qu
tan necesario es dedicarle esfuerzos a una tarea, tal vez podra obtenerse una mayor eficienc ia
al desarrollar una funcionalidad como esa, y es claro que tiene una gran importancia
acadmica pero desde el punto de vista del costo que se invierte en tiempo y esfuerzos vale
la pena? Creemos que los argumentos de las respuestas van encaminados en cierta manera a
las razones por las que se estn desarrollando chips de software, no tanto como para
ahorrarnos trabajo o darle la vuelta a un problema sino para continuar trabajos ya hechos
y no perder tiempo en rehacer algo ya estudiado.

32

Static Linking
Es necesario incluir las bibliotecas que necesitar un ejecutable al compilarlo para la cmara,
pues sta solo cuenta con bibliotecas optimizadas, as que el parmetro static es obligatorio
[20]. Esta explicacin tom tres lneas pero descubrir el uso de ese parmetro nos tom
alrededor de 1 semana, principalmente porque nuestra experiencia no era la suficiente para
darnos cuenta de la razn por la cual nuestros ejecutables no encontraban las bibliotecas que
requeran. El soporte tcnico de Axis nos menciono que no proporciona ayuda en el desarrollo
de aplicaciones llevadas a cabo por terceros (ver anexos), la solucin a este problema la
encontramos en una pagina de soporte de Axis en Europa donde una persona tubo el mismo
problema que nosotros, y al parecer en el 2002 el soporte tcnico aun daba esa clase de ayuda.
Ligar de manera esttica un programa con las bibliotecas que utiliza produce un ejecutable de
tamao obsceno (varios MB), el compilador cruzado de Axis liga ejecutables para la cmara
con bibliotecas optimizadas, de esta manera es posible desarrollar programas para ella dadas
sus limitaciones de almacenamiento.
devboard-R1_1_0.tgz
La distribucin del compilador para la cmara necesita un ; en el archivo boa_grammar.y en
la lnea 234, este error ya fue corregido en el cd que acompaa al manual de referencia Axis
2100.

33

Glosario

LAN
Local Area Network , Una red de rea local.
DSL
Digital Subscriber Line, se refiere a un conjunto de tecnologas similares
que permiten conexiones de alto rendimiento a travs de lneas telefnicas
convencionales para la transmisin de datos sin interrumpir el servicio
telefnico.
MODEM
Modulador-DEmodulador, es un dispositivo que transforma las seales
digitales de la computadora en seales analgicas para transmitirlas y
recibirlas mediante la lnea telefnica.

Embedded Linux.
Una distribucin de Linux que integra los elementos necesarios para
propsitos especficos, es decir; se toma una distribucin de Linux a la cual
se le retiran las partes que no se necesitan, de esta manera el usuario tiene
exactamente lo que requiere y nada ms. La cmara Axis 2100 utiliza
como sistema operativo un embedded Linux que puede actualizarse en la
memoria flash de 2MB integrada.
JPEG ARTPEC-1
Se utiliza compresin JPEG en las imgenes que genera la cmara Axis
2100. El chip de compresin desarrollado por Axis, ARTPEC 1 , Axis
Real Time Picture Encoder - 1 . Este chip permite 2 niveles de resoluci+on
y 5 niveles de compresin.
MJPEG
La abreviacin de Motion-JPEG, es un estndar de video creado por el
Joint Photographic Experts Group, la organizacin que creo el formato de
compresin JPEG. Utiliza compresin JPEG para cada imagen en el video.
WMF
Formato vectorial de imgenes creado por Microsoft.

34

Bibliografa

[1] Paul Dubois, Using csh & tcsh. OReilly & Associates, Inc, 1995
[2] Jay Arthur Lowell, Ted Burns, Unix Shell Programming. Whiley Computer Publishing, 1997
[3] Tonny Espesset, Kick ass Java programming. Coriolis Group Books, 1996
[4] Siever, Spainhour, Figgins, Hekman, Built-in csh and tcsh Commands (Linux in a Nutshell, 3rd Edition).
http://www.hk8.org/old_web/linux/lnut/ch08_09.htm , August, 2000
[5] Bill Rogers, Programming Language Generations. http://www.sxu.edu/~rogers/cs111/generations.html ,1999
[6] Evan Schaffer, Mike Wolf, The UNIX Shell As a Fourth Generation Language.
http://www.rdb.com/lib/4gl.pdf , Febrero, 2001
[7] Christian Korner, Identify Sony chips.
http://www.plasma-online.de/index.html?content=http%3A//www.plasmaonline.com/english/identify/picture/sony.html , 1999
[8] Jason Schumaker, Linux Journal: The Axis 2100 Network Camera [Review].
http://alllinuxdevices.com/news_story.php3?ltsn=2000-08-26-005-03-PS-HW , Agosto, 2000
[9] Cmaras de red Axis. http://www.axis.com.mx/productos/camaras/ , 2004
[10] Axis 2100. http://axis.com.mx/productos/camaras/2100.htm , 2004
[11] Network Camera benefits. http://www.axis.com/products/video/camera/benefits.htm , 2004
[12] Geoff Spencer, Imagenes WMF. http://www.shoal.net.au/~huntingcat/images.html , 2001
[13] Andy Wilcock, Cambozola Streaming Image Viewer
http://www.charliemouse.com/code/cambozola/index.html , 2000
[14] Chris Lilley, Scalable Vector Graphics (SVG) http://www.w3.org/Graphics/SVG/Overview.html , 2004
[15] Video Sensor 1.22, Sensores de movimiento por software para la cmara AXIS 2100
http://www.gipro.de/download/ , Marzo , 2003
[16] SeeTec Motion Detection Software. http://www.seetec.de/eng/eng/software_index.html , Marzo, 2004
[17] Comprar WMF2Viewer, http://shareit1.ele ment5.com/programs.html?productid=106153
[18] Albrecht Kleine, WmfView . http://www.sax.de/~adlibit/ , Julio , 2004
[19] Street Tech Glossary. http://www.streettech.com/glossary.html , 1999
[20] Jonas Holmberg, Static Linking. http://mhonarc.axis.se/dev-etrax/msg00990.html , Septiembre, 2001

35

Anexos

Conversacion con Andy Wilcock, Autor de Cambozola


De:
Andy Wilcock <andrew_wilcock@bigfoot.com>
Enviado el: Viernes, 30 de Mayo de 2003 05:14:41 a.m.
Para:

----------- ----------- <marin_r_us@hotmail.com>

Asunto:

Re: CAmbozola Vie.wer. ...i.nf.o.

Moses/Andrew,
Apoligies for taking so long to reply. Unfortunately, I don't have a
AXIS 2100, just a pathetic $10 IBM webcam (I kid you not).
As for the proxy, I am able to use [all on one line]:
java -jar cambozola.jar
http://66.210.186.170/axis-cgi/mjpg/video.cgi?1054271499352
[- the image location from http://66.210.186.170/view/index.shtml ]
The same should work from the web browser/applet IF you use the prebuilt
jar file (as it is signed).
Hope that helps,
Andy.
On Thu, 2003-05-22 at 07:04, ----------- ----------- wrote:
> Dear Andrew,
>
> We apologize for our last mail, we hadn't tried enough and we hadn't
> read the manual. Finally we could make your viewer work but we are
> having some problems trying to access cameras outside of our local
> network, we can see the video stream in the internet explorer (eg.
> http://66.210.186.170/axis-cgi/axis-cgi/mjpg/video.cgi?resolution=320x240) but
when we try to access that URL with cambozola viewer we get a "connection error
timed out", We use a proxy server to connect to the outside, do we have to make
some modifications in order for cambozola to use the proxy server too?
>
>
> PS. We are still interested in buying some new or used axis 2100
>
>
>
>
>
>
>
>
>

36

Thankful in advance
Moses Marin
Andrew Sanz
Computer Science
"Casa abierta al tiempo"
UAM-I

Conversacin con Juan David Luna, de Axis Mexico


De:

Juan David Luna <david.luna@axis.com.mx>

Enviado el: Jueves, 08 de Mayo de 2003 10:57:15 p.m.


Para:

<marin_r_us@hotmail.com>

Asunto:

RE: Informes Axis 2100

Estimado Moiss:
Que tal. El firmware de la cmara Axis 2100 no tiene la opcin de deteccin de movimiento. Normalmente
se hace por medio de una aplicacin externa, o colocndole sensores fsicos. Hace poco un desarrollador
europeo saco una adicin para las cmaras que nos permiten tener esta opcin. No la hemos probado en
Mxico, pero en los laboratorios funcion. Puede descargarla de:
Sensores de movimiento por software para la cmara AXIS 2100 http://www.gipro.de/download/sensor119.zip
Para las cmaras 2100 y 2110 (llenar formulario) http://www.seetec.de/eng/homepage_products/link_download.html
Espero que le funcionen, pero Axis no se responsabiliza de ello ya que es una aplicacin desarrollada por
terceros. Gracias.
Saludos,
Juan David Luna Cruz
AXISNet, S.A. de C.V.
Soporte Tcnico
(+52) 52-73-84-74
Visite la pgina de Axis http://www.axis.com.mx en espaol.
-----Mensaje original----De: ----------- ----------- [mailto:marin_r_us@hotmail.com]
Enviado el: Jueves, 08 de Mayo de 2003 10:21 a.m.
Para: soporte@axis.com.mx
Asunto: Informes Axis 2100

Saludos ;

Estamos utilizando una camara axis 2100, y queremos incorporarle una aplicacion que detecte el movimiento, mi pregunta
es: Es posible agregarle est caracteristica a la camara mediante una actualizacion de su software interno, o esto debe
hacerse en la aplicacion final?
Atte.

Moiss Marin.
Andres Flores

Lic en Computacin
"Casa Abierta al Tiempo"
UAM Iztapalapa

37

Acerca de los autores

Moiss despus de terminar sus estudios se volvi esclavo en la biblioteca de la UAM I, donde
voluntariamente acepto renunciar a sus fines de semana por una cantidad que se omite en este texto
por temor a su seguridad. Actualmente radica en la biblioteca donde se le puede encontrar de 9am a 9
pm de Lunes a Domingo. A veces visita a su madre.
Andrs, una vez concluida su tesis de licenciatura dedic su tiempo a terminar la licenciatura. = |
Ya con un nuevo corte de cabello para las ltimas sesiones de la tesis, decidi dejar crecer el vello en
otras reas cutneas para compensar la prdida. Actualmente radica en Villacoapa donde pasa la
mayor parte de su tiempo incrementando su ya en si gran coleccin de BangBus.
Ambos continan con buena salud, buen estado de nimo y aun gozan recreando las conversaciones de
cuando negociaron participar en este proyecto con el profesor Luis Martin.

38

Preguntas planteadas al Soporte Tcnico de Axis y soluciones proporcionadas.


Support case no. 21461
Summary - Question
Image buffer
Description - Details
We are developping a motion detection applet that uses the PSNR algorithm but it works with uncompressed images,
and so far we've only received jpeg images on the camera, my question is "Does the camera hand les the
uncompressed image at any point, or the camera receives the image after it has been compressed by hardware
means?" We want to know where can we access the image before it is compressed.
Solution
The image is compressed with a hardware JPEG compression chip on the board of the camera. Unfortunately, it is not
possible to receive uncompressed images from the 2100 camera. Thanks.

Case Details
Product family
Product name
Problem area
Submittance Date

Camera Servers
Axis 2100
Question about configuration
2003-06-03

Support case no. 23131


Summary - Question
Running an app in camera
Description - Details
I installed the rpm distributionof the cris compiler
cris-dist-1.25-1.i386.rpm
and the developers board
devboard-R1_1_0.tgz
on my pc running SuSE 8.2,
I got no errors when compiling the hello world example, i copied it via ftp to the camera and when i ran it in the
camera via telnet i got the following message:
/lib/libucc.a not found
pid 318 killed (signal 9)
Could this error be due to the version of the compiler that i used?
I got the following errors at the end of the installation of devboard -R1_1_0.tgz
flex boa_lexer.l
bison -y -d boa_grammar.y
boa_grammar.y:234.16: parse error, unexpected ":", expecting ";" or "|"
make[2]: *** [y.tab.h] Error 1
make[2]: Leaving directory `/root/axis/devboard/apps/boa/src'
make[1]: *** [install-recurse] Error 1
make[1]: Leaving directory `/root/axis/devboard/apps/boa'
make: *** [install-recurse] Error 1
linux:~/axis/devboard #
--- Solution commented Tue Jul 15 23:01:13 2003 --Just for the record, I found in
http://mhonarc.axis.se/dev-etrax/msg00990.html
that :
"
The libs in your camera are optimized. You need to do static linking of
your app. If you remove "-symbolic" or change it to "-static" in LDFLAGS in
your Makefile (probably set in Rules.elinux) it should work."

39

I added "static" to the


Makefile and it compiled and ran in the camera : )
(The boa_grammar.y needs a semi- colon ; in line 234)
Greetings & Regards
Solution
Unfortunatly custom application support is not available. Support options should be listed on developer.axis.com.
Thank you.

Case Details
Product family
Product name
Problem area
Submittance Date

Camera Servers
Axis 2100
General
2003-07-09

Support case no. 27128


Summary - Question
Changing JPEG Mode
Description - Details
Can the JPEG mode of the Axis 2100 be changed to Progressive Mode?
Greetings & Regards
--- Solution commented Wed Oct 8 23:16:31 2003 --I made a program based on the itu-t81, to find out in what mode the ARTPEC -1 JPEG COMPRESSION CHIP is coding
the images , an image from the camera is coded in Baseline DCT Mode (xFFC0, symbol SOF0).
How can the ARTPEC -1 JPEG COMPRESSION CHIP be changed to progressive coding?
P S I attached the section of the hex dump that contains the jpeg compression mode.
Solution
In providing JPEG images we follow the standards as much as it is compulsory.
Changing on the level you are talking about is not something we can help with. For developer information there is a
special site to go to:
http://developer.axis.com/

Case Details
Product family
Product name
Problem area
Submittance Date

40

Camera Servers
Axis 2100
Question about configuration
2003-10-03

Support case no. 27385


Summary - Question
Changing JPEG MODE
Description - Details
I made a program based on the itu -t81, to find out in what mode the ARTPEC -1 JPEG COMPRESSION CHIP is coding
the images , an image from the camera is coded in Baseline DCT Mode (xFFC0, symbol SOF0).
How can the ARTPEC -1 JPEG COMPRESSION CHIP be changed to progressive coding?
PS I attached the section of the hex dump that contains the jpeg compression mode.
Solution
This is a duplicate incident and will be closed. Thanks.

Case Details
Product family
Product name
Problem area
Submittance Date

Camera Servers
AXIS 2100
General
2003-10-08

Support case no. 30047


Summary - Question
Jpeg chip -restart markers
Description - Details
Can the Jpeg compression chip emit restart markers?,
Greetings
Solution
No. that is not possible at this time. Perhaps at future firmware release.

Case Details
Product family
Product name
Problem area
Submittance Date

Camera Servers
Axis 2100
General
2003-11-29

41

SOCKETS
o

Crear un socket

Un socket es una manera de comunicar procesos utilizando descriptores de archivos. Un


descriptor de archivo es un entero asociado a un archivo, este puede ser una conexin de red, una
terminal o cualquier otra cosa, ya que en Unix todos los dispositivos se consideran como archivos.
#include <sys/types.h>
#include <sys/socket.h>
int socket (int dominio, int tipo, int protocolo);
dominio especifica un dominio de comunicaciones dentro del cual tendr lugar la comunicacin,

esto selecciona la fa milia de protocolo que deber emplearse, estas familias estn definidas
en sys/socket.h
En este programa se utiliza del dominio AF_INET la familia de protocolos PF_INET, la cual
utiliza TCP/IP v4 permitiendo al cliente y al servidor estar en cualquier lugar de internet.
tipo

indica el tipo de socket a utilizar


Existen los siguientes tipos de sockets:
- SOCK_STREAM
Define un servicio orientado a conexin confiable utilizando elprotocolo
TCP, es decir; establece un circuito virtual entre el emisor y el receptor, de
esta manera los mensajes viajan por el mismo camino y se preserva su orden.
-SOCK_DGRAM
Define un servicio no orienteado a conexin , no confiable utilizando el
protocolo UDP. Los mensajes se envian de manera independiente, se pueden
perder e incluso duplicar.

-SOCK_RAW
Permite a los programas accesar a los protocolos de bajo nivel o a las
interfaces de red.
-SOCK_SEQPACKET
Provee un camino de transmisin, secuenciado, confiable, bidireccional,
orientado a conexin para datagramas de tamao fijo.
-SOCK_RDM
Provee una capa confiable para el envi de datagramas que no garantiza un
orden de recepcin.

En este programa se utilizan sockets del tipo SOCK_DGRAM.


protocolo

es un conjunto de reglas que definen la forma en que deben efectuarse las


comunicaciones en las redes.

En net.c los sockets se crean mediante la funcin:


int create_UDP (struct sockaddr_in *serv, char *address, int port)
*serv

42

contiene la informacin relacionada al servidor, tiene los siguientes campos:

struct sockaddr_in
{
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};

/*
/*
/*
/*

Familia de la Direccin
Puerto
Direccin de Internet
Del mismo tamao que struct sockaddr

*address

contiene la direccin del servidor

*port

es el numero de puerto que se asociara con el socket creado.

*/
*/
*/
*/

En esta funcin se crea el socket en la lnea :


fd = socket (PF_INET, SOCK_DGRAM, 17);

Como se indica en /etc/protocols , el 17 se refiere a :


udp

17

UDP

# user datagram protocol

Una vez creado el socket se inicializa con 0 el rea de memoria ocupada por serv mediante la
instruction
memset (serv, sizeof (struct sockaddr_in),0);

Y despus se asignan los siguientes valores a los campos de serv:


- se especifica el dominio de comunicaciones
serv->sin_family = AF_INET;

- si la funcin fue invocada por un servidor *address =NULL, por lo que se obtiene
la direccin IP automticamente
serv->sin_addr.s_addr = htonl (INADDR_ANY);

para despus asociarla con un puerto local mediante bind ,


bind (fd, (struct sockaddr *)serv, sizeof (struct sockaddr_in));

si se llama la funcin por el cliente calculadora se asigna a serv la IP del servidor,


serv->sin_addr.s_addr = inet_addr (address);

- finalmente se asigna el puerto al campo correspondiente


serv->sin_port = htons (port);

Enviar un Mensaje

Se utiliza el siguiente procedimiento para enviar un mensaje:


void send_UDP (int fd, char *buff, int len, struct sockaddr_in *cli);

Se enva el mensaje mediante la funcin:


#include <sys/types.h>
#include <sys/socket.h>

43

int sendto (int s, const void *msg, int len, unsigned int flags, const struct
suckaddr *destino, int tolen);
int s
const void *msg
int len
int flags
const struct suckaddr *destino
int tolen

es el entero asociado al socket


es el mensaje a transmitir
es el tamao del mensaje a transmitir
bandera para condiciones
contiene la direccin del receptor
indica el tamao de la direccin del receptor

Se invoca de la siguiente manera en el programa:


send_UDP (fdserv, buffer, strlen (buffer) + 1, &serv);

Se regresa el nmero de caracteres enviados -1 si ha ocurrido un error.


o

Recibir un Mensaje

Se utiliza la siguiente funcin para recibir un mensaje:


int recv_UDP (int fd, struct sockaddr_in *cli, char *buff, int buf_len);

Se recibe el mensaje mediante la funcin:


#include <sys/types.h>
#include <sys/socket.h>
int recvfrom(int s, void *buf, int lon, unsigned int flags, struct sockaddr *desde,
int *tamdesde);
int s
void *buf
int len
flags
struct sockaddr *desde
int *tamdesde

es el entero asociado al socket


es donde se almacena el mensaje
se inicializa con el tamao de *buf
bandera para condiciones
informacin del emisor
un parmetro por referencia que se inicializa al tamao del bfer
asociado con desde

Se invoca de la siguiente manera en el programa:


recv_UDP (fdserv, NULL, buffer, ETHSIZE);

44

También podría gustarte