Не работает отображение данных датчика ЭКГ в реальном времени с небольшим интервалом <600 мс - PullRequest
1 голос
/ 05 августа 2020

Надеюсь, ты в безопасности и здоров. Я работаю над своим дипломным проектом, и в последнюю минуту профессор потребовал, чтобы я построил график данных датчика ЭКГ в реальном времени, который фиксируется с частотой 200 Гц (каждые 5 мс), и после некоторых исследований я обнаружил Da sh, который, казалось, был отличный инструмент, который сэкономит мне много времени, которого у меня действительно нет ...

проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я использую интервал обновления до значения <600 мс, весь экран начинает мерцать и перерисовка всего графика вместо обновления (добавления дополнительных значений) графика. Кажется, он отлично работает с интервалом обновления> = 600 мс.

вот код, с которым я работаю:

sig = []
with open("test_data7_ms.csv", "r") as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for lines in csv_reader:
        sig.append((lines[0]))


# sig is an array created from a file that contains the sensor readings
# just to simulate the work of the sensor without the hassle with cables and everything
sig_iter = iter(sig)
x = deque(maxlen=5)
x.append(1)
Y = deque(maxlen=5)
Y.append(next(sig_iter, 400))
app = dash.Dash()


app.layout = html.Div(
    [
        dcc.Graph(id='ecg-graph',
                  animate=True),
        dcc.Interval(
            id='ecg-graph-update',
            interval=500,
            n_intervals=0
        ),
    ]
)

@app.callback(Output('ecg-graph', 'figure'),
    [Input('ecg-graph-update', 'n_intervals')])
def update_ecg(n):
    x.append(x[-1]+1)
    Y.append(next(sig_iter, 400))

    trace = go.Scatter(
        x=list(x),
        y=list(Y),
        name='Scatter',
        mode='lines'
    )
    return {'data': [trace], 'layout': go.Layout(xaxis=dict(range=[min(x), max(x)]),
                                                 yaxis=dict(range=[100, 900]),)}

if __name__ == "__main__":
    app.run_server(debug=True)

Если кто-нибудь знает, как решить эту проблему или есть какие-либо предложения относительно Da sh или другой структуры / библиотеки, я буду очень признателен за помощь.

...