descubriendo la creative webcam


Ahora que estoy metido profesionalmente en el ajo del diseño electrónico de chips multicore, especialmente los que constituyen el corazón de muchos sistemas embebidos de electrónica de consumo, veo ciertos dispositivos de diferente manera. Hoy por ejemplo he abierto un cajón y me he encontrado con una vetusta webcam USB de creative labs y he pensado que es un sistema embebido, ya que es capaz de capturar imágenes e incluso tomar fotografías (al menos en un sistema operativo de microsoft, según recuerdo) a partir de un sensor CCD. Además necesita transmitir la información de vídeo por una conexión USB, por lo que tendrá el chipset correspondiente.

Así que, he decidido conocer en profundidad el hardware y el software que permite capturar las imágenes de la webcam al portátil (en mi caso, es el PC que tengo) Antes de abrir la webcam, he decidido averiguar todo lo que pueda desde fuera. A partir del conocimiento obtenido, he pensado que puedo hacer alguna aplicación de visión artificial con ayuda de algún framework o librería (como el de intel, opencv)

No recuerdo exactamente el modelo de la webcam ya que no conservo la caja ni los manuales originales del producto. La primera pista que obtengo es de la etiqueta que tiene en la carcasa. A parte de constatar la empresa fabricante, Creative Labs Inc. y que el producto está ensamblado en malaysia (seguramente los componentes internos están fabricados en otro país) se tienen los números que identifican el producto:

MODEL NO. CT6840
PART NO. 1168403000
M6840040018620

De todos esos números, solamente el modelo da resultados en el Google, una lista de sitios web donde descargar drivers para sistemas operativos de Microsoft, que indican que la webcam es con gran probabilidad el modelo Creative WebCam 3. He ido a la web de Creative, a la sección de productos y he buscado información sobre el producto, que lógicamente está descontinuado (vamos que ya no tiene soporte) Aun así he conseguido dos manuales:

  1. WebCam III – Lowcost version Users Guide. Date : 4/20/2005 3:25:24 PM. Size : 705.61 KB. (55 pages)
  2. Webcam III – Product Guide. Date : 4/20/2005 3:25:24 PM. Size : 492.92 KB. (37 pages)

En dichos manuales se encuentra una información técnica simple, que sirve de punto de partida, para tirar del hilo (Apéndice A, página 43-44 de Product Guide):

  • Construction. USB Port version: Remote camera head with a USB cable.
  • Camera housing. Base and flip-top lens housing with manual vertical tilt of 90 degrees.
  • Power. From USB port or powered USB hub. Note: If you are connecting the WebCam to a USB hub, make sure that it is a powered hub, that is, it is powered by an external power source.
  • Sensor. OmniVision OV7610 CMOS image sensor
  • Resolution (for both Video mode and Still mode) 640 x 480, 352 x 288, 320 x 240, 176 x 144, 160 x 120
  • Sensitivity. 6 lux.
  • Video formats. 24- and 16-bit RGB, 4:2:0 YUV Planar.
  • Exposure control. Automatic (optional manual control with software)
  • Color balance. Automatic (optional manual control with software)
  • Color matrix. Preset and integral to camera
  • Field-of-view. 62 degrees (horizontal)
  • Depth-of-field. 75 millimeters to infinity
  • Port compatibility. USB Port version: Universal Serial Bus port
  • Software compatibility. USB Port version: TWAIN, 16-bit Video for Windows, DirectShow, and Still Image driver that run in Windows 98.

Es interesante destacar de los datos anteriores al fabricante de la parte interna de la webcam que se llama omnivision, que tiene una sección en su web donde se muestra la tecnología que hay dentro de las cámaras. En la sección de aplicaciones hay una apartado dedicado a las webcams en donde se listan todos los chipsets que incorporan las cámaras. Repasando la lista no veo el modelo que se indica en las características técnicas (OV7610) por lo que intuyo que estará descatalogado. El que más se le acerca es el OV07640-C28A (OV07640-C01A) del que se dispone de unas breves especificaciones. En esas especificaciones se puede ver una descripción de un SoC con varios IP Cores que integran sensor y DSP (y supongo que memoria interna) unidos por un bus llamado Serial Camera Control Bus (SCCP)

Existe una página donde se listan por separado los procesadores de imagen y sensores como diferentes líneas de productos. En la sección de tecnología se explica la diferencia entre la solución CMOS con los chips de sensor y procesador separados (que creo que es a la que pertenece el chipset que tiene la cámara creative webcam 3) y la nueva con los dos integrados que llama OmniVision true CameraChip.

8 comentarios en “descubriendo la creative webcam

  1. Siguiendo con la línea de investigación sobre la creative webcam he encontrado un sitio web dedicado a los drivers para Linux para las cámaras que utilizan el chipset de omnivision llamado Linux OVCam Drivers. En su sección de cámaras conocidas aparecen dos entradas que cambian por completo el modelo y chipset que pensaba que tenía la webcam:

    Creative Labs WebCam 3: ID #21, Bridge: OV511/OV511+, Sensor: OV7610, OV7620, or OV7620AE
    Creative Labs WebCam Plus (Model CT6840): ID #0, Bridge: OV511+, Sensor: OV7620 or OV7620AE

    Es interesante la distinción entre el sensor (OV76xx) y el bridge (OV511) Este segundo componente está relacionado con su conexión USB. Una búsqueda en Google (ominivision ov511+ USB) nos confirma este punto y permite además obtener las especificaciones del chip, que conviene leer para enterarse de cómo es por dentro y cómo funciona este componente, que es el interlocutor con el que hay que lidiar para manejar la cámara y obtener información de la misma (por ejemplo la captura de imágenes)

    Por cierto que la documentación de las especificaciones del ov511+ se encuentran en la web de un ingeniero electrónico francés, Michel Xhaard, que es el responsable el solito de una gran parte del código relacionado con las webcams en Linux, con el mérito de haberlo hecho sin soporte alguno de los fabricantes.

    Además he encontrado un artículo de 1998 en una publicación digital que habla entre otros sobre el entonces novedoso chip ov511 de ominivision, en el que se indican pistas sobre las características del chip y se ofrece incluso los precios del mismo y de una placa de prueba:

    Trying to advance digital cameras in the consumer space, OmniVision Technologies has introduced the OV511 camera-to-USB bridge single chip controller IC targeted at video applications using the Universal Serial Bus (USB). The single chip controller simplifies the interface between CMOS image sensors and the USB. OmniVision said manufacturers can develop video and imaging peripherals that take advantage of the USB ports built into next generation PCs.

    The OV511 features a high-performance compression engine capable of a 7:1 compression ratio that ensures fast image transfers from the image sensor to the PC. The chip sustains up to 30 frames per second throughput and features a fast, isochronous FIFO that sustains the high-speed transfer of the compressed video image data from the compression engine out to the USB. The camera-to-USB bridge chip is available for $5.00 in 10,000-unit quantities. OmniVision is also offering an evaluation board that contains the OV511, an OV7610 single chip CMOS image sensor, a 256 kilobyte DRAM, and USB transceiver priced at $100,000.

    Volviendo Linux OVCam Driver, la distribución de código del driver para las webcam USB tiene un archivo explicativo que merece la pena leer. Entre las cosas que se pueden entresacar del mismo está el hecho de que existe un bus interno llamado i2c que conecta el sensor con el bridge sobre el que he encontrado información en la wikipedia (I²C = Inter-Integrated Circuit)

  2. Hoy me ha dado la vena práctica y he decidido ver el efecto en los módulos del kernel que se cargan. Estos son los mensajes que se mandan al conectar la webcam al puerto USB (obtenido con tail -f /var/log/messages):

    Jul 20 12:15:45 yerart kernel: [140291.560000] usb 1-1: new full speed USB device using uhci_hcd and address 4

    Jul 20 12:15:45 yerart kernel: [140291.780000] usb 1-1: configuration #1 chosen from 1 choice

    Jul 20 12:15:45 yerart kernel: [140291.784000] ubuntu/media/ov511/ov511.c: USB OV511+ video device found

    Jul 20 12:15:45 yerart kernel: [140291.788000] ubuntu/media/ov511/ov511.c: model: Creative Labs WebCam 3

    Jul 20 12:15:45 yerart kernel: [140292.080000] ubuntu/media/ov511/ov511.c: Sensor is an OV7620AE

    Jul 20 12:15:45 yerart kernel: [140292.080000] ubuntu/media/ov511/ov511.c: Enabling 511+/7620AE workaround

    Jul 20 12:15:46 yerart kernel: [140292.532000] ubuntu/media/ov511/ov511.c: Device at usb-0000:00:1d.0-1 registered to minor 0

    Jul 20 12:17:03 yerart kernel: [140369.444000] usb 1-1: USB disconnect, address 4

    Y estos son los módulos del kernel que considero que están relacionados con la conexión del dispositivo (obtenidos con el comando lsmod |less):

    ov511 79904 0

    videodev 28160 1 ov511

    v4l2_common 25216 1 videodev

    v4l1_compat 15236 1 videodev

    usbcore 134280 5 ov511,usbserial,ehci_hcd,uhci_hcd

    donde se puede ver las conexiones con los módulos de vídeo y USB que lógicamente están relacionados con el funcionamiento básico de una webcam.

    Para completar esta entrada se me ha venido a la cabeza que sería útil tener una referencia del código relacionado con la webcam. Para ello he buscado el código del ov511 en la red. A este respecto hay que indicar que existe la posibilidad de utilizar buscadores especializados como krugel para hacer lo mismo entre millones de líneas de código open source. El mejor sitio que encontré fue el de launchpad de ubuntu, con un lugar donde se podía descargar el código específico del driver para la distribución Ubunti Feisty (que es la que tengo instalada)

    Una instrucción que se repite mucho en el código fuente es ioctl. Así que he decidido investigar un poco sobre ella. La llamada de sistema ioctl, en los sistemas basados en Unix, permite a una aplicación controlar o comunicarse con un driver de dispositivo, fuera de los usuales read/write de datos. En esta caso nos comunicamos con el ov511. Un código muy interesante para leer es el del

    OV511 Webcam driver for BSD

    A simple-minded image capture program for USB webcams based on the OmniVision Technologies OV511/OV511+ bridge chip attached to an OV7610 CCD imager.

    en concreto el del archivo vid.c.

  3. Me voy a concentrar ahora en el sensor de imagen. Es un sensor CMOS (en vez de un sensor CCD; ver una comparación) Esta formado por un array de sensores cada uno representando un pixel, construido con dos o tres transistores junto con el detector de fotones. De esta manera solamente pueden captar la intensidad de la luz. Para detectar los colores emplean una máscara especial que se coloca encima de cada detector de fotones para captar la información cromática. Esta máscara se llama filtro de bayer.

    Estos sensores de pixel permiten ser integrados en un chip con procesado digital de la señal, comunicaciones, etc, pudiendo reunir toda la lógica necesaria para hacer la cámara. Esto es precisamente lo que hace omnivision con el OV7620 (excepto por las comunicaciones, que están en el OV511) Además tienen un consumo muy pequeño lo cual les hace ideales para webcams alimentadas por USB.

    Los sensores CMOS tienen algunos problemillas como un elevado ruido de patrón fijo (FPN o Fixed-Pattern Noise, en inglés, ruido que no varia con el tiempo y que se ve como un fondo fijo en la imagen) que según las especificaciones del chio es eliminado por diseño, y gracias a que se puede leer directamente la señal de cada píxel con lo que se reduce sensiblemente el problema conocido como blooming, por el que la recepción de una gran intensidad lumínica en un punto influye en los píxeles adyacentes (un brillo fuerte produce líneas blancas en la imagen)

  4. Hay una recopilación de enlaces sobre fotografía digital en forma de tutoriales que eh encontrado en Internet, que incluyen conceptos sobre los componentes de las mismas cámaras como el funcionamiento de los sensores, la profundidad de campo, etc. y otros conceptos como el procesado digital de la imagen, la gestión del color, etc. y los efectos como la difracción. Todo esto puede serme de utilidad para entender otros conceptos de mi vetusta creative webcam.

  5. hola como estas che esta interesante tu publicacion, la encontre de casualidad buscando driver para la misma web cam. el problema es que ya en xp esta camara no se encuentran los drivers y opte por usar TUQUITO una de las tantas distribuciones linux. pero no encuentro forma de hacerla andar recien estoy conociendo linux, hay alguna forma de que xp me reconozca la camara? y como la hago funcionar en linux de una forma que no se me complique la vida, algun paquete que solo aya que descomprimir o algo? disculpa las ,molestias

  6. hola juanma, sobre windows xp hace un montón de años que no uso, pero recuerdo que había sitios web en donde podías encontrar los drivers que necesitabas. Al ser un producto que ya está desfasado igual encuentras más dificultades para encontrarlo.

    En cuanto al Linux, yo uso Ubuntu Feisty y a mi la cámara me funciona simplemente enchufandola en el USB. Los drivers necesarios ya vienen en el núcleo de Linux. La he probado con el messenger. También con un pequeño programa que he encontrado llamado Camstream.

  7. hola te felicito por el espacio sabes me gustaria si me puedes ayudar tambien tengo esa webcam y no tengo los drives bueno encotre unos pero me pide un tal cd de intalacion numero 2 y quiziera saber si es compatible con window xp porq me dijeron q ya estaba obsoleta pero me gusta el diseño = i no lo quiro perder entindes puxa si es posible me ayudaras te lo agradeceria un monton amigo ak mi msn escribass@hotmail.com si se puede te lo agredeceria xau cuidate buen blog xau ___________

  8. Se que es un mensaje viejo y que a veces esta mal revivir uno pero me gustaria ver si me puedieses apoyar para entender mejor el funcionamiento del sensor OV7620 para ver la manera en la que puedo conectarlo a un PIC32 y poder ver las imagenes en una pantalla.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s