Wir setzen ein geschultes ML-Modell für die Herbsterkennung mit Echtzeitdaten aus einem tragbaren Gerät (Beschleunigungsmesser + Gyroskop) ein. Das Modell wurde in 20-Sekunden-Fenstern von Datenscheiben mit 80 Hz (1600 Proben pro Fenster) trainiert. Im Bereitstellen sendet unser Sensor 80 Proben /Sekunde an Firebase, und der ML-Code: < /p>
Umfragen Sie jede Sekunde Firebase Firebase, um die neueste 80-Sample-Stapel zu erhalten. STEP_INTERVAL (5 Sekunden) ist vergangen. Wir vermuten, wie wir mit der Pufferung und der Fensterung umgehen, stimmt möglicherweise nicht mit den Trainingserwartungen des Modells überein. Zeit)? < /li>
Verwendet eine zeitbasierte Logik von Step_interval eine schlechte Praxis in diesem
-Kontext? /> < /ul>
Hier ist ein vereinfachtes Snippet, das den relevanten Teil unserer Implementierung veranschaulicht: < /p>
Code: Select all
BUFFER_SIZE = 1600 # 20 sec window at 80 Hz
STEP_INTERVAL = 5 # Predict every 5 seconds
data_buffer = deque(maxlen=BUFFER_SIZE)
last_prediction_time = time.time()
while True:
samples = fetch_from_firebase() # fetches new data batch (80 samples per second)
for sample in samples:
# Normalize and append each sensor sample to buffer
reading = np.array([
sample['ax'], sample['ay'], sample['az'],
sample['gx'], sample['gy'], sample['gz']
]) / 10000.0
data_buffer.append(reading)
# Prediction logic (every STEP_INTERVAL seconds, after buffer fills)
current_time = time.time()
if len(data_buffer) == BUFFER_SIZE and (current_time - last_prediction_time) >= STEP_INTERVAL:
window = np.array(data_buffer).reshape(1, -1)
window_scaled = scaler.transform(window)
prediction = model.predict(window_scaled)[0]
last_prediction_time = current_time
handle_prediction(prediction)