https://foro.gambas-es.org/viewtopic.php?f=1&t=2101
-----------------------------------
arubioc
Lunes, 26 Diciembre 2011, 23:53

Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Buenas noches a todos, y ante todo gracias por leer esta pregunta.
Vamos a ver si tenemos suerte... necesito reconocer patrones que me llegan desde una webcam y reconocerlos para realizar una proyeccion sobre el monitor  y generar así una RA.
Quisiera saber si alguien ha encontrado algun fragmento de código que permita analizar una serie de fotogramas llegados por una webcap y por tanto reconocer un patron en ellos.

Gracias y un saludo a la comunidad Gambas.


-----------------------------------
jsbsan
Martes, 27 Diciembre 2011, 12:34

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Hola Arubioc:

En java puedes encontras muchos algoritmos y librerias para analizar imagenes.

Te dejo este enlace_
[url=http://foro.elhacker.net/java/reconocimiento_de_patrones_en_java-t295053.0.html]Reconocimiento de Patrones en JAVA

Suerte

Nota:
Por cierto ¿que es una RA?


-----------------------------------
arubioc
Martes, 27 Diciembre 2011, 19:31

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Hola jsbsan, gracias por tu aportación voy a echarle un vistazo al link que me mandas.
RA es la abreviación de la Realidad Aumentada.

os paso un vídeo de youtube, una imagen vale más que mil palabras.

[youtube]e7_kh48NKAI[/youtube]


-----------------------------------
jsbsan
Martes, 27 Diciembre 2011, 20:54

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Muy interesante el tema.

He visto este video que seguramente te puede interesar:

[youtube]wmeQRbp8DKY[/youtube]

Hay utiliza http://processing.org/  y Blender

Y mírate también esta entrada del blog de Emilio Vegas Ubillus (Peru):
[url=http://diariowm.wordpress.com/2010/04/13/tutorial-realidad-aumentada-processing/]http://diariowm.wordpress.com/2010/04/13/tutorial-realidad-aumentada-processing/

Saludos


-----------------------------------
arubioc
Miercoles, 28 Diciembre 2011, 17:43

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Voy a indagar sobre processing, ya que a mi solo me interesa la parte de reconocer el patrón, para detectar si esta presente o no en un vídeo a tiempo real.


-----------------------------------
codificador
Jueves, 29 Diciembre 2011, 00:40

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
[quote user="arubioc" post="12145"]
Quisiera saber si alguien ha encontrado algun fragmento de código que permita analizar una serie de fotogramas llegados por una webcap y por tanto reconocer un patron en ellos.

[/quote]
 en la web del programador hay un codigo que es para detectar un puntero laser
pero es para vb.net pero es bastante simple analiza un bitmat y encuentra el punto mas luminoso respecto al promedio
no es gambas pero puede darte alguna idea


-----------------------------------
arubioc
Jueves, 29 Diciembre 2011, 17:38

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Voy, a verlo.
Merci!


-----------------------------------
jguardon
Jueves, 29 Diciembre 2011, 19:57

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
La verdad, esto me parece interesante, pero por ahora le veo un inconveniente. Gambas de momento no es capaz de manejar streams de vídeo, y por lo que he visto hasta ahora lo único que puede hacer es capturar imágenes sueltas de una webcam usando un timer para dibujarla después en un DrawingArea o un PictureBox. Bien, si en ese proceso somos capaces de analizar la imagen con una librería externa de manera rápida, entonces problema resuelto. Pero hacerlo en Gambas me parece un desafío demasiado fuerte, al ser un lenguaje interpretado y no disponer de las herramientas adecuadas. No digo que no sea posible, que no lo sé (desde luego sólo en Gambas3) pero los algoritmos de comparación necesarios pueden ser lentos y hacer el proyecto inviable.

Desde luego, tiene que haber una forma alternativa, usando alguna librería escrita necesariamente en C ó en C++. 

Yo conozco, o mejor dicho, en una ocasión usé Zoneminder ( http://www.zoneminder.com/ ) y recuerdo que tenía opciones de detección de movimiento, es decir, un tipo de videosensor bastante efectivo. Como es software libre, puedes echar un vistazo a sus fuentes para ver cómo lo implementan o directamente intentar usar alguna de sus librerías.

Hay otro proyecto interesante, "DVR"  pero desconozco si hace algo parecido: http://www.pierrox.net/cmsms/open-source/dvr.html

Suerte con el proyecto, saludos


-----------------------------------
codificador
Jueves, 29 Diciembre 2011, 20:48

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
bien estuve mirando el ejemplo que dije
usa la clase bitmap para recorrer la imagen pixel por pixel con un simple if dentro de un bucle for para encontrar el color del  puntero laser

estuve  revisando si existe una clase similar en  gambasdoc pero al parecer no encontre la palabra pixel

revisando si existía algo similar  en linux me di cuenta que existe en mono  exactamente la misma clase
aunque el ejemplo de la web del programador no funcionara por que usa un apiwin32 para acceder a la cámara
al menos la parte de análisis debería funcionar con la clase de mono


-----------------------------------
tururu
Viernes, 30 Diciembre 2011, 13:05

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
a ver, el truco esta en...

crear un sistema fácil de reconocer

en los ejemplos hay una cartulina que tiene un color negro cuadrado, con un marco blanco

la cuestión es, leer el bitmap, y considerar un protocolo

por ejemplo:

cuando detecte blanco después negro y después blanco, esa posicion es la coordenadas de ubicación inicial

después, detectas lo mismo pero con otro protocolo diferente, marco negro, con blanco y después negro. ahi tienes el final de la ubicación
(coordenadas x y finales

entonces, tiene ls distancias de desplazamiento de la cartulina, en el eje x,y,z


 [font=Courier New]cartulina 
?????????????????????????????????????????????????
................

?????????????????????????????????????????????????  
??????nnnnnnnnnnnnnnnnnnnnnnnnn??????????????????
??????nnnnnnnnnnnnnnnnnnnnnnnnn??????????????????
??????nnnnbbbbbbbbbbbbbbbbbbnnn??????????????????
??????nnnnbbbbbbbbbbbbbbbbbbnnn??????????????????
??????nnnnnnnnnnnnnnnnnnnnnnnnn??????????????????
??????nnnnnnnnnnnnnnnnnnnnnnnnn??????????????????
?????????????????????????????????????????????????
?????????????????????????????????????????????????
...........
...........

?????????????????????????????????????????????????
?????????????????????????????????????????????????
????????????????????bbbbbbbbbbbbbbbbbbbbbbb??????
????????????????????bbbbbbbbbbbbbbbbbbbbbbb??????
????????????????????bbbbbbbbnnnnnnnnnbbbbbb??????
????????????????????bbbbbbbbnnnnnnnnnbbbbbb??????
????????????????????bbbbbbbbbbbbbbbbbbbbbbb??????
????????????????????bbbbbbbbbbbbbbbbbbbbbbb??????
?????????????????????????????????????????????????
............[/font]


?= pixel cualquier color
n=pixel negro &x0
b=pixel blanco &xffffffff


sabes que entre el pixel n-b-n y el pixel b-n-b, hay x pixeles

si detectas que disminuyen al inclinarse la cartulina, quiere decir que que estas desplazando la cartulina en el eje y

si detectas que x de n-b-n y x de b-n-b esta aumentando, eso quiere decir que estas rotandolo en el eje x


y así vas haciendo tu composición de condiciones 

y una vez, tienes eso, con unos simples cálculos matemáticos, (el pitagoras), o si tienes conocimientos de rotación y traslación por matrices, le das caña a las coordenadas de cualquier figura, con la matriz de rotación ó de traslación, y zas, lo pintas en la pantalla


así tienes un control del objeto que pintas, respecto a la cartulina que tiene el protocolo de desplazamientos.

pensado que el objeto, es simplemente una matriz de puntos ya creados, y el trabajo que debéis realizar es saber como la cartulina cambia de posición, y después el trabajo de pintar, es meramente un bucle, que pinta las coordenadas multiplicadas por las matrices que desees (rotación , traslación, aumentar, disminuir...)


eso es a grandes rasgos , como funciona esto de la realidad aumentada (en el fondo es una chorrada, pero es gracioso)

por cierto, para examinar los pixeles, deberíais utilizar otro lenguaje, ya que el gambas... se queda cortito en velocidad, y para calcular las matrices, también debéis utilizar otro lenguaje, porque sino, cada vez que intentéis detectar cada fotograma y pintar el objeto, pues....


Un saludo


-----------------------------------
tercoIDE
Sabado, 05 Agosto 2017, 15:14

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
que tema mas interesante...


-----------------------------------
razaAztk
Domingo, 06 Agosto 2017, 04:56

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
Referente a procesar imágenes de webcam con gambas lo hice en su momento con la librería gb.v4l... aunque ahora ya está deprecated... aunque hace un tiempo probé el código y aún funcionaba por la compatibilidad hacía atrás de gambas.

Revisa: https://foro.gambas-es.org/viewtopic.php?f=5&t=3296

Se supone se puede usar la clase gb.media para el streaming de la webcam... Pero yo tuve problemas. Revisa: https://foro.gambas-es.org/viewtopic.php?f=4&t=5597

Saludos!


-----------------------------------
vuott
Domingo, 06 Agosto 2017, 16:37

Re: Realidad Aumentada - Reconocer Patrones Por Webcam
-----------------------------------
[quote user="razaAztk" post="39506"]Pero yo tuve problemas. Revisa: https://foro.gambas-es.org/viewtopic.php?f=4&t=5597[/quote]

Recuerdo: relativamente a la sub-propiedad "[i]$hPlayer.Video.Image[/i]".

[u]No[/u] debes utilizar los Componentes graficos gb.qt4, gb.qt5, ni gb.gui.qt  !
Usa gb.gtk o gb.gtk3.

En alternativa, si queres usar los recursos de QT, tienes que utilizar la Clase "[i][color=#B20000]MediaPipeline[/color][/i]" en lugar de "[i]MediaPlayer[/i]".


