Índice:

RoboPhoto - um gerador de mosaico para o público: 4 etapas
RoboPhoto - um gerador de mosaico para o público: 4 etapas

Vídeo: RoboPhoto - um gerador de mosaico para o público: 4 etapas

Vídeo: RoboPhoto - um gerador de mosaico para o público: 4 etapas
Vídeo: CHIBI-ROBO! ZIP LASH | Launch Trailer [HD] 2024, Julho
Anonim
Image
Image
RoboPhoto - um gerador de mosaico para o público
RoboPhoto - um gerador de mosaico para o público
RoboPhoto - um gerador de mosaico para o público
RoboPhoto - um gerador de mosaico para o público

RoboPhoto é um gerador fotomosaico em tempo real

RoboPhoto cria uma foto fotomosaica de seus usuários - enquanto você espera.

Ao usar técnicas digitais modernas, como processamento de imagem, reconhecimento facial e inteligência artificial, RoboPhoto é capaz de criar um fotomosaico de todos os visitantes que passam e pressionam seu botão - em tempo real.

Cada vez que o botão é pressionado, uma foto da pessoa em questão é tirada. Instantaneamente, cada foto é digitalizada e interpretada pelo RoboPhoto. O software RoboPhoto irá então alterar todas as imagens individuais - de modo que se tornará parte de uma imagem maior e, em seguida, imprimirá essa imagem alterada em um adesivo rotulado com um conjunto de coordenadas que indicam a localização de cada foto dentro da imagem maior. Cada visitante é então solicitado a colocar seu próprio adesivo de foto em uma tela maior contendo apenas uma grade correspondente.

Durante a operação do RoboPhoto, uma nova imagem será criada. Um fotomosaico composto por essas fotografias individuais que irá imitar uma 'imagem-alvo' predefinida.

RoboPhoto também opera no modo de usuário único. Quando configurado desta forma, RoboPhoto cria um mosaico completo de um único usuário.

Suprimentos

  • Um PC Windows 10 com Visual Studio e pacotes IoT instalados
  • Um Raspberry Pi 3B + com Microsoft Windows 10 IoT instalado
  • Uma impressora de etiquetas coloridas (Brother VC-500W)
  • Um grande botão vermelho montado em um pedestal para entrada do usuário
  • Uma tela HDMI para feedback do usuário
  • Uma câmera Microsoft Xbox Kinect v2 - roubada do meu filho - para tirar fotos
  • Uma rede (Wifi, LAN)
  • Uma grade de destino. Uma folha de papel com uma grade impressa - preenchida com coordenadas. Esta grade de papel é usada como tela onde os visitantes podem colar sua fotografia nas coordenadas designadas. E então, eventualmente, eles formarão o resultado final: um belo novo fotomosaico.

Uma câmera icrosoft Kinect 2.0 foi usada porque pode tirar imagens de profundidade. Este recurso é usado para criar uma tela verde virtual em cada fotografia individual. Desta forma, o RoboPhoto pode repintar o fundo de cada fotografia individual para combinar com a cor de uma peça-alvo dentro do futuro mosaico.

Etapa 1: como funciona

Como funciona
Como funciona
Como funciona
Como funciona
Como funciona
Como funciona
Como funciona
Como funciona

RoboPhoto é uma instalação que contém um pedestal com um grande botão vermelho, um computador com uma impressora de etiquetas conectada e um pequeno dispositivo IoT que manipula a interface do usuário (tela e botão). No meu caso: um RaspBerry 3B +.

  1. O RoboPhoto opera em um local acessível ao público e (após ligá-lo) é autônomo. Ao correr, os visitantes que passam são incentivados pelo RoboPhoto a pressionar seu grande botão vermelho.
  2. Sempre que aquele grande botão vermelho é pressionado, o RoboPhoto tira uma foto do visitante que acabou de pressionar o botão com a câmera Kinect.
  3. Então, o RoboPhoto usará seu IA avançado. e habilidades de processamento de imagem para alterar cada foto para corresponder a uma peça dentro do mosaico a ser. Para conseguir isso, o RoboPhoto redesenha o fundo de cada foto para combinar com a cor de uma peça-alvo dentro de uma imagem pré-carregada. Após a edição, o RoboPhoto imprime a foto editada em um adesivo junto com um conjunto de coordenadas que indicam a localização desse adesivo dentro do mosaico.

  4. Em seguida, o usuário é solicitado a colocar o adesivo na folha de destino do mosaico.
  5. E assim - após a visita de muitas pessoas - uma nova obra de arte surgirá. Para criar um mosaico, você precisará de muitas peças individuais. Obtive resultados decentes executando 600 peças

O RoboPhoto também pode operar no modo de usuário único.

Nesta configuração, o RoboPhoto cria um mosaico completo de fotografias editadas ou editadas de um único usuário. Após pressionar o botão, o RoboPhoto tirará cerca de> 600 fotografias diferentes do usuário e, em seguida, as editará e organizará para formar um único novo mosaico, criado após uma imagem-alvo pré-selecionada.

Etapa 2: montagem do hardware

Montagem do Hardware
Montagem do Hardware
Montagem do Hardware
Montagem do Hardware

Conforme mostrado na imagem acima, o PC Win 10 está conectado à câmera Kinect. O Kinect deve ser conectado por USB 3.0. Na época, criei o RoboPhoto - nenhum Raspberry Pi com USB 3.0 estava disponível. *

O PC também é usado para imprimir na impressora de etiquetas anexada. No meu caso, um Brother VC-500W. Uma impressora de etiquetas colorida doméstica bastante barata. No entanto, é muito lento. É melhor usar um profissional, se puder.

O Big Red Button está conectado a um Raspberry Pi 3B +. Apenas 4 fios estão conectados ao GPIO. Esta é a única soldagem necessária feita neste Instructable. O Pi também fornece feedback ao nosso visitante por meio de uma tela TFT de 7 '' sobre HDMI.

Para arrumar, construí um pedestal de madeira que contém todos esses componentes.

Junto ao pedestal, encostado à parede, é colocada uma folha de papel contendo a grelha de destino e as coordenadas (A1 / A2). Porque a impressora de etiquetas que usei atinge no máximo a largura da etiqueta = 2, 5 cm, todos os quadrados nesta grade medem 2, 5 cm x 2, 5 cm.

* Hoje, o Raspberry Pi4 oferece USB3.0. Alse W10 pode ser executado no dispositivo. Portanto, teoricamente, deveria ser possível criar um RoboPhoto v2.0 sem o uso de um PC. Talvez a Covid '19 me dê tempo suficiente por conta própria para publicar tal Instructable em breve.

Etapa 3: escrever o código

Escrevendo o Código
Escrevendo o Código
Escrevendo o Código
Escrevendo o Código

Código

RoboPhoto foi criado com VisualStudio como uma solução com dois projetos:

  1. Um aplicativo Windows Forms no PC está hospedando um servidor TCP e gerenciando a entrada do Kinect
  2. Um Raspberry Pi 3B + hospedando um cliente TCP em um aplicativo com cabeçalho UWP (definido como aplicativo de inicialização) para manipular eventos de pressionamento de botão e fornecer feedback ao usuário por meio de sua tela TFT de 7 ''.

No diagrama acima, tentei dar uma ideia do que meu soft está fazendo. O Visual Studio que escrevi para criar esta solução RoboPhoto (absolutamente 100% funcional) é fornecido com este Instructable. No entanto, devo alertar a todos que estão fazendo downlod deste arquivo: o código que escrevi está longe de ser bonito e muitas vezes vinculado ao meu dev-PC. Portanto, incentivo a todos a criar uma solução melhor, mais agradável e mais estável.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Rede

No código de exemplo, o código do Pi é implantado por meio do Visual Studio em um endereço IP em minha rede. Você provavelmente deve alterar isso para se ajustar ao seu. Para fazer isso, clique com o botão direito do mouse no projeto do cliente ARM após abrir a solução no Visual Studio, escolha as propriedades e cange o valor Remote machine para o IPAddress de seu próprio Pi. Além disso, você precisa permitir o tráfego do cliente para o servidor na porta 8123 dentro do Firewall do Windows no servidor (PC). Se você executar a solução a partir do Visual Studio, ele deverá solicitar que você faça isso para U.

Durante a codificação, tive muitos problemas para fazer o W32 e o UWP se comunicarem corretamente. Eu fiz isso funcionar usando duas classes separadas em cliente e servidor: resp MyEchoClient.cs (no cliente ARM) e ConnectionClient.cs (gerenciando conexões de cliente no servidor).

Arquivos de mosaico - classe personalizada

RoboPhoto cria mosaicos para imitar uma imagem-alvo. Esta imagem-alvo e todas as fotografias individuais que juntas formam o futuro mosaico, bem como algumas outras propriedades de cada RoboPhoto, são armazenadas em arquivos em um sistema de arquivos. Meu código acompanhado usa um conjunto de arquivos e pastas no diretório c: / tmp / MosaicBuilder. Dentro desta pasta, o código irá ler todas as subpastas com um nome de pasta que começa com [prj_] como pastas de projetos de mosaico. Dentro de todas essas pastas [prj_], ele tentará abrir um arquivo de projeto chamado [_projectdata.txt] que contém todas as informações necessárias para cada projeto.

Esse arquivo de projeto consiste em:

  1. o caminho completo e o nome do arquivo da imagem-alvo deste projeto
  2. o caminho completo onde as fotografias individuais (peças) deste projeto são armazenadas
  3. Número de colunas que o mosaico conterá
  4. Número de linhas que o mosaico conterá

Projetos de exemplo são fornecidos no arquivo zip: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

No código do servidor C #, todo o manuseio do mosaico é feito por meio de uma classe personalizada: BBMosaicProject.cs

Microsoft Kinect v2.0 - Tela verde

Para tirar fotos, qualquer câmera serve. Mas eu usei o Microsoft Kinect v2.0 para combinar imagens coloridas e imagens de profundidade. Desta forma, um efeito de tela verde pode ser criado. O plano de fundo em todas as imagens coloridas recebidas do Kinect será substituído por uma superfície verde uniforme (BBBackgroundRemovalTool.cs).

Uma referência a Microsoft. Kinect foi adicionada ao serverproject.

EMGU

Como precisamos ter certeza de que a pessoa está na fotografia que foi tirada quando o botão foi pressionado, recursos de reconhecimento facial foram adicionados ao RoboPhoto.

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

Somente quando uma pessoa está dentro da imagem, a tela verde nesta imagem será substituída por uma superfície colorida uniforme, com códigos de cores iguais à cor média da peça-alvo no futuro mosaico em que esta imagem se tornará.

Etapa 4: Obrigado

Obrigada
Obrigada

Obrigado por ler meu Instructable. Este foi o meu primeiro. Espero que tenha gostado.

Recomendado: