[PYTHON] [Fernentwicklung] Sprachanalyseanwendung (Übung 4)

In Übung 3 von Letztes Mal haben wir die Komponenten des "Videoanalyse" -Systems geübt. Dieses Mal werden wir die Komponenten des Sprachanalysesystems anhand des "Pegelmessers" als Thema erläutern. Die Komponenten des Audioanalysesystems sind fast dieselben wie die des Videoanalysesystems. Bei der Videoanalyse werden die zu analysierenden Daten durch die Funktion new_video_frame () angegeben, während bei der Audioanalyse die Funktion new_audio_frame () Der Unterschied besteht darin, dass es gegeben ist durch (: //www.remotte.jp/ja/user_guide/program/functions).

Erstellen Sie eine neue App

Erstellen Sie eine neue App wie in den vorherigen Übungen. 1 アプリの新規作成.png

Audioquelle hinzugefügt

Wählen Sie "Medien" aus dem Menü unten links im Bildschirm "Konfiguration" und fügen Sie ein Element hinzu, das als Spracheingabe verwendet werden soll. 2 標準マイクの追加.png

Sprachanalyse hinzugefügt

Sobald Sie die Audioquelle hinzugefügt haben, ist es Zeit, die Audioanalysekomponenten hinzuzufügen. Als "Eingabe- / Ausgabetyp" Sprachanalyse (nur Wertausgabe) Sprachanalyse (nur Sprachausgabe) Sprachanalyse (Ausgabe von Wert und Stimme) In dieser Übung zur Pegelanzeige müssen Sie nach der Analyse nur den Pegel des Stereoklang-Eingangs als Ausgang ermitteln (Maximalwert der Amplitude im Bild). Sie können beispielsweise den Ton selbst eine Oktave nach oben oder unten verschieben. Wählen Sie "Audioausgang (nur Wertausgabe)", da der Ton bei entferntem Rauschen nicht ausgegeben wird. Um die linken und rechten Maximalpegel als Analyseergebnis auszugeben, wählen Sie "General Binary Sense" als "Kompatibilitätstyp". 3 音声解析の追加.png Als nächstes schreiben Sie Python-Code auf dem Bildschirm "Code". In der Sprachanalyse Funktionen   new_audio_frame(self, audio_frame, time_sec) Die zu analysierenden Sprachdaten werden der Python-Seite mitgeteilt, der Analyseprozess wird in dieser Funktion ausgeführt und das Ergebnis wird der Plattformseite mitgeteilt. Hier werden die Audiodaten im Argument audio_frame als numpy.ndarray-Typ gespeichert, und die seit dem Start der Anwendung verstrichene Zeit (Sekunden) wird als float-Typ in time_sec gespeichert. Die Audiodaten sind 16 Bit, 2 Kanäle, die Abtastrate beträgt 48 kHz und die Funktion new_audio_frame () wird alle 20 Millisekunden aufgerufen. Mit anderen Worten, diese Funktion wird 50 Mal pro Sekunde aufgerufen, und audio_frame speichert 960 Stereoamplitudenwerte für jeden Kanal. Als Referenz am Anfang der Funktion new_audio_frame (),   print(type(audio_frame), len(audio_frame), type(audio_frame[0])) Wenn die Anwendung mit der Beschreibung ausgeführt wird, wird Folgendes an die Konsole ausgegeben.   <class 'numpy.ndarray'> 1920 <class 'numpy.int16'> Ebenso zu Beginn der Funktion,   print(time_sec) Bei der Ausführung werden pro Sekunde 50 Zeitinformationselemente ausgegeben.

Achtung! Als Plattformspezifikation werden Audio- und Videoanalysekomponenten nicht auf der Konsole angezeigt, wenn print () in der Funktion \ _ \ _ init \ _ \ _ () ausgeführt wird. </ font>

Da die Last zu hoch ist, um den Maximalwert des Sprachpegels 50 Mal pro Sekunde auf dem Browserbildschirm anzuzeigen, setzen Sie diesen Wert auf 1/10 und legen Sie ein Steuerelement fest, um die Daten nur 10 Mal pro Sekunde zu aktualisieren. Geben Sie im Fall von Folgendes als Quellcode ein.

python


    def __init__(self, sys, opt, log):
        self._sys = sys
        self._opt = opt
        self._log = log
        self._count = 0

    def new_audio_frame(self, audio_frame, time_sec):
        if self._count == 0:
            left = audio_frame[0::2]
            right = audio_frame[1::2]
            max_left = int(left.max() / 32767 * 100)
            max_right = int(right.max() / 32767 * 100)
            self._sys.set_value({'value': [max_left, max_right]})
        self._count += 1
        if self._count == 5:
            self._count = 0

4 コード.png Alle 0,1 Sekunden wird der Maximalwert jedes Pegels links und rechts auf den Bereich von 0 bis 100 skaliert und ausgegeben.

Nutzungsseite bearbeiten

Stellen Sie im Bildschirm "Anzeigeelement" Folgendes ein. 5 表示項目.png Hierbei ist zu beachten, dass die "Anzahl der Anzeigen" als letzter Wert des "Füllstandsmessers" auf 4 eingestellt ist. Wählen Sie als nächstes den Bildschirm "Layout". Wie unten gezeigt, ist standardmäßig das Ausdrucksformat "Anzeige mit zwei Zahlen" für alle vier Anzeigeelemente festgelegt. 6 デフォルトのレイアウト.png Wie Sie dem obigen Python-Code entnehmen können, als Analyseergebnis [Maximalwert links, Maximalwert rechts] Wird ausgegeben, aber es gibt eine Methode, um den linken und den rechten Wert zu extrahieren. In den Optionseinstellungen auf der rechten Seite des Bildschirms befindet sich eine Gruppe mit dem Namen "Erweiterte Einstellungen". 7 高度な設定.png Durch Setzen eines ganzzahligen Werts auf die Option "Aus Array extrahieren" kann das Element an einer beliebigen Position aus den Arraydaten extrahiert werden. Wenn Sie beispielsweise im Beispiel dieser App "0" eingeben, wenn der Schlüsselname der Wert "value" ist und es sich um ein Array handelt, können Sie das Element mit dem Index "0", dh "left", abrufen. Sie können den Maximalwert von erhalten. In ähnlicher Weise kann, wenn "1" eingestellt ist, der "Maximalwert rechts" erhalten werden. Verwenden Sie diese Option, um ein Layout wie das folgende zu erstellen. Mit anderen Worten, für die linke und die rechte Ebene werden jeweils zwei Anzeigeelemente verwendet, eines wird mit einem Wert von 0 bis 100 unter Verwendung des Ausdrucksformats "Anzeige eines numerischen Werts" angezeigt, und das andere wird angezeigt. Verwendet eine "Schrittanzeige (horizontaler, farbiger Bereich)" zur grafischen Anzeige. 8 1つの数値の表示.png 9 段階メーター.png

Lauf!

Wenn Sie die App ausführen und eine laute Stimme in das Mikrofon einbringen, schwankt der Pegel stark. 10 実行中.png

Zusammenfassung

In dieser Übung haben wir die Komponenten des "Sprachanalyse" -Systems kennengelernt. Die Funktion new_audio_frame () liefert Audiodaten von der Plattform und ich möchte lernen, sie zu analysieren. Obwohl in dieser Übung nicht verwendet, benachrichtigt die Funktion set_audio_frame () die Plattformseite der Sprachdaten, wenn das Analyseergebnis eine andere Stimme als die eingegebene Stimme ausgibt.

Bisher habe ich in vier Übungen die Anwendungsentwicklung mit Remotte mit dem Ansatz erklärt, sich daran zu gewöhnen, anstatt zu lernen. Das nächste Mal werde ich das erworbene Wissen organisieren, um technische Informationen zu programmieren.

Recommended Posts

[Fernentwicklung] Sprachanalyseanwendung (Übung 4)
[Fernentwicklung] Videoanalyseanwendung (Übung 3)
[Fernentwicklung] Steuerungsanwendung (Übung 2)
[Fernentwicklung] Machen wir es zuerst !! (Übung 1)
Sprachanalyse mit Python
Sprachanalyse mit Python
WEB-Anwendungsentwicklung mit Django-Entwicklung Teil 1-
Entwicklung von Webanwendungen mit Flask