Speaker-Aware Camara System (SPACS): 8 stappen
Speaker-Aware Camara System (SPACS): 8 stappen
Anonim
Image
Image
Hardware - 3D-printen
Hardware - 3D-printen

Stelt u zich een conferentiegesprek voor waarbij meerdere luidsprekers één camera omringen. We komen vaak tegen dat de beperkte kijkhoek van een camera de persoon die spreekt vaak niet aankijkt. Deze hardwarebeperking verslechtert de gebruikerservaring aanzienlijk. Als de camera naar actieve luidsprekers kan kijken, zou het verre publiek tijdens het gesprek meer betrokken zijn bij een gesprek. In dit project stellen we een (prototype) camerasysteem voor dat de actieve spreker detecteert en volgt door de camera naar de spreker te draaien. Het systeem maakt gebruik van zowel een visuele als een audiogebaseerde benadering. Wanneer gezichten worden gedetecteerd door de camera, bepaalt deze de persoon die spreekt en berekent de hoek om te draaien. Wanneer de gezichten niet worden gedetecteerd onder de huidige hoek, zoekt het systeem naar de spreker op basis van de richting van de binnenkomende audiosignalen.

Stap 1: Materialen

Adafruit Feather nRF52840 Express X 1

www.adafruit.com/product/4062

Electret microfoonversterker - MAX4466 X 2

www.adafruit.com/product/1063

Micro servomotor X 1

www.adafruit.com/product/169

Android-smartphone X 1

Stap 2: Hardware - 3D-printen

Hardware - 3D-printen
Hardware - 3D-printen
Hardware - 3D-printen
Hardware - 3D-printen

Voor een snelle implementatie hebben we besloten om de behuizingen die we nodig hebben te 3D-printen. Er zijn twee hoofdcomponenten voor behuizingen; een draaitafel en een smartphonestandaard. We gebruikten de draaitafel van deze link (https://www.thingiverse.com/thing:141287), waar het een Arduino-behuizing aan de onderkant biedt en een draaitafel die kan worden aangesloten met een servomotor. We gebruikten een smartphonestandaard van deze link (https://www.thingiverse.com/thing:2673050), die opvouwbaar en in hoek verstelbaar is, zodat we de hoek gemakkelijk kunnen kalibreren. De onderstaande afbeelding toont de 3D-geprinte onderdelen die aan elkaar zijn gemonteerd.

Stap 3: Hardware - Elektronische componenten

Hardware - Elektronische componenten
Hardware - Elektronische componenten
Hardware - Elektronische componenten
Hardware - Elektronische componenten

Er zijn vier bedrade componenten; Adafruit Feather, twee microfoons en een motor. Voor de compacte verpakking hebben we de draden gesoldeerd (grijze cirkels) zonder een breadboard te gebruiken. Hieronder wordt het schakelschema en het eigenlijke artefact beschreven.

Stap 4: Software

Ons systeem gebruikt voornamelijk de visuele informatie van de gezichtsherkenning om de spreker te volgen, omdat dit nauwkeuriger is. Om ervoor te zorgen dat de Feather visuele informatie van de Android-app krijgt, gebruiken we Bluetooth Low Energy als de belangrijkste communicatiemethode.

Wanneer een gezicht wordt gedetecteerd, berekent de app de hoek die de motor moet draaien om de luidspreker op het midden van het frame te concentreren. We hebben de mogelijke scenario's ontleed en als volgt te werk gegaan:

  1. Als gezicht(en) worden gedetecteerd en spreken, berekent het het middelpunt van de luidsprekers en retourneert het de relatieve hoek naar de veer.
  2. Als gezicht(en) worden gedetecteerd en geen van hen spreekt, berekent het ook het middelpunt van de gezichten en retourneert de hoek dienovereenkomstig.
  3. Als er geen gezicht wordt gedetecteerd, verandert het systeem de logica voor het volgen van de luidsprekers van visueel naar audio.

SPACS-software bevindt zich op

Stap 5: Software - Geluid

Software - Geluid
Software - Geluid

Geluid (YH)

Om de bron van binnenkomend geluid te lokaliseren, hebben we eerst geprobeerd het tijdsverschil tussen de twee microfoons te gebruiken. Maar het was niet zo nauwkeurig als we hadden verwacht, aangezien de bemonsteringsfrequentie (~900 Hz) van Arduino Leopard, waar we de geluidssignalen testten, zo traag was dat het het tijdsverschil tussen microfoons van 10 cm uit elkaar niet kan oppikken.

We hebben het plan gewijzigd om het intensiteitsverschil tussen de twee ingangsgeluidssignalen te gebruiken. Als gevolg hiervan neemt de veer twee geluidssignalen en verwerkt deze om te detecteren waar het geluid vandaan kwam. De verwerking kan worden beschreven door de volgende stappen:

  1. Neem de ingangen van twee microfoons en trek de offset af om de amplitudes van de signalen te krijgen.
  2. Verzamel de absolute waarden van de amplitudes per MIC voor 500 pickups.
  3. Sla het verschil van de geaccumuleerde waarden op in de wachtrij met 5 slots.
  4. Retourneer de som van de wachtrijen als de uiteindelijke verschilwaarde.
  5. Vergelijk de uiteindelijke waarde met drempels om te bepalen waar het geluid vandaan kwam.

We hebben de drempel gevonden door de uiteindelijke waarde in verschillende omstandigheden uit te zetten, waaronder geluid dat van links en rechts komt. Bovenop de drempels voor de uiteindelijke waarde, hebben we in stap 2 ook een andere drempel ingesteld voor het gemiddelde van de geaccumuleerde amplituden om de ruis eruit te filteren.

Stap 6: Software - Gezichts- en spraakdetectie

Voor de gezichtsherkenning hebben we ML Kit for Firebase gebruikt, uitgebracht door Google (https://firebase.google.com/docs/ml-kit). ML Kit biedt de gezichtsdetectie-API die het selectiekader van elk gezicht en de bijbehorende oriëntatiepunten retourneert, inclusief ogen, neus, oren, wangen en verschillende punten op een mond. Zodra gezichten zijn gedetecteerd, volgt de app de mondbeweging om te bepalen of de persoon spreekt. We gebruiken een eenvoudige, op drempels gebaseerde aanpak die betrouwbare prestaties oplevert. We hebben gebruik gemaakt van het feit dat de mondbeweging zowel horizontaal als verticaal groter wordt wanneer een persoon spreekt. We berekenen de verticale en horizontale afstand van de mond en berekenen voor elke afstand de standaarddeviatie. De afstand wordt genormaliseerd naar de grootte van het gezicht. Een grotere standaarddeviatie duidt op spreken. Deze benadering heeft de beperking dat elke activiteit waarbij de mondbeweging betrokken is, inclusief eten, drinken of geeuwen, kan worden herkend als spreken. Maar het heeft een laag percentage valse negatieven.

Stap 7: Software - Roterende motor

Software - Roterende motor
Software - Roterende motor

De motorrotatie was niet zo eenvoudig als we hadden verwacht vanwege de controle van de rotatiesnelheid. Om de snelheid te regelen, declareren we een globale tellervariabele zodat de motor alleen kan draaien wanneer de variabele een bepaalde waarde bereikt. We hebben ook een andere globale variabele gedeclareerd die aangeeft of de motor beweegt om microfoons te laten weten, zodat het geluid afkomstig van de motorrotatie kan worden vermeden.

Stap 8: Toekomstige verbeteringen

Een van de beperkingen is dat de motor onder bepaalde hoeken gaat wiebelen. Het lijkt erop dat de motor niet krachtig genoeg is om het koppel te overwinnen dat wordt gegenereerd door het draaien van de smartphone. Het kan worden opgelost door een krachtigere motor te gebruiken of de positie van de smartphone naar het midden van de rotatie aan te passen om het koppel te verminderen.

Op audio gebaseerde detectie van geluidsrichting kan worden verbeterd met een meer geavanceerde methode. We willen een akoestische bundelvormende benadering proberen om de richting van het inkomende geluid te bepalen. We hebben geprobeerd met de aankomsttijd van de audiosignalen. Maar de bemonsteringsfrequentie van de Feather is beperkt om het tijdsverschil te detecteren wanneer de microfoons slechts ongeveer 10 cm verwijderd zijn.

Het laatste ontbrekende onderdeel van dit prototype is de evaluatie van de bruikbaarheid. Een veelbelovende manier om te evalueren is het systeem te integreren met het bestaande videogesprekplatform en de reacties van gebruikers te observeren. Die reacties zullen helpen om het systeem te verbeteren en de volgende iteratie van dit prototype te maken.

Aanbevolen: