Tabla de contenido:

RoboPhoto: un generador de mosaicos para el público: 4 pasos
RoboPhoto: un generador de mosaicos para el público: 4 pasos

Video: RoboPhoto: un generador de mosaicos para el público: 4 pasos

Video: RoboPhoto: un generador de mosaicos para el público: 4 pasos
Video: Chibi Robo! Photo Finder - Exhibition Room 2024, Mes de julio
Anonim
Image
Image
RoboPhoto: un generador de mosaicos para el público
RoboPhoto: un generador de mosaicos para el público
RoboPhoto: un generador de mosaicos para el público
RoboPhoto: un generador de mosaicos para el público

RoboPhoto es un generador de fotomosaicos en tiempo real

RoboPhoto crea un fotomosaico de sus usuarios, mientras espera.

Mediante el uso de técnicas digitales modernas como procesamiento de imágenes, reconocimiento facial e inteligencia artificial, RoboPhoto es capaz de crear un fotomosaico de todos los visitantes que pasan y presionan su botón, en tiempo real.

Cada vez que se presiona el botón, se toma una foto de la persona en cuestión. Instantáneamente, cada foto es escaneada e interpretada por RoboPhoto. El software RoboPhoto luego alterará todas las imágenes individuales, para que se convierta en parte de una imagen más grande, y luego imprimirá esta imagen alterada en una etiqueta etiquetada con un conjunto de coordenadas que indican la ubicación de cada foto dentro de esa imagen más grande. A continuación, se le pide a cada visitante que coloque su propia foto-pegatina en un lienzo más grande que contiene solo una cuadrícula correspondiente.

Durante el funcionamiento de RoboPhoto, se creará una nueva imagen. Un fotomosaico compuesto por estas fotografías individuales que imitarán una "imagen objetivo" predefinida.

RoboPhoto también funciona en modo de usuario único. Cuando se configura de esta manera, RoboPhoto crea un mosaico completo de un solo usuario.

Suministros

  • Una PC con Windows 10 con paquetes de Visual Studio e IoT instalados
  • Una Raspberry Pi 3B + con Microsoft Windows 10 IoT instalado
  • Una impresora de etiquetas a color (Brother VC-500W)
  • Un gran botón rojo montado en un pedestal para la entrada del usuario.
  • Una pantalla HDMI para comentarios de los usuarios
  • Una cámara Microsoft Xbox Kinect v2, robada a mi hijo, para tomar fotografías
  • Una red (Wifi, LAN)
  • Una cuadrícula de destino. Una hoja de papel con una cuadrícula impresa, llena de coordenadas. Esta cuadrícula de papel se utiliza como lienzo donde los visitantes pueden pegar su fotografía en las coordenadas designadas. Y así, eventualmente, formarán juntos el resultado final: un nuevo fotomosaico hermoso.

Se utilizó una cámara icrosoft Kinect 2.0 porque puede tomar imágenes de profundidad. Esta función se utiliza para crear una pantalla verde virtual en cada fotografía individual. De esta manera, RoboPhoto puede volver a pintar el fondo de cada fotografía individual para que coincida con el color de una pieza de destino dentro del mosaico futuro.

Paso 1: cómo funciona

Como opera
Como opera
Como opera
Como opera
Como opera
Como opera
Como opera
Como opera

RoboPhoto es una instalación que contiene un pedestal con un gran botón rojo, una computadora con una impresora de etiquetas adjunta y un pequeño dispositivo IoT que maneja la interfaz de usuario (pantalla y botón). En mi caso: una RaspBerry 3B +.

  1. RoboPhoto funciona dentro de un lugar accesible al público y (después de encenderlo) es autónomo. Al correr, RoboPhoto anima a los visitantes que pasan a presionar su gran botón rojo.
  2. Siempre que se presione ese gran botón rojo, RoboPhoto tomará una fotografía del visitante que acaba de presionar el botón con la cámara Kinect.
  3. Entonces RoboPhoto utilizará su avanzada I. A. y habilidades de procesamiento de imágenes para modificar cada foto para que coincida con una pieza dentro del mosaico futuro. Para lograr esto, RoboPhoto vuelve a pintar el fondo de cada foto para que coincida con el color de una pieza de destino dentro de una imagen precargada. Después de la edición, RoboPhoto imprime la foto editada en una pegatina junto con un conjunto de coordenadas que señalan la ubicación de esta pegatina dentro del mosaico.

  4. Luego, se le pide al usuario que coloque la etiqueta en la hoja de destino del mosaico.
  5. Y así, después de que muchas personas hayan visitado, surgirá una nueva obra de arte. Para crear un mosaico necesitarás muchas piezas individuales. Obtuve resultados decentes con 600 piezas.

RoboPhoto también puede funcionar en modo de usuario único.

En esta configuración, RoboPhoto crea un mosaico completo de fotografías editadas de un solo usuario. Después de presionar el botón, RoboPhoto tomará alrededor de> 600 fotografías diferentes del usuario, y luego las editará y organizará todas para formar un único mosaico nuevo, creado a partir de una imagen objetivo preseleccionada.

Paso 2: Montaje del hardware

Montaje del hardware
Montaje del hardware
Montaje del hardware
Montaje del hardware

Como se muestra en la imagen de arriba, la PC con Win 10 está conectada a la cámara Kinect. Kinect debe estar conectado mediante USB 3.0. En el momento en que creé RoboPhoto, no había ninguna Raspberry Pi con USB 3.0 disponible. *

La PC también se usa para manejar la impresión en la impresora de etiquetas adjunta. En mi caso una Brother VC-500W. Una impresora de etiquetas de color para el hogar bastante barata. Sin embargo, es muy, muy lento. Mejor use uno profesional si puede.

El botón rojo grande está conectado a una Raspberry Pi 3B +. Solo 4 cables están conectados al GPIO. Esta es la única soldadura necesaria realizada en este Instructable. El Pi también proporciona retroalimentación a nuestro visitante por medio de una pantalla TFT de 7 '' a través de HDMI.

Para ordenarlo, construí un pedestal de madera que sostiene todos estos componentes.

Junto al pedestal, contra la pared, se coloca una hoja de papel que contiene la cuadrícula de destino y las coordenadas (A1 / A2). Debido a que la impresora de etiquetas que utilicé tiene un ancho máximo de etiqueta = 2, 5 cm, todos los cuadrados en esta cuadrícula miden 2, 5 cm x 2, 5 cm.

* Hoy, Raspberry Pi4 ofrece USB3.0. Alse W10 se puede ejecutar en el dispositivo. Por lo tanto, teóricamente debería ser posible crear un RoboPhoto v2.0 sin el uso de una PC. Tal vez Covid '19 me proporcione suficiente tiempo por mi cuenta para publicar un Instructable de este tipo pronto.

Paso 3: escribir el código

Escribir el código
Escribir el código
Escribir el código
Escribir el código

Código

RoboPhoto fue creado con VisualStudio como solución con dos proyectos:

  1. Una aplicación de Windows Forms en la PC aloja un servidor TCP y maneja la entrada de Kinect
  2. Una Raspberry Pi 3B + que aloja un cliente TCP dentro de una aplicación encabezada por UWP (configurada como aplicación de inicio) para manejar eventos de pulsación de botones y proporcionar comentarios al usuario a través de su pantalla TFT de 7 ''.

En el diagrama de arriba, he intentado darte una idea de lo que está haciendo mi soft. El Visual Studio que escribí para crear esta solución RoboPhoto (absolutamente 100% funcional) se proporciona con este Instructable. Sin embargo, debo advertir a todos los que descargan este archivo: el código que escribí está lejos de ser bonito y, a menudo, está vinculado a mi dev-PC. Así que animo a todos a crear una solución mejor, más agradable y más estable.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

La red

En el código de ejemplo, el código de Pi se implementa a través de Visual Studio en una dirección IP en mi red. Probablemente deberías cambiar esto para que se adapte al tuyo. Para hacer esto, haga clic con el botón derecho en el proyecto del cliente ARM después de abrir la solución en Visual Studio, luego elija propiedades y cambie el valor Máquina remota a la dirección IP de su propio Pi. También debe permitir que el tráfico vaya de cliente a servidor en el puerto 8123 dentro del Firewall de Windows en el servidor (PC). Si ejecuta la solución desde Visual Studio, debería pedirle que lo haga por U.

Mientras codificaba, tuve muchos problemas para que W32 y UWP se comunicaran correctamente. Lo hice funcionar usando dos clases separadas en cliente y servidor: resp MyEchoClient.cs (en el cliente ARM) y ConnectionClient.cs (manejando conexiones de cliente en el servidor).

Archivos de mosaico - clase personalizada

RoboPhoto crea mosaicos para imitar una imagen de destino. Esta imagen de destino y todas las fotografías individuales que juntas componen el mosaico futuro, así como algunas otras propiedades de cada RoboPhoto se almacenan en archivos en un sistema de archivos. Mi código adjunto usa un conjunto de archivos y carpetas en el directorio c: / tmp / MosaicBuilder. Dentro de esta carpeta, el código leerá todas las subcarpetas con un nombre de carpeta que comience con [prj_] como carpetas de proyectos de mosaico. Dentro de todas estas carpetas [prj_] intentará abrir un archivo de proyecto llamado [_projectdata.txt] que contiene toda la información requerida para cada proyecto.

Dicho archivo de proyecto consta de:

  1. la ruta completa y el nombre de archivo de la imagen de destino de este proyecto
  2. la ruta completa donde se almacenan las fotografías individuales (piezas) de este proyecto
  3. Número de columnas que contendrá el mosaico
  4. Número de filas que contendrá el mosaico

Los proyectos de ejemplo se proporcionan en el archivo zip: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

En el código del servidor C #, todo el manejo de mosaicos se realiza a través de una clase personalizada: BBMosaicProject.cs

Microsoft Kinect v2.0 - Pantalla verde

Para tomar fotografías, cualquier cámara servirá. Pero he usado Microsoft Kinect v2.0 para combinar imágenes en color e imágenes en profundidad. De esta forma, se puede crear un efecto de pantalla verde. El fondo de todas las imágenes en color recibidas de Kinect se reemplazará con una superficie verde uniforme (BBBackgroundRemovalTool.cs).

Se agregó una referencia a Microsoft. Kinect al proyecto del servidor.

EMGU

Debido a que necesitamos asegurarnos de que haya una persona en la fotografía que se tomó cuando se presionó el botón, se agregaron capacidades de reconocimiento facial a RoboPhoto.

www.nuget.org/packages/Emgu. CV/3.4.3.3016

Solo cuando una persona está dentro de la imagen, la pantalla verde en esta imagen será reemplazada por una superficie de color uniforme, con códigos de color iguales al color promedio de la pieza de destino en el mosaico que se convertirá en esta imagen.

Paso 4: Gracias

Gracias
Gracias

Gracias por leer mi Instructable. Esta fue mi primera. Espero que lo hayan disfrutado.

Recomendado: