TODOPIC

Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: rolansel en 27 de Julio de 2011, 17:53:19

Título: Vision artificial utilizando con MCUs
Publicado por: rolansel en 27 de Julio de 2011, 17:53:19
Hola, en este tema se va a reunir importante informacion acerca de procesamiento de imagenes para vision artificial no es un proyecto hecho que solo vaya a publicar, al contrario debido a lo desafiante que aparece me animo a publicarlo aqui con la esperanza de reunir a los demas interesados en el tema que existen en el foro a fin de compartir conocimiento. Por otra parte ire publicando los avances conforme se vaya generando asi como informacion relacionada no solo de pics sino de lo que se vaya necesitando: matlab, c,basic, libros, diagramas etc.

consiste en la adquisicion de imagenes mediante camara, y su procesamiento para reconocimiento de objetivos, en mi caso sera deteccion de rostros, pero confio que se habra un abanico amplio de aplicaciones.

por ahora la primera etapa consiste en encontrar la camara o sensor de imagen que sea la interface que conecte al mundo real con el sistema en cuestion.

existen multiples opciones:
                                                       
    - la CMU cam que viene bien documentada y su procesador arm promete potencia de calculo, el inconveniente es su alto costo.

     - camaras IP sabiendo manejar el protocolo de comunicacion que usan podria ser una alternativa(tambien son un poco caras)

     - camaras de comunicacion serial desafortunadamente  no he encontrado una  que tenga buena resolucion aunque parecen faciles de manejar
                                           
     -  adaptacion de  camaras web

      - construir la camara desde cero opcion mas compleja pero brinda total flexibilidad sobre las especificacions y dominio completo  del sistema.

      - Camaras digitales-analogas aquellas que modulan su salida en formato pal, ntsc  o  mediante la señal  de video compuesto.



 en el proximo post voy a subir el libro de image sensors and signal processing for digital still cameras
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rivale en 27 de Julio de 2011, 22:17:41
muy interesante! :), me uno al hilo, me gustaria ver que se puede lograr con una camara web normal
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 28 de Julio de 2011, 00:31:26
hola pongo el enlace del libro  de sensores de imagen y procesamiento de señales(en ingles)  por si a alguien lo quiere

*** link eliminado***
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rivale en 28 de Julio de 2011, 00:39:52
 :rolleyes: dale una leida a las reglas del foro
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 28 de Julio de 2011, 02:35:29
uy ni modo bueno  por lo menos pongo el titulo si pueden conseguirlo seria muy util


Titulo:   Image sensors and signal processing for digital still cameras de Junichi Nakamura

por cierto al parecer han salido muchos titulos nuevos referentes al tema de ccds y cmos
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rivale en 28 de Julio de 2011, 09:00:54
yo lei una tesis en la que usaban un circuito CMOS para tomar imagenes a color, el que usaban era el LM9627, me interezo hacer algo parecido, pero busque el integrado y ya no lo fabrican. la resolucion se me hizo bastante buena(si la encuentro pongo unas imagenes), y creo que funcionaria para los propositos que buscas, habria que ver algun otro IC que aun se fabrique y pueda funcionar igual
Título: Re: Vision artificial utilizando con MCUs
Publicado por: jfh900 en 28 de Julio de 2011, 09:53:25
Este es un tema interesante en el cual estoy trabajando. ¿Has mirado la librería OpenCV?

Un saludo
Título: Re: Vision artificial utilizando con MCUs
Publicado por: beto1234 en 28 de Julio de 2011, 12:48:15
 Hola yo me uno tmb, estoy trabajando con linux Ubuntu y la libreria openCV de intel en fuerzo con universidades importantes, esta librería nació con la necesidad de grupos de investigación que trabajaban en visión artificial y procesamiento para no comenzar todo de cero y reinventar la rueda, sino que ordenar todo y utilizarlo para problemas mas específicos y difíciles. El lenguaje de programación que voy a usar en ubuntu es el c++ con la ayuda del QT CREATOR de nokia.
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 01 de Agosto de 2011, 16:09:42
Tras despiezar algunas camaras se me hizo patente una situacion, es que anteriormente critique la baja resolucion de las camaras seriales, pero ahora soy mas conciente que la camara que critique posee una lente fija de hecho presenta  tambien aberracion cromatica, por eso los diseñadores de camaras profesionales utilizan complejos sistemas de lentes como tessar, por simplicidad es mejor usar una camara de lente fijo, ya empece a revisar la datasheet de la camara serial de linksprit LSY201.

por ahora debo estar seguro que sirve para  conectar  con algun dsp o microcontrolador


por cierto aun no he revisado lo de opencv espero que sirva tambien para correr en DSP
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 06 de Agosto de 2011, 17:01:33
mencione el modelo  linksprite lsy201 porque junto con la cmucam son los 2 unicos modelos que vende robodacta   la unica tienda de electronicos que conozco tiene un costo de 930 pesos mexicanos, por lo que no me precipitare al comprarlo, la pagina web del vendedor me ofrece la datasheet del producto.

-Es una camara VGA es decir(640x480)
Transmite en el protocolo UART de 9600 a 115200 BAUDIOS
El formato de salida es JPEG de 640x480,320x240 y 160x120  configurable por comando

El control de la camara se realiza por la misma interfaz serie  y soporta los siguientes comando
-reset                                        - dejar de capturar                          -configurar baudrate
-capturar  imagen                       - relacion de compresion
-leer tamaño de imagen              -comfigurar tamaño de imagen
-leer contenido de imagen           - ahorro de energia

aparentemente su operacion es muy sencilla solo debo encontrar  la forma de descomprimir ese formato JPEG para ponerlo en una matriz RGB de 640x480x3.

ya he revisado brevemente como funciona el formato jpeg en teoria se  resta 128 a toda la matriz asi los valores tienen un rango entre -128 y 128 a continuacion se  aplica la transformada discreta del coseno DCT se cuantiza aplicando una matriz que viene en la misma teoria(fuente wikipedia) y se codifica utilizando coeficientes de Huffman. despues se supone solo faltaria montarle la cabecera de archivo EXIF y vuala habria hecho compresion Jpeg por lo que la descompresion solo seria seguir el camino inverso.

Desafortunadamente  la explicacion es para imagenes blanco y negro, una  imagen de color  son 3 matrices en lugar de una  y no estoy seguro como se realiza el algoritmo en este caso.  :(
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rivale en 06 de Agosto de 2011, 17:57:16
"Robodacta", entonces, asumo que estas en mexico, mira estos links

http://www.mecatronicadigital.com/mystore/esp/catalogo.php?kw=camara&Submit=Buscar (http://www.mecatronicadigital.com/mystore/esp/catalogo.php?kw=camara&Submit=Buscar)

http://www.cosasdeingenieria.com/mystore/esp/catalogo.php?id=69 (http://www.cosasdeingenieria.com/mystore/esp/catalogo.php?id=69)

tal vez la otra camara tambien te pueda servir "Electronic brick - Serial CMOS ".
Título: Re: Vision artificial utilizando con MCUs
Publicado por: zxk en 25 de Septiembre de 2011, 16:34:38
Hola a todos!
Yo les recomiendo que usen la cámara OV7670 o aun mejor OV3640, estas se comunican por el protocolo SCCB muy parecido al I2C
yo estoy viendo si puedo conseguir una para implementarla en mi fpga lo único malo es que las vende en ebay y no tengo cuenta de paypal :P
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 26 de Septiembre de 2011, 21:05:11
je yo estoy en las mismas, hoy fui a banorte para recargar credito a mi recien formada cuenta de paypal y me dijeron que el numero estaba mal, mañana voy a ir a otro banco, pero tambien me agrada mas OV7670  cuando lo tenga comento que tal va
Título: Re: Vision artificial utilizando con MCUs
Publicado por: zxk en 29 de Septiembre de 2011, 00:40:48
jaja esos bancos. Otra opción es comprar una cámara de un celular la mayoría de estas cámaras se manejan por la interfaz SCCB
me parece que los celulares sony no lo usan, tal vez use la cámara del ipod  :-/
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 04 de Octubre de 2011, 20:10:09
Hablando de comprar en ebay y pagar con paypal quisiera comentar mi experiencia pues yo me atore casi un mes en esa nimiedad, resulta que no cuento con tarjeta de credito asi que abri cuenta banorte para poder hacer mi transferencia pero  no pude en su banca por internet, fui a la sucursal y no supieron como hacer la transferencia, intente vincular tarjeta, pero la visa electron que me proporcionaron  no dio la talla,  investigue y encontre que las mastercard si PUEDEN vincular a paypal. Sin embargo ese tramite esta demorando pues una semana despues aun no  me envian el numero para verificar.

Ayer encontre un intermediario en mercado libre que por una comision me enviaba el saldo  hoy le pague el dinero y 2 horas despues  por fin tengo saldo en paypal  para comprar el  ov7670 un sensor de imagen de omnivision de 640x480 , tambien voy a pedir el que viene con una memoria fifo integrada, la al422 de averlogic.

Como tardaran hasta 40 dias en llegar mis piezas voy a trabajar mientras en crear un modelo de Isis para el ov7670 aunque aun no se como    :D
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 06 de Octubre de 2011, 20:11:14
jaja esos bancos. Otra opción es comprar una cámara de un celular la mayoría de estas cámaras se manejan por la interfaz SCCB
me parece que los celulares sony no lo usan, tal vez use la cámara del ipod  :-/


yo tambien tengo ahi un cmos de una camara de video, pero son un poco latosas la que tengo ahi es un BGA, asi que sin pistola de aire caliente no hay nada que hacerle.

en cambio las camera modules de ebay ya vienen adaptadas para proto y con lente incluida  :-/
Título: Re: Vision artificial utilizando con MCUs
Publicado por: Suky en 06 de Octubre de 2011, 21:37:36
Yo adquirí por medio de Ebay una OV7670, que quería usarlo con un LCD TFT. Pero erré en la compra de este último  :x tiene que ser uno a 8-bits para comunicarlos directamente cuando se quiera visualizar algo  :? Más adelante será  :P
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 09 de Octubre de 2011, 13:05:52
ahora una breve introduccion a los C-mos espero no ser muy obvio.

El sensor cmos consiste en un arreglo de  celdas con  3 sensores sensibles a la luz, un microlente filtra  el haz incidente de tal forma que cada uno de los 3 sensores tiene una mayor respuesta hacia un color ya sea  rojo, verde o azul.

Una vez que la exposición termina el Cmos deja de sensar y evalúa la cantidad de fotones  incidentes una celda debido a esto la resolución del sensor es menor ya que solo un 50% de los pixeles del arreglo acepta información de color verde, 25% información de color rojo y 25 % de color azul.

Tras el periodo de exposición  los pixeles presentan un  voltaje y  al proceso de lectura de esos valores se le llama escaneo, este escaneo puede realizarse mediante direccionamiento X-Y o bien en esquema de transferencia de cargas donde un pulso de reloj incrementa la dirección actual de lectura mientras  la señal de referencia horizontal nos indica con estado lógico 1  cada que inicia una nueva fila.

 (http://www.imagengratis.org/thumbs/clipimagepe1sp.jpg) (http://www.imagengratis.org/?v=clipimagepe1sp.jpg)


Debido a la  configuración del arreglo en mosaico de Bayer se envía primero la línea con el patrón RGRGRG… y después BGBGBG…,  a este formato de salida se le conoce como Raw RGB. Después un convertidor analógico digital convierte la señal a  palabras de 8 bits.


Para conservar la fidelidad de los datos el resultado del escaneo debe ser almacenado inmediatamente en memoria, aquí se almacena primero la imagen de la matriz obtenida con el sensor para  efectuar el proceso de demosaicing, paso fundamental antes de proceder a al procesamiento de la imagen.

El demosaicing consiste en que  un sensor  de imagen tiene los  pixeles  ordenados de acuerdo a la configuración básica de la celda de Bayer

    (http://www.imagengratis.org/images/clipimageuj2xu.gif)                                              
Configuración Básica de la celda Bayer

Para obtener la información de los colores restantes se debe aplicar un algoritmo de interpolación los mas comunes  son

a) Duplicado de pixeles
b) Interpolación Bilineal
c) Interpolación Basada en gradiente
d) Interpolación Lineal de alta calidad
Título: Re: Vision artificial utilizando con MCUs
Publicado por: RALF2 en 09 de Octubre de 2011, 14:16:35
Que tal amigos!
Yo creo tener la solucion a sus problemas  :mrgreen:
Ya que siempre he querido colocarle una camara a mi robot para ver por donde anda asi que les coloco esto (http://www.ateksoft.com/) por si les sirve, vean el video abajo  :mrgreen:

Nota: Esto lo acabo de sacar del horno asi que no lo he probado aun, porque ademas, me faltan algunos condimentos  :D
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 10 de Octubre de 2011, 02:03:20
jeje se acabo el dia y vuelvo a sentir que no avanzo un centimetro en fin los traumas al psicologo.


Tratar de crear un modelo para proteus del ov7670 y que sea "realista" esta medio lejos bueno me conformo con una burda simplificacion que ayude a comprender el funcionamiento

primero una escena de prueba, que tal el patron de colores de  la tele me fui a internet y busque uno, en JPG lo transforme a BMP de 24 bits

(http://www.imagengratis.org/images/b6coloresdq3yd.png)

luego este algoritmo basado en la teoria de demosaicing para producir el RGB raw ejecutado en matlab  me produce una matriz identica a como seria la imagen en el CCD
%%%%%%%%%%%%%codigo matlab%%%%%%%%%%%%%%%%%
imagen=imread('barrasdecolor.bmp');
[fil,col,capa]=size(imagen);

for i=1:2:fil-2
    for j=1:2:col-2
         raw(i,j)=imagen(i,j,1);
         raw(i,j+1)=imagen(i,j+1,2);
         raw(i+1,j)=imagen(i+1,j,2);
         raw(i+1,j+1)=imagen(i+1,j+1,3);
    end
end

%%%%%%%%en cuanto pueda lo trasladare a C%%%%%%%%%%%

ahora faltaria hacer el algoritmo para enviar cada  byte de acuerdo al comportamiento del CCD real
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 12 de Octubre de 2011, 23:44:46
Hola ayer me eche un clavadito en la datasheet de OV7670 y aunque no he tenido tiempo de avanzar en lo del modelo entendi mejor las especificaciones del sensor asi a grandes rasgo les platico

-comunicacion paralela es decir los pines D0-D7  proporcionan  la salida de datos un byte a la vez
-Se requiere una señal de reloj de 24 Mhz
-cuenta con 3 pines de salida con señales importantes:
      -Pclock indica cada ciclo la transmision de un nuevo pixel muestreado
      -Href nos indica la transmision de una nueva columna
      -Vsinc nos indica el inicio y termino de cada frame
se utilizan 2 pines de control  para escribir los registros de configuracion de la camara mediante comunicacion semejante a la I2C

bueno la comunicacion SCCB no la he revisado asi que se muy poco
al parecer tambien se va a necesitar una memoria pues al parecer el sensor solo sabe mandar frames una y otra vez refrescando la informacion tan rapido como dura un barrimiento, siendo asi hay que almacenarla en algun lugar para procesarla y extraer informacion a gusto  :)
Título: Re: Vision artificial utilizando con MCUs
Publicado por: rolansel en 14 de Octubre de 2011, 23:30:19
Bueno habia comentado que el modulo lo unico que hace es mandar frames de forma infinita, aunque no me consta estoy casi seguro que asi es, solo se configura para funcionar al gusto del usuario ya sea que quieras VGA;QVGA;CIF formato de bytes YUV,raw RGB,Procesed RGB, con/sin  AGC,AEC, Correccion de lente etc.

la configuracion se usa por el puerto SCCB que tras leer la hoja de Datos resulta que es  un tipo de I2C con solo 3 bytes: Address del Sensor[7bits]+1bit de lectura/escritura+ACKN[1bit]
Registro del Sensor[8bits]+1bit ACKN
valor a setear[8bits]+1bit ACKN

bastante facil verdad?
espero que pronto mas gente se anime a experimentar con camaras  :-/