[Python] Lokalisieren Sie die Tonquelle mit ReSpeaker nur für die menschliche Stimme

Was ist Schallquellenlokalisierung?

Bei der Lokalisierung von Tonquellen ist der Ton zu hören, und stellen Sie sich stereophonen oder binoralen Ton vor. Bei stereophonem Klang ist die Schallquelle so lokalisiert, dass das Instrument von hinten gehört werden kann.

Dieses Mal verwenden wir ReSpeaker Mic Array v2.0.

image.png

Grundsätzlich sind alle Verwendungs- und anderen Optionen hier geschrieben, aber ich werde sie kurz zusammenfassen.

Implementierung der Schallquellenlokalisierung

Umgebung

ubuntu 18.04 python3


Umgebung


sudo apt-get update
sudo pip install pyusb click
git clone https://github.com/respeaker/usb_4_mic_array.git
cd usb_4_mic_array
sudo python dfu.py --download 6_channels_firmware.bin

Ich denke, der Ordner usb_4_mic_array wurde erstellt. Erstellen Sie den folgenden Code und führen Sie ihn aus.

DOA.py


from tuning import Tuning
import usb.core
import usb.util
import time
 
dev = usb.core.find(idVendor=0x2886, idProduct=0x0018)
 
if dev:
    Mic_tuning = Tuning(dev)
    print(Mic_tuning.direction)
    while True:
        try:
            print(Mic_tuning.direction)
            time.sleep(1)
        except KeyboardInterrupt:
            break

Ausgabeergebnis ↓

~/usb_4_mic_array$ python3 DOA.py 
122
121
120
122

Wenn Sie eine Fehlermeldung erhalten

Wenn ich diesen Code ausführe ImportError: No module named usb.core Wenn es herauskommt


sudo apt-get install python-usb python3-usb

Ausführen.

Wenn die Berechtigung verweigert wird, geben Sie udev Zugriff auf das Gerät.

sudo touch /etc/udev/rules.d/10-any_name_is_ok.rules
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2886", ATTR{idProduct}=="0018", MODE="0666", GROUP="plugdev"' | sudo tee 10-any_name_is_ok.rules
sudo gpasswd -ein Benutzername plugdev
sudo chmod a+r /etc/udev/rules.d/10-any_name_is_ok.rules
sudo udevadm control --reload-rules
udevadm trigger

Danach wird es beim Neustart angezeigt.


Reagiere nur auf menschliche Stimme

Es gibt viele Optionen für ReSpeaker. [Liste der optionalen Parameter (häufig gestellte Fragen Q1)] (https://wiki.seeedstudio.com/ReSpeaker_Mic_Array_v2.0/#faq)

Als Beispiel verwenden wir SPEECHDETECTED, um die Schalllokalisierung nur für die menschliche Stimme zu implementieren. 0 = false (no speech detected) 1 = true (speech detected) Ändern Sie also DOA.py wie folgt.

voise_angle.py


from tuning import Tuning
import usb.core
import usb.util
import time
 
dev = usb.core.find(idVendor=0x2886, idProduct=0x0018)
 
if dev:
    Mic_tuning = Tuning(dev)
    while True:
        try:
            if Mic_tuning.read('SPEECHDETECTED') == 1:
                 print(Mic_tuning.direction)
                 time.sleep(1)
        except KeyboardInterrupt:
            break

Auf diese Weise können Sie verhindern, dass der Winkel ausgegeben wird, selbst wenn Sie beispielsweise in die Hände klatschen.


Hinweis

Da diese Codes usb_4_mic_array / Tuning.py verwenden, müssen Sie Tuning.py in einen Ordner legen oder die Funktion Tuning.py in den Code schreiben, um sie außerhalb dieses Ordners auszuführen.

Hier ist ein Beispiel für das Umschreiben, damit es in jedem Ordner verwendet werden kann.

get_angle.py


from time import sleep

import usb
import usb.core
import usb.util
import struct

dev = usb.core.find(idVendor=0x2886,idProduct=0x0018)
TIMEOUT = 100000

# PARAMETERS for sound localization
PARAMETERS = {
    'DOAANGLE': (21, 0, 'int', 359, 0, 'ro', 'DOA angle. Current value. Orientation depends on build configuration.'),
    'SPEECHDETECTED': (19, 22, 'int', 1, 0, 'ro', 'Speech detection status.', '0 = false (no speech detected)',
                       '1 = true (speech detected)'),
    }

def read(param_name):
    try:
        data = PARAMETERS[param_name]
    except KeyError:
        return

    id = data[0]

    cmd = 0x80 | data[1]
    if data[2] == 'int':
        cmd |= 0x40

    length = 8

    response = dev.ctrl_transfer(
        usb.util.CTRL_IN | usb.util.CTRL_TYPE_VENDOR | usb.util.CTRL_RECIPIENT_DEVICE,
        0, cmd, id, length, TIMEOUT)

    response = struct.unpack(b'ii', response.tostring())

    if data[2] == 'int':
        result = response[0]
    else:
        result = response[0] * (2. ** response[1])

    return result

# Find angular
if dev:

    while True:
        if read('SPEECHDETECTED') == 1:
            print(read('DOAANGLE'))
            sleep(1)

Mit dieser Option können Sie die Tonquelle in einem beliebigen Ordner lokalisieren.


Bonus: LED-Steuerung

Führen Sie die folgenden Schritte aus, wo immer Sie möchten (entweder zu Hause oder in usb_4_mic_array).

python


git clone https://github.com/respeaker/pixel_ring.git
cd pixel_ring
sudo python setup.py install
sudo python examples/usb_mic_array.py

Wenn Sie dies tun, Wie man für 3 Sekunden aufwacht Wie man glänzt, denke 3 Sekunden lang nach Sprich 6 Sekunden, um zu glänzen aus So leuchten Sie 3 Sekunden lang Machen. Weitere Möglichkeiten zum Leuchten finden Sie unter pixel_ring / pixel_ring / usb_pixel_ring_v2.py.

Recommended Posts

[Python] Lokalisieren Sie die Tonquelle mit ReSpeaker nur für die menschliche Stimme
Python nur mit Hallo, Welten zu erinnern
Sprachanalyse mit Python
Sprachanalyse mit Python
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Stellen Sie mit Python eine Verbindung zu BigQuery her
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
[Raspi4; Einführung in den Sound] Stabile Aufzeichnung der Toneingabe mit Python ♪
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
So ändern Sie Djangos SQLite3, das mit nur einer grafischen Benutzeroberfläche überall auf Python hochgeladen wurde
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Versuchen Sie, CloudWatch-Metriken mit der Python-Datenquelle re: dash abzurufen
Python: So verwenden Sie Async mit
Link, um mit Python zu beginnen
[Python] Mit Python in eine CSV-Datei schreiben
Installieren Sie Python von der Quelle mit Ansible
Schön dich mit Python zu treffen
Versuchen Sie, Facebook mit Python zu betreiben
Ausgabe in eine CSV-Datei mit Python
Konvertieren Sie die Liste mit Python in DataFrame
MP3 → WAV-Konvertierung mit Python
Schwanzrekursion mit Python2 durchführen
Erste Schritte mit Python
Was tun mit PYTHON Release?
So berechnen Sie das Datum mit Python
Mit Python 3 einfach auf Twitter posten
Ich möchte mit Python debuggen
Lassen Sie uns die Stimme mit Python # 1 FFT analysieren
Fordern Sie Fizz Buzz heraus! Probleme mit Python in 5 Mustern (nur jetzt bis zu 398)
Quellcode für die Trennung von Tonquellen (Übungsreihe zum maschinellen Lernen), der mit Python gelernt wurde
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Ändern Sie die Python 64-Bit-Umgebung mit Anaconda in eine 32-Bit-Umgebung
Englische Spracherkennung mit Python [Rede zu Text]
Konvertieren Sie Memos sofort mit Python 2to3
HTML-Mail mit Bild zum Senden mit Python
Memo, um nach KPI mit Python zu fragen
Geben Sie Farbzeichen mit Python zu hübsch aus
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
Python-Protokoll mit GAE an die Konsole ausgeben
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertiere Hiragana mit Python (Beta) in Romaji
Fraktal zum Erstellen und Spielen mit Python
Ich wollte ABC160 mit Python lösen
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
So arbeiten Sie mit BigQuery in Python
[Einführung in Python] Verwenden wir foreach mit Python
Einzelpixel-Kamera zum Erleben mit Python
Lassen Sie uns mit Python langsam sprechen
Ich möchte Protokolle mit Python analysieren
Wie man einen Taschentest mit Python macht
Ich möchte mit aws mit Python spielen