Projeto 1 – Rastreamento óptico

Autor: felipe 80 visualizações

Projeto 1

O primeiro exemplo explora mais os dispositivos ópticos, o exemplo possui um avatar se movendo com os dados capturados pelo MediaPipe e Kinect. Com um novo projeto criado, o avatar na cena e o framework importado, usamos o DataManager para lidar com as 20 articulações do avatar.

Foi utilizado o método GetPose para pegar as posições e movimentar o avatar, o método HasPose também foi usado, pois ele verifica se a captura foi feita, e caso seja aí devemos atribuir a articulação ao movimento capturado, caso contrário será lançado um erro pelo Unity.

Todas as bibliotecas necessárias para trabalhar com o Kinect e MediaPipe já estão incluídas no framework, então toda a compilação e configuração foram desnecessárias para que os dispositivos funcionassem. O código responsável por trabalhar com o módulo Input deve ser incluído no projeto. O ClientInput usa as interfaces AbstractFactory e AbstractProduct para criar uma família de objetos relacionados. Usaremos inicialmente o MediaPipe.

				
					using UnityEngine;

namespace AbstractFactoryDesignPattern
{
    class ClientInput : MonoBehaviour
    {
        private Input input;
        private InputFactory inputFactory;

        // Start is called before the first frame update
        void Start()
        {
            // Create the OpticalInput factory object by passing the factory type as Optical
            inputFactory = InputFactory.CreateInputFactory("Optical");

            // Get Mediapipe Input object by passing the input type as Mediapipe
            input = inputFactory.GetInput("Mediapipe");
        }
    }
}				
			

Após o Input ser adicionado no projeto, é necessário adicionar o código input.Start() para iniciar o dispositivo e começar a capturar as articulações, com isso, já é possível mover o avatar. 

Para alternar para o Kinect é fácil se estiver usando o framework. Só precisa mudar o GetInput(“MediaPipe”) para GetInput(“Kinect”). O DataManager funciona com qualquer dispositivo sem a necessidade de mapear as articulações, pois isso já é feito pelo framework, compatibilizando padrões de capturas diferentes. Para alternar para o Kinect devemos usar o método Stop no Mediapipe e iniciar o método Start no Kinect. Os métodos são os mesmos, porém atuam em produtos diferentes do AbstractFactory. Com esses passos, agora é possível mover o avatar utilizando o Kinect.

Para persistir em disco os dados capturados pelos sensores foi utilizado o método SaveToTxt e para carregar os dados salvos o método LoadTxt. Outras opções possíveis seria utilizar a API para persistir em banco de dados, ou utilizar os métodos SaveToXml e LoadXml para trabalhar com arquivos XML.

O Mediapipe permite um rastreamento próprio da mão rastreando 21 articulações, utilizou-se o método GetPoseHand para capturar essas articulações, foi utilizado o padrão de mapeamento do framework, o Poses.PoseHand.

Nesta página