Finalmente, chegou a hora de falar sobre o que desenvolvemos e quais problemas superamos no último ano, sendo mais um passo significativo rumo à liberdade de criação que os usuários do SketchAR sentem, sem os limites das convenções.
Existe uma fome por aplicativos móveis que ofereçam conteúdo virtual, independentemente das limitações da tecnologia atual. Como a visão computacional é uma área em que o software está intimamente ligado ao hardware, infelizmente a maioria dos conceitos de produtos de RA sempre será limitada pelos atrasos do lado técnico.
Equipes pequenas raramente resolvem problemas fundamentais, mas podemos encontrar um método que simplifique a tarefa.
Por que reinventar a roda e por que ninguém tentou fazer isso antes de nós?
A maioria das bibliotecas e plataformas de terceiros se baseia em marcadores pré-instalados para fixar um objeto virtual em sua posição no mundo real. No nosso caso, a mão que desenha a imagem bloqueava esses marcadores, então tivemos que desenvolver nosso próprio método.

O ARKit não consegue fazer o mesmo sem marcadores.
Além disso, o ARKit e o ARCore não se baseiam em marcadores (exceto no ambiente), mas a precisão da fixação de objetos virtuais seria melhor se alguns marcadores pré-instalados mantivessem o objeto virtual no lugar. O método atual inclui a detecção e o rastreamento de pontos-chave para guiar o usuário, mas ainda não é possível que o usuário defina seus próprios marcadores de referência. O segundo problema do ARKit e do ARCore é a impossibilidade de mover um objeto virtual junto com o mundo real. Por exemplo, depois de colocar um objeto virtual sobre uma superfície física, não conseguimos mover a superfície virtual e a física juntas, como se estivessem coladas, porque a imagem virtual permanece no mesmo local e não acompanha a superfície.
Como já dissemos, o SketchAR funciona com papel branco, que é um "assassino" para a maioria dos algoritmos de visão computacional. No entanto, nossos algoritmos são especialmente otimizados para essas condições. Eles são estáveis e precisos o suficiente para vincular o conteúdo de RA ao papel. Eles continuam funcionando mesmo depois que o rastreamento do ARKit falha. A velocidade também é importante. Transferimos a maior parte dos cálculos para a GPU, o que permite que o SketchAR funcione em tempo real em iPhones, a partir do modelo 5SE.
O método dos 'Marcadores Progressivos'.
Isso significa que uma linha desenhada pelo artista se transforma em uma âncora e adiciona estabilidade à retenção do objeto virtual.
Além disso, os dados coletados são usados para continuar nos ajudando a desenvolver um assistente personalizado completo para cada usuário. A propósito, usamos machine learning e redes neurais para analisar e treinar dados a partir do desenho de cada usuário. Vamos contar mais sobre isso em detalhes nos próximos artigos.
Houston, temos um problema... ou o princípio de funcionamento: 'não tenha medo'.
Para entender como o problema foi resolvido, é preciso voltar ao início:
Ambiente. Cada superfície tem uma textura, cor e estrutura diferentes. Além disso, os algoritmos podem se distrair com "ruídos" externos do ambiente. Os filtros resolvem esse problema ('Canais', os mesmos encontrados nos canais do Photoshop).
A unificação de superfícies é difícil se, é claro, o treinamento de uma rede neural não se basear em dados reais dos usuários. O treinamento de uma rede neural é um processo contínuo e, por isso, nunca deve ser visto como uma parte concluída do produto.
'Tela' (canvas). Uma tela é uma folha de papel, uma parede ou qualquer outra superfície que você escolha para desenhar. A variedade de 'telas' é determinada apenas pelas dimensões. Ao mesmo tempo, o branco é o "inimigo" da visão computacional. Leia nossa nota "O Problema do Papel Branco" para entender por que isso acontece.
Desenho. Obviamente, conhecemos o nível de habilidade do nosso usuário e não esperamos que um esboço seja uma cópia perfeita da imagem original. Então, nosso algoritmo leva em conta as inconsistências do usuário.
Mãos. Outro "inimigo" para o bom funcionamento do aplicativo é quando a mão na tela cruza uma superfície, os marcadores ou o próprio desenho. O tamanho e formato, a cor da pele e até o estilo de segurar o lápis desviam parte da atenção do algoritmo.
Dispositivo. A posição não fixa do dispositivo. Os usuários seguram o telefone com uma mão, aproximando-se e afastando-se da superfície em ângulos diferentes.
Solução.
Após uma análise detalhada desses problemas, entendemos como "ensinar" o aplicativo a ver apenas o que o usuário desenha, filtrando, mas não ignorando, o ambiente.
Abaixo você pode ver como o mundo ao redor é transformado em uma imagem plana e dividido em camadas para analisar cada uma delas por meio de canais.

Como funciona?
Converter o conteúdo renderizado, mapeá-lo em relação ao original e depois posicionar um objeto virtual na superfície exige uma abordagem multifacetada. Na verdade, algumas dessas camadas são muito mais significativas do que outras. Isso fica claro quando observamos apenas uma pequena parte do processo e vemos quantas ações ocorrem a cada segundo.
Este é um esquema simples de como o ambiente se transforma em uma imagem plana. Depois, ele é separado em várias camadas (canais) para ser analisado.
Como descrito acima, as camadas são separadas, e um algoritmo ensina a câmera a distinguir tudo o que vê. Por exemplo, o fundo é separado da mão, a mão de sua sombra, e assim por diante.

As telas estão em ordem da esquerda para a direita:
- A imagem virtual posicionada na superfície, visível para o usuário na tela do smartphone.
- Reconhecimento da folha sobre a superfície.
- O papel é grosseiramente separado do fundo. O ruído na superfície da mesa é visível, e a sombra da mão é reconhecida como um único objeto.
- Uma separação clara da mão em relação à superfície.
- Detecção apenas do conteúdo desenhado.
- Reconhecimento do conteúdo desenhado em relação ao ambiente.
Quando o aplicativo sabe reconhecer claramente cada um dos objetos, ele os compara com as imagens originais. Lembre-se: cada ação do algoritmo acontece enquanto a câmera e as mãos estão continuamente se movendo no quadro.

Um exemplo de como ocorreram muitas comparações falsas na primeira versão do algoritmo.

Este é um exemplo de boas comparações em outras versões do algoritmo.
Sem entrar em muitos detalhes, essa abordagem resolve muitos dos problemas e desafios do produto para melhorar a experiência do usuário. Ela amplia o campo de aplicação dos dados obtidos, permitindo assim levar o produto a novos patamares. É um assistente completo, apoiado por dados de machine learning e redes neurais.
O SketchAR está disponível na AppStore há quase um ano, no Play Market há meio ano, e até mesmo no MS Hololens. Apesar das avaliações entusiasmadas de usuários e da imprensa, ainda não existe um aplicativo concorrente com funcionalidade semelhante. Isso reforça a complexidade do problema e a originalidade dos nossos algoritmos.
Acompanhe as atualizações, desenhe mais e ame a tecnologia, porque ela nos ajuda a crescer... e em breve escravizará a humanidade! ;)
Arte para todos!



