Experiência pessoal usando sensores de proximidade em desenvolvimento

Bom dia a todos! Meu nome é Maxim, sou desenvolvedor líder do Habilect.

Na vida de todo programador, chega um momento em que você deseja compartilhar em que 2/3 da sua vida é gasto - uma descrição do trabalho e dos projetos :)

Historicamente, o principal campo de minha atividade era o desenvolvimento de sistemas baseados em sensores sem contato.

Por quase 7 anos, muitas opções foram tentadas - Microsoft Kinect (a versão para o XBOX 360 e Kinect One para Windows), Intel RealSense (começando com a primeira versão disponível no mercado - F200, continuando o SR300 e, no momento, a última lançada) - D435), Orbbec (Astra e Persee), Leap Motion (sobre o qual eu escrevi sobre o processamento de gestos personalizados). Naturalmente, não poderia prescindir de webcams comuns - análise de imagem, OpenCV, etc.

Quem estiver interessado - peço um gato.

Por precaução, um breve programa educacional sobre esse tópico de sensores sem contato:

Imagine uma situação em que você precisa acompanhar programaticamente as ações de uma pessoa em particular.

Obviamente, você pode usar uma webcam comum, que pode ser comprada em qualquer loja. Porém, com esse caso de uso, é necessário analisar as imagens, que consomem muitos recursos e, francamente, são importantes (o problema de alocação de memória no mesmo OpenCV ainda é relevante).

Portanto, é mais ideal reconhecer as pessoas não como parte da imagem da câmera, mas como um "esqueleto" obtido por um sensor especializado, usando telêmetros ativos. Isso permite rastrear uma pessoa (ou várias pessoas) e trabalhar com partes individuais do "esqueleto".

Na terminologia do Microsoft Kinect SDK, essas partes individuais são chamadas de "Juntas". No caso de um sensor por padrão, seu status é atualizado a cada 30ms.

Cada junta contém:

  • dados sobre a posição do ponto esqueleto correspondente no espaço (coordenadas X, Y e Z) em relação ao eixo óptico do sensor,
  • estado da visibilidade do ponto (posição determinada, não determinada, calculada pelo sensor),
  • quaternion de rotação em relação ao ponto anterior

A figura mostra as articulações processadas pelo Kinect v2 usando o Vitruvian Man de Leonardo Da Vinci como exemplo.

KinectV2Joints

Assim, trabalhando com um sensor sem contato, o desenvolvedor tem a oportunidade de analisar as ações de uma pessoa ou grupo de pessoas (por exemplo, com o Kinect, é possível rastrear simultaneamente 6 pessoas em um quadro). E o que fazer com a matriz de dados recebida depende da aplicação específica.

As aplicações para esses sensores são infinitas. As principais áreas do meu trabalho são publicidade e medicina.

Considere a direção da publicidade . Agora, para a operação de stands de publicidade interativa, são necessários vários módulos básicos, a saber:

  1. Materiais publicitários em si
  2. Coleta de estatísticas sobre o grau de atração da atenção dos visitantes para a exibição de um anúncio específico, o que é interessante para o anunciante
  3. Possibilidade de configuração remota de um estande de publicidade
  4. O efeito atraente que distingue um suporte interativo das TVs convencionais com comerciais e banners impressos

Se tudo estiver claro com os próprios materiais de publicidade, os sensores serão usados ​​para coletar estatísticas. Por exemplo, qualquer anunciante está interessado em quantas pessoas prestaram atenção ao seu anúncio? Homens, mulheres ou crianças? A que horas eles costumam parar? Quanto tempo eles olham para os anúncios, e não apenas ficam ao lado do estande, procurando no telefone? Usando um sensor, isso pode ser rastreado e um relatório feito de forma conveniente para o anunciante.

Para a configuração remota, o modelo mais simples e óbvio provavelmente é usado - o Google Calendar. Cada calendário é anexado a um estande específico e, estando em São Petersburgo, você pode gerenciar estandes em qualquer lugar do mundo.

E o efeito de atração é a própria funcionalidade, por causa da qual o suporte é chamado de interativo. Você pode fazer um jogo dirigido por pessoas com o logotipo do patrocinador, perceber um som de boas-vindas quando uma pessoa aparecer no campo de visão do sensor, criar um código QR com um cupom de desconto na loja do anunciante se, por exemplo, uma pessoa ficar durante um minuto e assistir a um anúncio. As opções são limitadas principalmente pela fantasia, e não pela tecnologia.

Por que usar sensores na medicina ? A resposta a esta pergunta é simples e simples - o custo dos exames e da reabilitação é reduzido, mantendo a precisão.

Um dos exemplos marcantes é o desenvolvimento no campo da estabilometria - a ciência dos desvios do centro de gravidade ao caminhar, o que afeta a postura, a coluna e a função muscular adequada. Você pode ir a centros especiais para simuladores especiais, que é um procedimento muito caro, que, no entanto, nem sempre é fornecido. E você pode comprar um sensor e um software em casa, conectar-se a uma TV e realizar testes de diagnóstico, cujos resultados são enviados automaticamente ao seu médico.

Outro exemplo é a reabilitação em casa. Não é segredo para ninguém que existem dois problemas principais na reabilitação: a chamada cara de um médico para a casa (o que precisa ser feito várias vezes por semana) e a relutância de uma pessoa reabilitada em realizar exercícios semelhantes por um longo tempo. Para isso, foram desenvolvidos vários postulados básicos do sistema, a saber:

  1. Compilação remota de programas de reabilitação por um médico para monitoramento remoto da implementação. Por exemplo, um médico de São Petersburgo pode monitorar remotamente o curso dos exercícios prescritos a um paciente de Vladivostok e, se necessário, alterar os exercícios, aumentar ou diminuir a complexidade e a intensidade das aulas, estudar estatísticas em tempo real, etc.
  2. Processo de exercício gamificado. Se os simuladores modernos estão focados principalmente na realização de movimentos básicos para desenvolver músculos e articulações danificados, o sistema de reabilitação interativa permite realizar exercícios, literalmente, sem esforço. Por exemplo, com a ajuda do conhecido Tetris, que, em vez de pressionar os botões, é controlado pelos movimentos prescritos pelo médico (levantando a mão esquerda, movendo a perna direita, inclinando a cabeça para a frente e assim por diante).
  3. Implementação de critérios de desempenho de exercícios. Ao trabalhar em conjunto com o paciente, o médico monitora o exercício com a ajuda de dicas e ajuda tátil (por exemplo, você não pode dobrar o braço no cotovelo ao afastá-lo - isso afeta o trabalho da articulação do ombro). O sistema interativo estima os ângulos relativos entre as articulações e, no caso de exceder a faixa aceitável, alerta o usuário e não leva em consideração a execução incorreta do exercício.

Esse sistema permite reduzir o tempo (o médico e o paciente - para viajar um para o outro) e manter a precisão dos exercícios necessários para o progresso.

Para a implementação de projetos usando a pilha de tecnologia .NET. Eu trabalho apenas para Windows :). Sim, por isso, tive que escrever invólucros para o SDK nativo várias vezes (como exemplo vívido, fiz adaptadores para o Intel RealSense SDK, pois na época era apenas código não gerenciado). Custou uma quantidade considerável de tempo, nervos e cabelos grisalhos, mas permitiu conectar a biblioteca a vários projetos desenvolvidos na plataforma Windows.

Vale ressaltar que os principais sensores (Kinect e RealSense) requerem resolução x64 para serem desenvolvidos.

Para simplificar o trabalho dos aplicativos clientes, foi implementado um serviço separado, trabalhando com um sensor, empacotando dados em um formato conveniente para nós e enviando dados aos assinantes usando o protocolo TCP. A propósito, isso nos permitiu criar um sistema que funciona com vários sensores, o que pode melhorar significativamente a precisão do reconhecimento.

KinectMultiSensorModel
O diagrama simplificado mostra os benefícios do uso de vários sensores para rastrear um objeto. Os pontos azuis (juntas) são determinados de forma estável pelo primeiro e segundo sensores, verde - somente pelo segundo. Naturalmente, a solução desenvolvida é implementada sob o "modelo N-sensor".

KinectMultiSensorWorkflow
Um processo detalhado de processamento de dados de vários sensores é apresentado no diagrama acima.

Com quase qualquer desenvolvimento, um dos principais critérios para um artista é o interesse. Depois, por vários anos seguidos, implementei o mesmo tipo de aplicativo Web no ASP.NET e PHP, queria algo novo e mais, digamos, inteligente. No desenvolvimento web (com raras exceções), tudo já foi inventado. Bem site, bem serviço, bem banco de dados. No caso de trabalhar com sensores, sempre surgem tarefas interessantes e polêmicas, por exemplo, "como transmitir vídeo em HD do sensor via TCP para que isso não desligue o sistema?" (um exemplo da vida, embora tenha sido feito há muito tempo). E é difícil prever que serão necessários os seguintes itens para melhorar e desenvolver o sistema. É claro que há um sprint de desenvolvimento principal no qual são descritas melhorias globais e pré-planejadas. Mas essas subtarefas locais são uma das mais interessantes na arte de um programador.

Esse trabalho definitivamente não é rotineiro. Se alguém estiver interessado em aprender com mais detalhes ou se quiser saber por onde começar nesta área, estou aberto à comunicação. Pronto para responder a quaisquer perguntas :) E que a força esteja com você!

Source: https://habr.com/ru/post/pt430418/


All Articles