Eu gostaria de saber se alguém teve sucesso em detectar um mamífero de corpo quente (ou seja, humano) usando sensores padrão baratos de prateleira?
Idealmente, eu gostaria de usar um sensor barato ou uma combinação de sensores para detectar uma pessoa dentro de uma sala e localizá-la. Eu gostaria que o robô entrasse em uma sala, detectasse se um (s) humano (s) está (s) presente (s) e depois vá para o humano detectado. A precisão não precisa ser 100%, pois o custo é mais um fator. Eu gostaria que os requisitos computacionais de um sensor desse tipo pudessem ser executados em um Arduino, embora, se for impossível, eu esteja disposto a utilizar algo com mais capacidade hores, como um Raspberry Pi ou um BeagleBone Black. Eu tenho alguns pensamentos; no entanto, nenhum deles é ideal:
- Sensor PIR - Pode detectar movimento dentro de um grande campo de visão (ou seja, geralmente 120 graus ou mais). Pode ser a coisa mais próxima de um detector "humano" que eu conheço; no entanto, requer movimento e localização / triangulação onde a pessoa está seria muito difícil (impossível?) com um campo de visão tão grande.
- Ultra - som - pode detectar objetos com boa precisão. Tem um campo de visão muito mais estreito; no entanto, é incapaz de diferenciar entre um objeto estático e não-vivo e um humano.
- Detectores de infravermelho - (ou seja, sensores de alcance nítido) Podem novamente detectar objetos com grande precisão, campo de visão muito estreito; no entanto, é novamente incapaz de diferenciar objetos.
- Webcam + OpenCV - Possivelmente use a detecção de rosto para detectar humanos em uma sala. Essa pode ser a melhor opção; no entanto, o OpenCV é computacionalmente caro e exigiria muito mais que um arduino para ser executado. Mesmo em um Raspberry Pi, pode ser lento.
- Kinect - Usando os recursos de detecção de recursos do Kinect, seria relativamente fácil identificar seres humanos em uma área; no entanto, o Kinect é muito caro e eu não consideraria uma solução "barata".
Talvez alguém esteja ciente de um "detector de calor" barato sintonizado com o calor do corpo e / ou tenha tido sucesso com alguma combinação dos itens (1-4) acima e gostaria de compartilhar seus resultados?
Respostas:
Uma combinação de um detector infravermelho passivo (PIR) e um localizador de alcance do sonar (SRF) deve fazer o truque.
O que funcionou bem para mim anteriormente (não encontrando humanos, mas muito semelhante) foi ter dois PIRs do lado esquerdo e direito apontados para que eles tenham um pouco de sobreposição no meio.
Você pode descobrir se o humano está à esquerda, direita ou na frente (quando os dois estão ligados). Basicamente, você o empilha no topo da SRF, o que indica o alcance etc. É um pouco sujo e você precisa fazer algumas suposições, mas funciona bem por sua simplicidade.
O pseudo-código para os 2 PIRs pode ser algo tão simples quanto:
A idéia é que você vire muito para um lado (60 graus) se vir algo nessa área. Se eles não estiverem na sua frente após o turno, vire um pouco menos para o lado em que você os vê. Continue repetindo e diminuindo a quantidade de turno até que estejam na sua frente e depois para frente. Lembre-se de que você não gira tanto (redefine o ângulo) quando está na frente, porque o movimento não sai da mira tão rápido.
Fiquei genuinamente impressionado com o quão bom esse algoritmo realmente funciona (nós o usamos para brinquedos de perseguição automatizados e tivemos que desacelerá-lo / emburrecê-lo porque ele vencia / pegava um robô controlado por humanos com muita facilidade).
Ambos os sensores estão disponíveis na Pololu (sem afiliação):
Detector infravermelho passivo
Sonar Range Finder
fonte
Um tipo de sensor mais recente que pode ser usado são matrizes de temperatura baseadas em MEMS da Omron (faixa D6T) ou Excelitas (DigiPile). Estes, ao contrário dos elementos PIR, medem as temperaturas absolutas e, assim, permitem distinguir entre as temperaturas de fundo e de primeiro plano e detectar movimento e presença estática das fontes de temperatura.
fonte
um sensor capacitivo pode funcionar, é muito barato de fabricar, apenas folha de alumínio e alguns resistores, ele pode detectar carne, mas não tenho certeza se ele não detecta nada além de carne, você pode usar 3 para triangular
fonte
Não sei dizer se isso é mais fácil, mas é possível que você possa usar a biblioteca Eulerian Video Magnification para detectar o pulso de uma pessoa.
Nesse caso, você procuraria uma flutuação no vídeo que correspondesse ao intervalo esperado de pulsos humanos. Você também precisaria de uma imagem clara de uma parte do corpo que exibisse o pulso visível.
Também houve algum trabalho ( exemplo 1 , exemplo 2 ) explorando a detecção de faces com base em hardware. As câmeras digitais de alguns anos atrás possuíam esse recurso, que era essencialmente uma rede neural altamente otimizada, projetada para dizer "esse quadrado contém uma face ou não" ... então você apenas itera sobre um conjunto de quadrados predefinidos na imagem capturada.
fonte
Tentei usar o PIR, mas há problemas com o manuseio e atrasos. Não é uma escolha eficiente para a detecção humana ser honesto. Você pode usar a Técnica de detecção capacitiva, pois é a maneira mais barata e fácil de detectar seres humanos (uma escolha inteligente) e também menos complexa. Você pode criar um sensor para si mesmo a um custo muito baixo e isso é bom para pequenos projetos. Eu usei um no meu projeto "Human Detection Robot". Você pode assistir ao meu vídeo em: Detecção humana baseada em capacitiva
fonte
Uma solução não-bare-metal que provavelmente se tornará cada vez mais popular nos próximos anos seria descarregar sua tarefa pesada de processamento de dados (por exemplo, reconhecer um humano em uma imagem) para um serviço em nuvem. Isso pressupõe que seu dispositivo esteja conectado à Internet. Aqui está um exemplo com o Raspberry Pi e a API do Google Cloud Vision: https://www.dexterindustries.com/howto/use-google-cloud-vision-on-the-raspberry-pi/ . Observe que ele requer uma assinatura do Google Cloud após um período de teste, mas algumas outras APIs de visão em nuvem (Amazon, Microsoft Azure, ...?) Podem até oferecer seus serviços gratuitamente se você enviar menos de N solicitações por mês aos seus servidores .
Outra solução para o processamento pesado de dados em pequenas plataformas seria descarregar o trabalho em um dispositivo do tipo pen drive no seu robô com uma unidade de processador dedicada para executar modelos de aprendizado de máquina já treinados (por exemplo, Movidius Neural Compute Stick com o Raspberry PI: https : //medium.com/deep-learning-turkey/a-brief-guide-to-intel-movidius-neural-compute-stick-with-raspberry-pi-3-f60bf7683d40 ). Isso funciona offline também. Eles ainda são um pouco caros para projetos de hobby, mas espero que o custo deles caia como tudo.
fonte