Índice:

Sistema de câmara com reconhecimento de palestrante (SPACS): 8 etapas
Sistema de câmara com reconhecimento de palestrante (SPACS): 8 etapas

Vídeo: Sistema de câmara com reconhecimento de palestrante (SPACS): 8 etapas

Vídeo: Sistema de câmara com reconhecimento de palestrante (SPACS): 8 etapas
Vídeo: Como usar o OpenCV para Reconhecimento Facial 2024, Novembro
Anonim
Image
Image
Hardware - Impressão 3D
Hardware - Impressão 3D

Imagine uma chamada em conferência em que vários alto-falantes cercam uma câmera. Muitas vezes encontramos situações em que o ângulo de visão limitado de uma câmera muitas vezes falha em olhar para a pessoa que fala. Essa limitação de hardware degrada significativamente a experiência do usuário. Se a câmera puder focalizar alto-falantes ativos, o público remoto ficará mais envolvido em uma conversa durante a chamada. Neste projeto, propomos um (protótipo) sistema de câmeras que detecta e segue o alto-falante ativo girando a câmera em direção ao alto-falante. O sistema usa uma abordagem baseada em áudio e visual. Quando rostos são detectados pela câmera, ela determina a pessoa que fala e calcula o ângulo para girar. Quando os rostos não são detectados no ângulo atual, o sistema procura o alto-falante com base na direção dos sinais de áudio de chegada.

Etapa 1: Materiais

Adafruit Feather nRF52840 Express X 1

www.adafruit.com/product/4062

Amplificador de microfone de eletreto - MAX4466 X 2

www.adafruit.com/product/1063

Micro Servo Motor X 1

www.adafruit.com/product/169

Smartphone Android X 1

Etapa 2: Hardware - Impressão 3D

Hardware - Impressão 3D
Hardware - Impressão 3D
Hardware - Impressão 3D
Hardware - Impressão 3D

Para uma implementação rápida, decidimos imprimir em 3D os gabinetes de que precisamos. Existem dois componentes principais para gabinetes; uma plataforma giratória e um suporte para smartphone. Usamos o toca-discos deste link (https://www.thingiverse.com/thing:141287), onde ele fornece a caixa Arduino na parte inferior e uma mesa giratória que pode ser conectada a um servo motor. Usamos um suporte de smartphone a partir deste link (https://www.thingiverse.com/thing:2673050), que é dobrável e com ângulo ajustável de modo que nos permite calibrar o ângulo de forma conveniente. A figura abaixo mostra as peças impressas em 3D montadas juntas.

Etapa 3: Hardware - Componentes eletrônicos

Hardware - Componentes eletrônicos
Hardware - Componentes eletrônicos
Hardware - Componentes eletrônicos
Hardware - Componentes eletrônicos

Existem quatro componentes com fio; Adafruit Feather, dois microfones e um motor. Para a embalagem compacta, soldamos (círculos cinza) os fios sem usar uma placa de ensaio. Abaixo descreve o diagrama de circuito e o artefato real.

Etapa 4: Software

Nosso sistema usa principalmente as informações visuais do reconhecimento de rosto para seguir o falante, pois são mais precisas. Para que o Feather obtenha informações visuais do aplicativo Android, usamos o Bluetooth Low Energy como principal meio de comunicação.

Quando qualquer rosto é detectado, o aplicativo calcula o ângulo que o motor precisa para girar para focar o alto-falante no centro do quadro. Decompomos os cenários possíveis e tratamos da seguinte forma:

  1. Se rosto (s) for detectado e falando, ele calcula o ponto médio dos alto-falantes e retorna o ângulo relativo à Pena.
  2. Se face (s) for detectada e nenhuma delas estiver falando, ele também calcula o ponto médio das faces e retorna o ângulo de acordo.
  3. Se algum rosto não for detectado, o sistema altera a lógica de rastreamento do alto-falante de visual para áudio.

O software SPACS está localizado em

Etapa 5: Software - Som

Software - Som
Software - Som

Som (YH)

Para localizar a fonte do som de entrada, primeiro tentamos usar a diferença de tempo entre os dois microfones. Mas não foi tão preciso quanto esperávamos, já que a taxa de amostragem (~ 900Hz) do Arduino Leopard, onde testamos os sinais de som, era lenta de forma que não consegue captar a diferença de tempo entre microfones de 10 cm de distância.

Mudamos o plano para usar a diferença de intensidade entre os dois sinais de som de entrada. Como resultado, a pena pega dois sinais sonoros e os processa para detectar de onde o som estava vindo. O processamento pode ser descrito pelas seguintes etapas:

  1. Pegue as entradas de dois microfones e subtraia o deslocamento para obter as amplitudes dos sinais.
  2. Acumule os valores absolutos das amplitudes por MIC para 500 captadores.
  3. Salve a diferença dos valores acumulados para a fila de 5 slots.
  4. Retorna a soma das filas como o valor da diferença final.
  5. Compare o valor final com os limiares para decidir de onde veio o som.

Encontramos o limite traçando o valor final em várias circunstâncias, incluindo som vindo da esquerda e da direita. Além dos limites para o valor final, também definimos outro limite para a média das amplitudes acumuladas na etapa 2 para filtrar os ruídos.

Etapa 6: Software - Detecção de rosto e fala

Para o reconhecimento facial, empregamos o ML Kit para Firebase lançado pelo Google (https://firebase.google.com/docs/ml-kit). O kit de ML fornece a API de detecção de rosto que retorna a caixa delimitadora de cada rosto e seus pontos de referência, incluindo olhos, nariz, orelhas, bochechas e diferentes pontos em uma boca. Assim que os rostos são detectados, o aplicativo rastreia o movimento da boca para determinar se a pessoa está falando. Usamos uma abordagem simples baseada em limite que produz um desempenho confiável. Aproveitamos o fato de que o movimento da boca fica maior tanto horizontal quanto verticalmente quando uma pessoa fala. Calculamos a distância vertical e horizontal da boca e calculamos o desvio padrão para cada distância. A distância é normalizada para o tamanho do rosto. Desvio padrão maior indica fala. Essa abordagem tem a limitação de que toda atividade que envolve o movimento da boca, incluindo comer, beber ou bocejar, pode ser reconhecida como fala. Mas tem uma baixa taxa de falsos negativos.

Etapa 7: Software - Motor Rotativo

Software - Motor Rotativo
Software - Motor Rotativo

A rotação do motor não foi tão direta quanto esperávamos devido ao controle da velocidade de rotação. Para controlar a velocidade, declaramos uma variável de contador global de forma que permita que o motor gire apenas quando a variável atingir um determinado valor. Também declaramos outra variável global que indica se o motor está se movendo para avisar os microfones para evitar o som proveniente da rotação do motor.

Etapa 8: melhorias futuras

Uma das limitações é que o motor oscila em certos ângulos. Parece que o motor não tem potência suficiente para superar o torque gerado pela rotação do smartphone. Isso pode ser resolvido usando um motor mais potente ou ajustando a posição do smartphone em direção ao centro da rotação para reduzir o torque.

A detecção da direção do som baseada em áudio pode ser melhorada com um método mais sofisticado. Gostaríamos de tentar uma abordagem de formação de feixe acústico para determinar a direção do som de entrada. Tentamos com o tempo de chegada dos sinais de áudio. Porém, a taxa de amostragem do Feather é limitada para detectar a diferença de tempo quando os microfones estão a apenas cerca de 10 cm de distância.

A última peça que falta neste protótipo é a avaliação de usabilidade. Uma forma promissora de avaliar é integrar o sistema à plataforma de videochamada existente e observar as respostas dos usuários. Essas respostas ajudarão a melhorar o sistema e fazer a próxima iteração deste protótipo.

Recomendado: