Re: [Eqalign-devel] =?iso-8859-1?q?Subsistema_de_c=E1maras?=
Brought to you by:
antoniofga,
isoplut
From: Antonio F. <ant...@ya...> - 2007-12-03 21:59:36
|
Corregido un error que no detect=E9 en el ordenador principal y s=ED en = el prot=E1til: No es seguro lanzar eventos desde un thread!!!! ya les dije que nos oy = especialista en hilos. Bien, despu=E9s de comerme el coco toda la = ma=F1ana he aprendido que lo que hay que hacer es enviarle una se=F1al = al proceso padre y que sea =E9ste quien dispare el evento. Adem=E1s, cuando la webcam pierde un fotograma el sistema fallaba. Bien = tambi=E9n he corregido ese bug. Lo interesante de todo esto (aparte que estoy aprendiendo un mont=F3n :) = es que todo el negocio de hilos, bloqueos y dem=E1s est=E1 centrado en = la clase de nivel superior Camera, los drivers de c=E1mara s=F3lo tienen = que hacer su trabajo: activar la exposici=F3n, responder si la imagen = est=E1 lista y servirla bajo petici=F3n. El sistema de hilos con evento ser=EDa el m=E9todo m=E1s eficiente, pues = notificar=EDa al programa consumidor de la disponibilidad de la imagen = justo cuando lo est=E1. El sistema de cron=F3metro es menos eficiente en teor=EDa, pero en = algunas situaciones puede ser lo m=E1s adecuado. En fin, lo he probado con la webcam y va como una moto a 10ms, la = simulaci=F3n tambi=E9n va, he implementado el driver de las atik pero no = lo he podido probar y tambi=E9n he subido una aproximaci=F3n a lo que = podr=EDa ser el control de las DSI, sin ninguna documentaci=F3n en = absoluto, con las librer=EDas a pelo (por cierto es un compilado .NET) y = totalmente a ciegas (no tengo DSI) =A1=E9chenle un vistazo aunque sea en modo simulaci=F3n! Un saludo ----- Original Message -----=20 From: Antonio Fraga=20 To: Lista de correo de desarrollo EQAlign=20 Sent: Saturday, December 01, 2007 10:21 PM Subject: [Eqalign-devel] Subsistema de c=E1maras Acabo de subir el proyecto CamCap. Si lo abren ver=E1n que s=F3lo = tiene un formulario que controla una instancia de la clase Camera que = est=E1 en otro proyecto compilado como una librer=EDa. Ah=ED es donde = est=E1 todo el meollo de c=E1maras. El proyecto EQCam exporta dos clases: Camera: es el punto de entrada a todos los drivers de c=E1mara en = s=ED. Imaging: esta clase da soporte al tipo de imagen que trabaja Camera: = FloatImage. FloatImage representa una imagen (monocroma) en un array = floats normalizado (valores entre 0.0 y 1.0). Contiene los m=E9todos = necesarios para importar desde un bitmap o desde otro objeto de tipo = FloatImage, exportar a Bitmap, operaciones b=E1sicas sobre el = histograma, operaciones aritm=E9ticas sobre de im=E1genes con otras = im=E1genes o con valores num=E9ricos, clonaci=F3n, etc. (lo de etc es = m=E1s bien porque podemos meter ah=ED lo que queramos).=20 Hay un proceso de imagen definido: GaussianBlur, tengo algunos m=E1s = pero este es el =FAnico estrictamente necesario. Bueno, igual es = necesario meter los ajustes de histograma m=E1s complejos (mediante = curvas o ajuste de medios tonos), pero ya veremos. Bien, lo importante es que todos los drivers de la clase Camera y la = propia clase camera devuelven FloatImage con lo que pasamos a = precisi=F3n de 32 bits, m=E1s que para la captura, para otros procesos = como apilados y promedios es bastante interesante contar con m=E1s = precisi=F3n que la propia c=E1mara. Vale. Sobre las c=E1maras. He copiado casi literalmente la = especificaci=F3n ascom, con s=F3lo algunos cambios, hasta el conrtol del = cooling y "t=F3". En el interfaz CameraInterface est=E1 detallada toda = la especificaci=F3n. Miren este archivo antes de nada. S=F3lo he implementado SimCamera y WDM para comprobar que el modelo es = v=E1lido. Si nos ponemos de acuerdo habr=EDa que recodificar todos los = drivers de c=E1mara. Una de los puntos a favor de este modelo es que los drivers de = c=E1mara no hacen "procesos de negocio", simplemente atienden a las = peticiones de imagen y act=FAan sobre los par=E1metros b=E1sicos de la = c=E1mara que controlan: binning, subframe, temperatura del peltier,... Los "procesos de negocio" (exposici=F3n en modo loop, proceso de = obtenci=F3n de darks y resta del dark, histogramas, etc...) estar=EDan = en la clase Camera como capa superior y punto de acceso a las c=E1maras = desde "fuera". De todas maneras, a partir de la clase Camera se tiene acceso directo = al driver al que se est=E1 conectado, por si se quisiera realizar alguna = alguna acci=F3n espec=EDfica. A ver: Adem=E1s de implementar el interfaz CameraInterface, los drivers de = c=E1mara pueden implementar otras funcionalidades espec=EDficas de cada = c=E1mara. Por ejemplo: -el driver de la c=E1mara de simulaci=F3n necesita conocer los valores = de latitud/longitud y las coordenadas donde que apunta el telescopio. -el driver WDM necesita tener acceso a los par=E1metros de larga = exposici=F3n (si es un SC1, etc) -el driver WDM puede presentar - aparte del di=E1logo de = configuraci=F3n que todas las c=E1maras muestran en el m=E9todo com=FAn = SetupDialog- otro di=E1logo de configuraci=F3n de formato. Algunos se implementan en la propia clase Camera, pero tener acceso a = los que no, se hace a travez del propio driver espec=EDfico a partir de = la propiedad:=20 public CameraInterface CamDriver Por ejemplo, para mostrar el di=E1logo de formato, espec=EDfico de las = WDM: if (cam.CameraAccessType =3D=3D eCameraAccessType.WDM) ((EQA.Camera.Drivers.WDMCam)cam.CamDriver).FormatDialog(); Otro ventaja que le veo a este modelo es que el subsistema de c=E1mara = queda separado en una librer=EDa, si detectamos cualquier problema, = basta con corregirlo y redistribuir esta librer=EDa. Tal como est=E1 = ahora, el programa consumidor tiene que establecer el tipo de c=E1mara = (Sim, WDM, Atik...), pero es f=E1cil aislar eso tambi=E9n, con lo que si = se implementan nuevas c=E1maras no ser=EDa necesario siquiera compilar = el proyecto EQAlign. Adem=E1s el acceso a c=E1maras em una librer=EDa = separada se puede utilizar en un proyecto totalmente diferente, como es = el propio CamCam. Bien, he tratado de hacer robusto el sistema de acceso a las = im=E1genes con sem=E1foros y dem=E1s. Tambi=E9n he tratado de hacer = "buen" (jajaja) uso de los hilos, pero no he estado ni tres d=EDas con = esto as=ED que si estamos de acuerdo que este es el mejor modelo = posible, todav=EDa hay mucho en lo que trabajar.=20 Bueno, en cuanto a la obtenci=F3n de im=E1genes: se puede usar un = cron=F3metro y trabajar en cada click, preguntando si la imagene st=E1 = disponible para obtenerla etc, o se puede capturar un evento que dispara = la calse C=E1mara cuando tiene la imagen disponible. Dependiendo de = qu=E9 cosa un m=E9todo ser=E1 mejor que otro.=20 En fin, desc=E1rgenlo, pru=E9benlo, m=EDrenlo, busquelen las = cosquillas y lo discutimos. Un saludo! -------------------------------------------------------------------------= ----- = -------------------------------------------------------------------------= SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 -------------------------------------------------------------------------= ----- _______________________________________________ Eqalign-devel mailing list Eqa...@li... https://lists.sourceforge.net/lists/listinfo/eqalign-devel |