Мы развертываем обученную модель ML для обнаружения падения, используя данные в реальном времени от носимого устройства (Accelerometer + Gyroscope). Модель была обучена на 20 секундных окнах данных, отобранных при 80 Гц (1600 образцов на окно).
При развертывании наш датчик отправляет 80 образцов /секунду на Firebase, а код ML: < /p>
Опросы Firebase Каждое секунду, чтобы получить последнюю сумму 80-выбор. буфер) размера 1600. < /li>
Вызывает прогноз, когда буфер полон, а STEP_INTERVAL (5
Sec) прошел. Мы подозреваем, как мы обрабатываем буферизацию и окно, может не соответствовать ожиданиям обучения модели. Время)? /> < /ul>
Вот упрощенный фрагмент, иллюстрирующий соответствующую часть нашей реализации: < /p>
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)
Подробнее здесь: https://stackoverflow.com/questions/795 ... nition-fro