[PYTHON] Ich habe eine Online-Frequenzanalyse-App erstellt

Hintergrund

Als Hintergrund für die diesmalige Anwendung einer Frequenzanalyse gibt es im Labor der Universität, der ich angehöre, mehrere Gruppen, die Pulswellen und Elektrokardiogramme untersuchen, aber Software, um sie zu analysieren ( Derzeit gibt es nur einen PC mit kostenpflichtiger WaveLab-Software. Aufgrund dieser Situation kann eine andere Gruppe nicht analysiert werden, wenn eine Gruppe die Software verwendet. Daher habe ich beschlossen, sie selbst zu erstellen. Wenn eine Frequenzanalyse online möglich wird, ist dies sehr praktisch, da eine Analyse überall durchgeführt werden kann, solange eine Verbindung zum Internet besteht, ohne dass Software installiert werden muss.

Über die verwendete Sprache

Ich habe Python verwendet, um diese Webanwendung zu erstellen. Der Grund ist, dass ich es mit Numpy und Scipy erstellen wollte, die in Python berühmte Bibliotheken sind. Diese beiden Bibliotheken haben viele Funktionen für die Frequenzanalyse, daher werden wir sie mit ihnen erstellen. Der Grund, warum ich Django im Framework verwendet habe, war, dass ich dachte, Pythons FW sei Django, also habe ich es verwendet.

Erstellen eines Frequenzanalysemoduls

Erstellen Sie ein Modul zur Analyse von Pulswellen und Elektrokardiogrammen. Der Modulname lautet analysis.py.

analysis.py


import io
import pathlib
import numpy as np
from scipy import signal

import matplotlib.pyplot as plt

from .models import Pulse_Rate

def setPlt(pk):
    #Zieldaten abrufen
    pulse_rate = Pulse_Rate.objects.get(pk=pk)
    path = pathlib.Path(pulse_rate.data.url)

    #Daten lesen
    f = open(path.resolve())
    lines = f.read().split()

    # -----Variable Vorbereitung-----
    N = 4096
    lines_length = int(len(lines) / 2)
    if lines_length < N:
        N = 2048

    dt = float(lines[2]) - float(lines[0])
    pulse = []
    for num in range(N - 1):
        pulse.append(float(lines[num * 2 + 1]))
    # -------------------

    # -----Berechnung der Abtastfrequenz-----
    t = np.arange(0, N * dt, dt)  # time
    freq = np.linspace(0, 1.0 / dt, N)  # frequency step
    # -----------------------------

    # -----Wellenformgenerierung-----
    y = 0
    for pl in pulse:
        y += np.sin(2 * np.pi * pl * t)
    # -------------------

    # -----Fourier-Transformation-----
    yf = np.fft.fft(y)  #Schnelle Fourier-Transformation
    # --------------------

    #Leistungsspektrumberechnung
    yf_abs = np.abs(yf)

    # -----Graphgenerierung-----
    plt.figure()
    plt.subplot(211)
    plt.plot(t, y)
    plt.xlabel("time")
    plt.ylabel("amplitude")
    plt.grid()

    plt.subplot(212)
    plt.plot(freq, yf_abs)
    plt.xlim(0, 10)
    plt.xlabel("frequency")
    plt.ylabel("amplitude")
    plt.grid()
    plt.tight_layout()

Auf diese Weise werden ein Pulswellen- oder Elektrokardiogramm-Diagramm und ein Leistungsspektrum-Diagramm erzeugt. Die Daten werden aus der vom Benutzer hochgeladenen Textdatei gelesen.

Grafik auf Webseite anzeigen

Im obigen Modul erstellen wir ein Diagramm mit Plot, daher möchte ich dies auf einer Webseite im SVG-Format anzeigen.

analysis.py


def pltToSvg():
    buf = io.BytesIO()
    plt.savefig(buf, format='svg', bbox_inches='tight')
    s = buf.getvalue()
    buf.close()
    return s

Jetzt können Sie Plot in SVG konvertieren und auf Ihrer Webseite anzeigen.

views.py-Einstellungen

Schreiben Sie views.py mit dem obigen Modul.

views.py


def get_svg(request, pk):
    setPlt(pk)       # create the plot
    svg = pltToSvg() # convert plot to SVG
    response = HttpResponse(svg, content_type='image/svg+xml')
    return response

Dies gibt eine Antwort in HttpResponse (SVG-Format) zurück.

urls.py Einstellungen

Stellen Sie die URL ein.

urls.py


urlpatterns = [
    ...
    path('pulse_rate-detail/<int:pk>/plot/', views.get_svg, name="plot"),
]

Vorlageneinstellungen

Ich möchte die Seite, auf der das Diagramm angezeigt wird, diesmal zu einem Detailbildschirm machen.

pulse_rate_detail.html


<img src="{% url 'pulse_rate:plot' object.pk %}" width=600, height=300>

Sie können jetzt das Diagramm anzeigen.

Grafik erstellt

Das Diagramm, das tatsächlich erstellt werden kann, lautet wie folgt. image.png

Generieren Sie ein gefiltertes Diagramm

Die obige Abbildung zeigt grafisch ungefilterte Daten, sodass Sie nichts so sehen können, wie es ist. Daher habe ich eine Filterfunktion hinzugefügt, um ein Diagramm zu generieren. (Ich werde den Code weglassen) image.png Wenn Sie den Filter anwenden, wird eine pulswellenartige Wellenform angezeigt. (Da diese Pulswelle unter Verwendung der G-Komponente des von der Kamera aufgenommenen RGB-Werts erzeugt wird, ist sie keine perfekte Wellenform.) Die unteren und oberen Grenzen des Filters können Sie selbst über die Webseite anpassen.

Zusammenfassung

Die diesmal erstellte Anwendung wird zukünftig im Labor eingesetzt. Außerdem gibt es in dem Labor, dem ich angehöre, Gruppen, die andere Forschungen als Elektrokardiogramme und Pulswellen durchführen. Deshalb möchte ich auch für diese Gruppen etwas schaffen. Tatsächlich besteht mein Forschungsthema darin, den Grad der Belastung einer Person anhand der Temperatur der Nase der Person zu messen.

Ich möchte das Labor, zu dem ich gehöre, zum coolsten Labor der Universität machen, also möchte ich eine solche Anwendung auch in der 4. Klasse erstellen!

Recommended Posts

Ich habe eine Online-Frequenzanalyse-App erstellt
Ich habe einen Ansible-Installer gemacht
Ich habe einen Xubuntu-Server erstellt.
Ich habe einen Anpanman-Maler diskriminiert
Ich habe ein Angular Starter Kit gemacht
Ich habe ein alternatives Modul für japandas.DataReader erstellt
Ich habe ein Extenum-Paket erstellt, das die Enumeration erweitert
Hindernis (schwarz) Ich habe eine Raupe mit automatischer Vermeidung hergestellt.
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Aktieninvestitionsanalyse-App mit Himbeerkuchen gemacht
Ich habe eine Amazon Web Service Dash-Schaltfläche erstellt
[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe eine Android-App erstellt, die Google Map anzeigt
Ich habe eine App erstellt, die mich warnt, wenn ich während des Studiums mit OpenCV mit meinem Smartphone herumspiele
Ich habe ein IoT-Gerät entwickelt, um auf natürliche Weise positives Denken zu erlangen
Ich habe eine Emotionsradarkarte von Aozora Bunkos Arbeit erstellt
Ich habe eine verdammte App gemacht, mit der du nicht überspringen kannst
Ich habe eine Animation gemacht, die Othellos Stein mit POV-Ray zurückgibt
Ich habe ein Anomalieerkennungsmodell erstellt, das unter iOS funktioniert
Ich habe ein automatisiertes Programm zum Einfügen von Squishy in Excel erstellt
Ich habe mit dem Qore SDK eine App zum Schätzen des Muskeltrainings erstellt
Ich habe einen Original-Programmführer mit der NHK-Programmführer-API erstellt.
Ich habe eine App erstellt, um herauszufinden, wie die Mitglieder der Strohhut-Piraten aussehen