Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Visión artificial

467 Respuestas
43 Usuarios
0 Reactions
1.1 M Visitas
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

Como ya estoy de medio vacaciones, pero a la vez no tengo demasiados medios técnicos, me dedico a recopilar datos y a procesarlos como puedo en mi cabecilla, para poder hacer cosas en verano.

Como sabeis estoy con el tema del Bluetooth... a falta de hacer algunas pruebas con otro ordenador, el tema del TouchPad... necesito más medios que mi portatil... y... ahora viene el proyecto guapi guapi... Visión artificial con una simple webcam, entonces aqui vienen mis preguntas y aclaraciones:
·Sé que es posible, porque si no me equivoco Golfus Hispanicus lo emplea, asi como otros proyectos como los de esta chiquita tan maja: Mavis
·¿Cómo se empieza en este mundito?
·¿Qué librerías usais para obtener imágenes de la webcam?
·¿Qué librerías usais para procesar la imagen?
·¿Es imprescindible programar el sistema en C?
·¿Tenemos algun proyecto de ejemplo?

Yo estoy comenzando con la librería WebCam.dll, pero me temo que es muy incompleta, y además consume demasiados recursos comparándolo con el proyecto de Mavis. Aun así, tengo un programa hecho que lo único que tiene es un botón, con el que al pulsarlo, se copia la imágen de la webcam en un control PictureBox... me imagino que es un primer paso en este mundo, y que me quedan miles de caminos que recorrer, pero esta librería no sé si da mucho más de si, de modo que me gustaría que alguno que haya trabajado con esto me eche un cablecillo.

Seguiré informando. Muchas gracias por la ayuda.
Ángel


Responder
466 respuestas
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

bueno, en ese caso prefiero seguir tus pasos y tener que arreglar luego miles de cosas, antes que quedarme atascado antes de empezar... ahora ya se que de momento pasare de la camara, y me pondre a investigar la libreira que comentamos antes esta misma tarde...
aun no he averiguado pq no tira, pero deberia, porque es una estupidez... es que estoy en el curro, montando mi primer proyecto web desde cero, para un banco Indu... que quiere donar 120000 libros... a 200 bibliotecas alli.


Responder
furri
Respuestas: 2708
(@furri)
Ardero
Registrado: hace 20 años

Se me olvido una pregunta... no usas para nada el objeto bitmap?
Como recorres la matriz de pixeles entonces?
Como consigues que el proceso no tarde tres dias en analizar la imagen?

Yo uso el objeto PictureBox, recorro la matriz con dos bucles for/next anidados y ¿como consigo que el proceso no tarde 3 dias?.... trabajo, trabajo y mas trabajo... jajaja de todos modos te darás cuenta de que VB es muy lento, ese es otro de los motivos de querer irme a C++, tengo que ser honrado y decir que Golfus Hispánicus en competición no llegaba a procesar 1 imagen por segundo, al empezar el proyecto procesaba 10 frames por segundo pero como siempre se deja todo para ultima hora las mejoras que fuí haciendo en el programa y las verificaciones que tuvimos que implementar sin tiempo para depurar y lo fueron haciendo cada vez mas lento....
Ahora con mas tiempo he retocado algunos algoritmos y va mas rapido pero claro... ahora no vale...

Cuenta con que la mayoria de la maquinaria y software de Golfus Hispanicus la emplearemos para competir en Eurobot 2007 (falta 1 año), por lo que este nuevo sistema de visión en C++ a poder ser sobre linux lo tengo que sacar adelante.... básicamente es mi parte del trabajo en el equipo "EuroGolfus"...

furri.


Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

a ver si teneis mas suerte en 2007... seguro que este sistema lo consigues mejorar muchisimo en este tiempo. a mi me gustaria trabajar con ello este verano, asi que te ire dando novedades desde esta misma noche.
Lo de los bucles ya me lo imaginaba, pero que propiedad del picturebox te permite obtener los bytes RGB de un pixel? no ye encontrado ninguna...
seria mas efectivo un sistema que trabaje con grupos de pixeles, de 2x2 ... 1/2 de la resolucion, pero el dopble de la velocidad actual, no?


Responder
furri
Respuestas: 2708
(@furri)
Ardero
Registrado: hace 20 años

a ver... para leer el color hacia algo asi como:

color = mipicturebox.point(x,y)

y para pintar

mipicturebox.pset(x,y),color

Pero la variable color es un Long de 3 bytes por lo que hay que hacer la transformación a RGB en tres variables y entonces tratarlas por separado.

Yo para acelerar el proceson de escaneo de la imagen hacia lo siguiente... por ejemplo, una pelota tenia que ocupar mas de 5x5 pixels, de manera que si busco una pelota de ping-pong blanca hago un rastreo de 5 en 5 pixels y donde me encuentre un punto blanco me paro y analizo los que están alrededor...
Si en la imagen no te encuentras puntos blancos la revisas en un instante (25 veces mas rápido que rastreando los pixeles de 1 en 1).

Ya tienes mas madera que echar al horno.... calentita vas a tener la cabeza con esto.

furri.


Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

Dios mio quien me mandara a mi meterme en esta movida...
como me has dicho que C va a ser mucho mas rapido yo... muy machote me he puesto a pasar la aplicacion que empece anoche en VB a C...
Previamente la he arreglado en VB, y ya tengo la resta de dos imagenes RGB en una tercera...
Bueno, pues el caso es que ahora estoy con C#.Net... por que pelotas no se me mete ni en el primer Bucle for con el evento Click?
Este es mi codigo... ves algo que pueda tener mal?

private void button1_Click(object sender, EventArgs e)
{
Bitmap img1 = new Bitmap(@"C:ProyectosVision ArtificialWebCamPruebas1WindowsApplication1WindowsApplication2R100.bmp");
Bitmap img2 = new Bitmap(@"C:ProyectosVision ArtificialWebCamPruebas1WindowsApplication1WindowsApplication2Lineas.bmp");
Bitmap img3 = new Bitmap(@"C:ProyectosVision ArtificialWebCamPruebas1WindowsApplication1WindowsApplication2Blanco.bmp");

int Red1, Red2, Green1, Green2, Blue1, Blue2, x, y;

for (y = 0; y == pictureBox1.Height; y=y+1)
{
for (x = 0; x == pictureBox1.Width; x++)
{

Red1 = img1.GetPixel(0, y).R - 1;
Red2 = img2.GetPixel(0, y).R - 1;
Green1 = img2.GetPixel(0, y).G - 1;
Green2 = img1.GetPixel(0, y).G - 1;
Blue1 = img2.GetPixel(0, y).B - 1;
Blue2 = img1.GetPixel(0, y).B - 1;
img3.SetPixel(0, y, Color.FromArgb(Red1 - Red2, Green1 - Green2, Blue1 - Blue2));
pictureBox3.Image = img3;

};
};

}

Estoy perdidisimo con esta tonteria, y me he bloqueado...

Edito: lo chungo es que no me da errores, ni al pulsar el boton...


Responder
Página 5 / 94
Compartir: