Taula de continguts:

Sistema Camara compatible amb els altaveus (SPACS): 8 passos
Sistema Camara compatible amb els altaveus (SPACS): 8 passos

Vídeo: Sistema Camara compatible amb els altaveus (SPACS): 8 passos

Vídeo: Sistema Camara compatible amb els altaveus (SPACS): 8 passos
Vídeo: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, Juliol
Anonim
Image
Image
Maquinari: impressió 3D
Maquinari: impressió 3D

Imagineu una trucada de conferència en què diversos altaveus envolten una càmera. Sovint ens trobem on l’angle de visió limitat d’una càmera sovint no mira la persona que parla. Aquesta limitació de maquinari degrada significativament l’experiència de l’usuari. Si la càmera pot mirar altaveus actius, el públic remot participaria més en una conversa durant la trucada. En aquest projecte, proposem un sistema de càmera (prototip) que detecta i segueix l’altaveu actiu girant la càmera cap a l’altaveu. El sistema utilitza un enfocament visual i àudio. Quan es detecten les cares des de la càmera, determina la persona que parla i calcula l’angle per girar. Quan les cares no es detecten en l'angle actual, el sistema busca l'altaveu en funció de la direcció dels senyals d'àudio d'arribada.

Pas 1: materials

Ploma d'Adafruit nRF52840 Express X 1

www.adafruit.com/product/4062

Amplificador de micròfon Electret: MAX4466 X 2

www.adafruit.com/product/1063

Micro Servo Motor X 1

www.adafruit.com/product/169

Smartphone Android X 1

Pas 2: maquinari: impressió 3D

Maquinari: impressió 3D
Maquinari: impressió 3D
Maquinari: impressió 3D
Maquinari: impressió 3D

Per a una implementació ràpida, vam decidir imprimir en 3D els recintes que necessitem. Hi ha dos components principals per als tancaments; un tocadiscs i un suport per a telèfons intel·ligents. Hem fet servir el plat giratori d’aquest enllaç (https://www.thingiverse.com/thing:141287), on proporciona una funda Arduino a la part inferior i una taula giratòria que es pot connectar amb un servomotor. Hem fet servir un suport per a telèfons intel·ligents d’aquest enllaç (https://www.thingiverse.com/thing:2673050), que es pot plegar i ajustar l’angle de manera que ens permet calibrar l’angle convenientment. La figura següent mostra les parts impreses en 3D reunides.

Pas 3: Maquinari: components electrònics

Maquinari: components electrònics
Maquinari: components electrònics
Maquinari: components electrònics
Maquinari: components electrònics

Hi ha quatre components per cable; Ploma d'Adafruit, dos micròfons i un motor. Per als envasos compactes, hem soldat (cercles grisos) els cables sense fer servir una placa de tall. A continuació es descriu el diagrama de circuits i l’artefacte real.

Pas 4: programari

El nostre sistema utilitza principalment la informació visual del reconeixement facial per seguir l’altaveu, ja que és més precisa. Per tal que Feather obtingui informació visual de l’aplicació per a Android, fem servir Bluetooth Low Energy com a mètode principal de comunicació.

Quan es detecta qualsevol cara, l'aplicació calcula l'angle que el motor ha de girar per enfocar l'altaveu al centre del quadre. Vam descompondre els possibles escenaris i els vam gestionar de la manera següent:

  1. Si es detecten i parlen rostres, calcula el punt mitjà dels altaveus i retorna l'angle relatiu a la Ploma.
  2. Si es detecten cares però cap d'elles parla, també calcula el punt mitjà de les cares i retorna l'angle en conseqüència.
  3. Si no es detecta cap cara, el sistema canvia la lògica de seguiment dels altaveus del visual al de l'àudio.

El programari SPACS es troba a

Pas 5: Programari: so

Programari: so
Programari: so

So (YH)

Per localitzar la font del so entrant, primer vam intentar utilitzar la diferència horària entre els dos micròfons. Però no va ser exacta tant com esperàvem, ja que la freqüència de mostreig (~ 900Hz) d'Arduino Leopard, on vam provar els senyals de so, era lenta de manera que no pot captar la diferència horària entre els micròfons separats per 10 cm.

Vam canviar el pla per utilitzar la diferència d’intensitat entre els dos senyals de so d’entrada. Com a resultat, la ploma pren dos senyals sonors i els processa per detectar d’on provenia el so. El processament es pot descriure mitjançant els passos següents:

  1. Agafeu les entrades de dos micròfons i resteu el desplaçament per obtenir les amplituds dels senyals.
  2. Acumuleu els valors absoluts de les amplituds per MIC per a 500 pastilles.
  3. Deseu la diferència dels valors acumulats a la cua amb 5 espais.
  4. Retorna la suma de les cues com a valor diferencial final.
  5. Compareu el valor final amb els llindars per decidir d’on prové el so.

Hem trobat el llindar traçant el valor final en diverses circumstàncies, inclòs el so provinent d’esquerra i dreta. A més dels llindars del valor final, també establim un altre llindar per a la mitjana de les amplituds acumulades al pas 2 per filtrar els sorolls.

Pas 6: programari: detecció de rostres i parla

Per al reconeixement facial, vam utilitzar ML Kit per a Firebase publicat per Google (https://firebase.google.com/docs/ml-kit). ML Kit proporciona l'API de detecció de cares que retorna la caixa delimitadora de cada cara i les seves fites, inclosos els ulls, el nas, les orelles, les galtes i els diferents punts de la boca. Un cop detectades les cares, l'aplicació fa un seguiment del moviment de la boca per determinar si la persona parla. Utilitzem un enfocament senzill basat en llindars que proporciona un rendiment fiable. Vam aprofitar el fet que el moviment de la boca augmenta tant en horitzontal com en vertical quan una persona parla. Calculem la distància vertical i horitzontal de la boca i calculem la desviació estàndard de cada distància. La distància es normalitza a la mida de la cara. Una desviació estàndard més gran indica parlar. Aquest enfocament té la limitació que totes les activitats que impliquen el moviment de la boca, inclòs menjar, beure o badallar, es poden reconèixer com a parlants. Però té una taxa de falsos negatius baixa.

Pas 7: Programari: motor giratori

Programari: motor giratori
Programari: motor giratori

La rotació del motor no va ser tan directa com esperàvem a causa del control de la velocitat de rotació. Per controlar la velocitat, declarem una variable de comptador global tal que permet que el motor giri només quan la variable assoleixi un valor determinat. També vam declarar una altra variable global que indica si el motor es mou per avisar els micròfons perquè puguin evitar el so que prové de la rotació del motor.

Pas 8: millores futures

Una de les limitacions és que el motor es mou en certs angles. Sembla que el motor no és prou potent per superar el parell generat en girar el telèfon intel·ligent. Es pot resoldre mitjançant un motor més potent o ajustant la posició del telèfon intel·ligent cap al centre de la rotació per reduir el parell.

La detecció de direcció de so basada en àudio es podria millorar amb un mètode més sofisticat. Ens agradaria provar un enfocament acústic de formació de feixos per determinar la direcció del so entrant. Hem intentat amb l'hora d'arribada dels senyals d'àudio. Però, la freqüència de mostreig de la Ploma es limita per detectar la diferència horària quan els micròfons només es troben a uns 10 cm.

L’última peça que falta d’aquest prototip és l’avaluació de la usabilitat. Una forma prometedora d’avaluar és integrar el sistema amb la plataforma de videotrucades existent i observar les respostes dels usuaris. Aquestes respostes ajudaran a millorar el sistema i a fer la següent iteració d’aquest prototip.

Recomanat: