Ayuda con fotocall con croma

Necesito ayuda de mentes mas desarrolladas que la mia.
He encontrado una pagina con un manual para hacer un fotomaton con una orange pi, una webcam y un pulsador. Mi pregunta es si seria muy complicado si a esto añadiendole un lcd tactil y un fondo verde, se podria poner un menu con 5 o 6 fondos prefijados que seleccionar antes de hacer las fotos con el pulsador???

gracias por adelantado [oki]
Si y no:

Añadir la funcionalidad del croma es muy sencillo con imagemagik, y hay mil tutoriales en internet y muchas formas de hacerlo, según lo que quieras hacer (para que un fondo si tambien puedes añadir un telón y un marco por encima). Se puede hacer con una sola linea de comando en bash.

Pero tu lo que quieres es tener cierto control sobre el proceso. Si quieres una tactil, lo mas facil es diseñar una web que seleccione los fondos y realice todo lo necesario. En este caso te podría sobrar hasta el boton disparador (que estaría en la tactil)


Pero creo que sería mas facil si usas una pantalla normal y tres o dos botones mas: "fondo de la derecha", "fondo de la izquierda" y "seleccionar fondo" (que puede ser el mismo disparador) y en la pantalla ir mostrando el resultado de aplicar el comando de fusion del fondo + foto + marco. Si quieres que se vea en directo puedes usar mmpeg para ir mostrando la escena.
Esto apenas te requerirá escribir código, pues puedes reciclar todo lo que has visto, casi todo será un corta y pega desde internet y no tienes que usar html, css ni php.
Puede valer solo con un script en bash. O algo muy sencillo en pytho. Y si usas una botonera usb (un mando, un teclado numerico .....) tu proyecto se puede usar con cualquier pc que use linux. [beer] [beer]

Si dices que pagina es la del proyecto te puedo decir como lo haría yo.
Esog Enaug escribió:Si y no:

Añadir la funcionalidad del croma es muy sencillo con imagemagik, y hay mil tutoriales en internet y muchas formas de hacerlo, según lo que quieras hacer (para que un fondo si tambien puedes añadir un telón y un marco por encima). Se puede hacer con una sola linea de comando en bash.

Pero tu lo que quieres es tener cierto control sobre el proceso. Si quieres una tactil, lo mas facil es diseñar una web que seleccione los fondos y realice todo lo necesario. En este caso te podría sobrar hasta el boton disparador (que estaría en la tactil)


Pero creo que sería mas facil si usas una pantalla normal y tres o dos botones mas: "fondo de la derecha", "fondo de la izquierda" y "seleccionar fondo" (que puede ser el mismo disparador) y en la pantalla ir mostrando el resultado de aplicar el comando de fusion del fondo + foto + marco. Si quieres que se vea en directo puedes usar mmpeg para ir mostrando la escena.
Esto apenas te requerirá escribir código, pues puedes reciclar todo lo que has visto, casi todo será un corta y pega desde internet y no tienes que usar html, css ni php.
Puede valer solo con un script en bash. O algo muy sencillo en pytho. Y si usas una botonera usb (un mando, un teclado numerico .....) tu proyecto se puede usar con cualquier pc que use linux. [beer] [beer]

Si dices que pagina es la del proyecto te puedo decir como lo haría yo.

Muchas gracias Esog Enaug.

http://orangepiweb.es/fotomaton.php esta es la pagina donde he visto el proyecto aunque mis conocimientos de programacion son muy muy limitados(experto en copiar y pegar codigo y como mucho modificar alguna linea), al igual que se usa un pulsador del gpio para disparar, ¿se podria utilizar otros 3 pulsadores como fondos prefijados?, por seguir con el mismo procedimiento.
He visto que esta escrito en python, por lo que es muy facil el corta y pega.

casidi22 escribió:Muchas gracias Esog Enaug.

http://orangepiweb.es/fotomaton.php esta es la pagina donde he visto el proyecto aunque mis conocimientos de programacion son muy muy limitados(experto en copiar y pegar codigo y como mucho modificar alguna linea), al igual que se usa un pulsador del gpio para disparar, ¿se podria utilizar otros 3 pulsadores como fondos prefijados?, por seguir con el mismo procedimiento.


Si lo haces como dices, con solo unos pocos fondos y un boton para cada fondo tienes que multiplicar la parte del bonton, cambiando los pines y el comando a realizar.

if gpio.input(sensor) == 0:
      print("Espera 3 segundos")
      time.sleep(3)
      sufijo = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
      nombre = "orangepi-" + sufijo + ".jpg"
      subprocess.call(["fswebcam", "-r", "1280x720", nombre])
   time.sleep(0.5)


por algo así por boton:

if gpio.input([b]fondo1[/b]) == 0:
      print("Espera 3 segundos")
      time.sleep(3)
      sufijo = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
      nombre = "orangepi-" + sufijo + ".jpg"
      subprocess.call([[b]composite imagen.jpg fondo.jpeg output.jpg[/b]])
   time.sleep(0.5)


Ten en cuenta que tendras que definir las varibles de los pines de los nuevos botones y que el código que te he puesto no funciona, no está bien configurada la llamada a subprocess.call y el comando no es exactamente el que deberías usar, pero los tiros van por esos lares.
Tambien puedes crear la mascara que pondras sobre el fondo eliminando el color del fondo de la foto con python directamente. Hay tutoriales por internet que hacen cosas muy parecidas o identicas (hay librerias en python para manipular imagenes)

Mirate esto:
http://robologs.net/2016/05/18/detectar-multiples-colores-con-opencv-y-python/
y esto:
http://nightdeveloper.net/cambiar-usando-python/
El truco está en cambiar el color por un pixel transparente y luego unir las imagenes desde python. Es mucho mas elegante y educativo que hacer una llamada a una funcion del sistema (lo que te crea una dependencia)

Si usas USB tendras que leer la entrada con

accion = input()
en vez de
gpio.input([b]fondo1[/b]) == 0


y luego itinerar con if ... elif ... else sobre las posibles teclas

Si lo pones en github (o similar) te puedo ayudar y lo podemos sacar adelante. Pero tendría que ser con USB, por que tengo RPi´s y pc, pero no OPi. Estoy seguro de que es muy facil (aunque tengamos que aprender un poco por el camino)
Esog Enaug escribió:He visto que esta escrito en python, por lo que es muy facil el corta y pega.

casidi22 escribió:Muchas gracias Esog Enaug.

http://orangepiweb.es/fotomaton.php esta es la pagina donde he visto el proyecto aunque mis conocimientos de programacion son muy muy limitados(experto en copiar y pegar codigo y como mucho modificar alguna linea), al igual que se usa un pulsador del gpio para disparar, ¿se podria utilizar otros 3 pulsadores como fondos prefijados?, por seguir con el mismo procedimiento.


Si lo haces como dices, con solo unos pocos fondos y un boton para cada fondo tienes que multiplicar la parte del bonton, cambiando los pines y el comando a realizar.

if gpio.input(sensor) == 0:
      print("Espera 3 segundos")
      time.sleep(3)
      sufijo = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
      nombre = "orangepi-" + sufijo + ".jpg"
      subprocess.call(["fswebcam", "-r", "1280x720", nombre])
   time.sleep(0.5)


por algo así por boton:

if gpio.input([b]fondo1[/b]) == 0:
      print("Espera 3 segundos")
      time.sleep(3)
      sufijo = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
      nombre = "orangepi-" + sufijo + ".jpg"
      subprocess.call([[b]composite imagen.jpg fondo.jpeg output.jpg[/b]])
   time.sleep(0.5)


Ten en cuenta que tendras que definir las varibles de los pines de los nuevos botones y que el código que te he puesto no funciona, no está bien configurada la llamada a subprocess.call y el comando no es exactamente el que deberías usar, pero los tiros van por esos lares.
Tambien puedes crear la mascara que pondras sobre el fondo eliminando el color del fondo de la foto con python directamente. Hay tutoriales por internet que hacen cosas muy parecidas o identicas (hay librerias en python para manipular imagenes)

Mirate esto:
http://robologs.net/2016/05/18/detectar-multiples-colores-con-opencv-y-python/
y esto:
http://nightdeveloper.net/cambiar-usando-python/
El truco está en cambiar el color por un pixel transparente y luego unir las imagenes desde python. Es mucho mas elegante y educativo que hacer una llamada a una funcion del sistema (lo que te crea una dependencia)

Si usas USB tendras que leer la entrada con

accion = input()
en vez de
gpio.input([b]fondo1[/b]) == 0


y luego itinerar con if ... elif ... else sobre las posibles teclas

Si lo pones en github (o similar) te puedo ayudar y lo podemos sacar adelante. Pero tendría que ser con USB, por que tengo RPi´s y pc, pero no OPi. Estoy seguro de que es muy facil (aunque tengamos que aprender un poco por el camino)

La OPi la tengo pedida pero es solo por el precio ya que se utiliza raspbian asi que una vez terminada en cualquier RPi funcionara. Incluso he pensado como hacer el disparador a distancia la manera mas sencilla seria usando algo asi https://es.aliexpress.com/store/product ... 92c0da7c98 adaptando los reles de salida, voy a mirar como ponerlo en github y a ver si consigo que me dejen una RPi 2 o 3 mientas llega la OPi, yo tengo una de primera generación y ya va trompicones con raspbian
El codigo de la OPi no funcionaría directamente en RPi por que usan diferente librería y numeración para los GPIO. Por eso te digo de usar el USB.
Sobre el disparador a distancia, yo usaría IR, pero solo si lo necesitara, es decir, si no puedo meter un cable. Ese que pones es matar moscas a cañonazos.

La RPi1 te va lenta por el escritorio. Prueba a darle mas o menos ram a la grafica. O usa rasbian sin escritorio y te conectas por ssh. Aunque pusieras una pantalla para mostrar las fotos no te hace falta el escritorio completo.
Esog Enaug escribió:El codigo de la OPi no funcionaría directamente en RPi por que usan diferente librería y numeración para los GPIO. Por eso te digo de usar el USB.
Sobre el disparador a distancia, yo usaría IR, pero solo si lo necesitara, es decir, si no puedo meter un cable. Ese que pones es matar moscas a cañonazos.

La RPi1 te va lenta por el escritorio. Prueba a darle mas o menos ram a la grafica. O usa rasbian sin escritorio y te conectas por ssh. Aunque pusieras una pantalla para mostrar las fotos no te hace falta el escritorio completo.

¿No se supone que las principales caracteristica de la OPi es que el patillaje del gpio es el mismo que el de la RPi y que se pueden usar sus imagenes sin problemas?
p.d.: ya tengo una pi2 y una webcam 1080 prestada. [chulito]

vale son compatibles los gpios pq estan en la misma posición pero las nomenclaturas son distintas

¿Podría usar esto: https://github.com/attilad/pibooth editando el cambio de fondo aleatorio por uno que sea con 2 botones uno de avanzar y otro de retroceder?
casidi22 escribió:¿Podría usar esto: https://github.com/attilad/pibooth editando el cambio de fondo aleatorio por uno que sea con 2 botones uno de avanzar y otro de retroceder?


Si, creo que solo tiene que modificar la función GetBackground() del pibooth.py.
7 respuestas