Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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
Waaaaaaaaaaaalaaaaaaaaaaaaaaa!!!
Vaya cacho de programa... es lo mas completo que he visto de V.A.... como has encontrado esto?
Es una maravilla, se puede hacer todo lo que hace falta... y muchiiiiiiiiisimo mas... que guapo.
Voy a trastear un pcoo con el, es una muy buena manera de pillar ideas.
Pos sinceramente, lo e encontrao mientras buscaba informacion para hacer un programa como el vuestro, pero en Python (es la leche este lenguaje xD)
a ver si para esta tarde tengo algo hecho, si no es para esta tarde, pa mi q va a ser pa finales de septiembre XDD
Y es gratis? dónde está la pega?! 😯
Bueno, aqui va mi granito de arena, el programa de momento solo realiza un filtrado del color preajustado (el color esta dentro del codigo, lo siguiente sera poder capturar el color de la pantalla, si se deja xD), en principio el sistema no usa RGB para la identificacion del color, sino el sistema CIE XYZ, por el tema que ya hablamos de la diferencia entre el sistema RGB y otros que se adaptan mas a nuestro tipo de percepcion, si escogí ese es pq la tabla de conversion venia en un ejemplo 😛
Aparte de eso, decir que esta en Python, lo he realizado como "prueba de concepto" y para ver que tal va Python (hoy es la primera vez que lo uso, lo cual dice mucho de python 8)), el codigo es casi multiplataforma, lo unico que lo "amarra" a windows es el sistema de captura, que es especifico de windows, pero creo haber visto versiones para linux (que aun no he probao)
para poder ejecutarlo solo hace falta:
Pygame http://www.pygame.org/download.shtml (este se encarga de sacar la imagen por pantalla)
Python Imaging Library (PIL) http://www.pythonware.com/downloads/index.htm (con este trasteo y aplico filtros)
VideoCapture http://videocapture.sourceforge.net/ este es el que se encarga de la webcam (solo para windows)
y por supuesto... Python!! http://www.python.org/download/
aqui va el codigofrom VideoCapture import Device
import Image
import ImageChops
import ImageDraw
import sys
import pygame
#"manteca" la funcion que realiza el trabajo de filtrado
def manteca(im):
#separamos la imagen en sus tres canales RGB, para poder modificarlos agusto
imagenrgb = im.split()
R, G, B = 0, 1, 2
X, Y, Z = 0, 1, 2
#la tabla de conversion de RGB a XYZ
rgb2xyz = (
0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0 )
#lo mismo que con imagenrgb, solo que ademas aplicamos la conversion de la tabla anterior
temp = im.convert("RGB", rgb2xyz)
xyzim= temp.split()
#aqui se ajusta el color y el margen
x=40
y=40
z=40
margen=20
mask1 = xyzim[X].point(lambda i: (i >x-margen and i <x> y-margen and i <y>z-margen and i<z+margen) and 255 )
#juntamos las 3 mascaras
mask = ImageChops.lighter(mask1, mask2)
mask = ImageChops.lighter(mask, mask3)
#para ver como va cada filtro, no usar en bucles infinitos 😉
#xyzim[X].show()
#xyzim[Y].show()
#xyzim[Z].show()
#im.show()
#mask1.show()
#mask2.show()
#mask3.show()
#mask.show()
# aplicamos la mascara, dejamos a cero alli donde hay mascara (vale ta al reves)
imagenrgb[R].paste(0, None, mask)
imagenrgb[G].paste(0, None, mask)
imagenrgb.paste(0, None, mask)
im = Image.merge(im.mode, imagenrgb)
return im
# iniciamos pygame
pygame.init()
# tamaño de la pantalla
size = width, height = 320,240
# cargamos la camara
camara = Device()
#tadaaaan ya tenemos ventanuco xD
screen = pygame.display.set_mode(size)
#bucles infinitos, que hariamos sin ellos....
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
#capturamos un frame
frame = camara.getImage()
#lo dejamos preparado para escribir sobre el
colora = Image.fromstring("RGB", (320,240), frame.tostring())
#nos metemos en manteca
filtrado = manteca(colora)
#de aqui pa'bajo es colocar la imagen en pantalla
frame = pygame.image.frombuffer(filtrado.tostring(), (320,240), "RGB") #dicen q esto va mas rapido
screen.blit(frame, (0,0)) #coloca la imagen en el recuadro de la pantalla
pygame.display.flip() #Actualiza la imagen en pantalla
Por cierto, la imagen solo se actualiza despues de cada operacion, y viendo como va, me da a entender que la velocidad de ejecucion es bastante alta 🙂
Sed buenos con el 😉
Pd.- Gedeon, por tu culpa me he metio en Python, veras cuando te coja!! xDD