File size: 4,588 Bytes
ac520a1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
---
language:
- pt
- en
tags:
- wifi-csi
- fall-detection
- human-activity-recognition
- tensorflow
- keras
- cnn-lstm
- esp32
- edge-ai
- tensorflowjs
license: mit
pretty_name: FlashView CSI Fall Detection (CNN1D + LSTM)
---

# FlashView — Detecção de queda via Wi-Fi CSI (v1, em validação)

Modelo de detecção de queda a partir de **Channel State Information (CSI)** de Wi-Fi, coletado com
**ESP32-S3**. Treinado em **TensorFlow/Keras** e convertido para **TensorFlow.js** para inferência local no
navegador, sem servidor.

> ⚠️ **v1, em validação.** Este card declara o resultado real do split entre sessões, incluindo o que **não**
> funcionou. A v2 está em andamento (ver "Limitações" e "Próximos passos").

## Arquitetura

`CNN 1D + LSTM` sobre janelas de 30 quadros, normalização por quadro, 64 features LLTF, saída binária
(queda / não-queda). Treino com `class_weight` para classe rara, early stopping, 13 épocas.

## Dados

- **39.690 quadros** de CSI, **1.321 janelas** (346 positivas)
- **5 sessões**, **128 eventos de queda** rotulados
- **1 sujeito** (auto-experimento), **2 ambientes**
- Cadência estável: **33,3 fps** em todas as sessões
- Rotulagem ancorada em janela `[toque − 2 s, toque + 0,5 s]`

## Resultado — e o resultado honesto importa mais

**Split por sessão** (a sessão de teste nunca aparece no treino). Limiar escolhido **no treino**, para não
inflar métrica dependente de limiar.

| Regime | AUC-ROC | Acurácia balanceada | F1 |
|---|---|---|---|
| **Treino** (mesmas sessões) | **0,886** | 0,828 | 0,729 |
| **Teste** (sessão não vista) | **0,520** | **0,495** | **0,143** |

Detalhe do teste: TP 12 · FP 44 · TN 332 · FN 100 · sensibilidade 0,107 · especificidade 0,883 ·
**468 falsos positivos por hora**.

### Por que este resultado é publicado assim

O modelo **decorou a sessão, não o movimento**. Em split intra-sessão (corte temporal com embargo) o AUC chega a
**0,827**; entre sessões cai para **0,506–0,787**. Isso tem nome na literatura: **sobreajuste ao componente
estático do ambiente (background DC)**, que muda de sala para sala e de posição para posição
(Strohmayer & Kampel, 2024; Wang et al., 2025 — survey de generalização em wireless sensing).

Publicar o número ruim é o ponto: **um modelo com F1 0,14 em split por sessão é mais informativo que um F1 0,98
em split aleatório**, que vaza quadro da mesma sessão para o teste.

## Limitações (declaradas)

1. **1 sujeito** — sem validação entre pessoas.
2. **2 ambientes** — generalização espacial não demonstrada.
3. **Sessão de teste curta** (442 s) — intervalo de confiança largo.
4. **Sem LLM** — este é um modelo supervisionado clássico (CNN-LSTM), não um modelo de linguagem.
5. **Rótulo por visão computacional** — a rotulagem automática pode conter erro sistemático.

## Próximos passos (v2)

- **Aumentação no eixo do tempo**: `randomCircularRotation` (jitter do rótulo) e `randomResizedCrop`
  (variação de velocidade) — as duas com maior ganho medido na literatura (+6 a +16 p.p.).
- **Remoção do componente DC** por gate de variância temporal (Wang et al., 2026).
- **Mais sujeitos** e um terceiro ambiente.
- **Avaliação com intervalo de confiança** (bootstrap sobre janelas).

## Uso

```python
import tensorflow as tf
model = tf.keras.models.load_model("csi_fall_detection.keras")
# entrada: (batch, 30, 64) — janela de 30 quadros, 64 features LLTF, normalizada por quadro
pred = model.predict(x)  # [p_nao_queda, p_queda]
```

Versão para navegador: `model.json` + pesos (TensorFlow.js), usada no dashboard do FlashView.

## Contexto do projeto

FlashView é um sistema completo: firmware ESP32-S3 (PlatformIO) → API de ingestão (Bun/Elysia + PostgreSQL) →
dashboard com rotulagem e inferência TF.js. Projeto integrador do Bacharelado em Sistemas de Informação
(UNIPAR), com artigo em preparação.

## Citação

```bibtex
@misc{gomes2026flashviewcsi,
  title  = {FlashView: detecção de queda via Wi-Fi CSI com ESP32-S3},
  author = {Gomes, Rui Lucas Anthony},
  year   = {2026},
  note   = {Modelo v1 em validação. Split por sessão.},
  url    = {https://huggingface.co/ElementalDLC37/flashview-csi-fall-detection}
}
```

## Referências

- Strohmayer & Kampel (2024) — aumentação em CSI, transferência entre cenários
- Wang et al. (2025) — survey de generalização em wireless sensing
- Gao, Liu & Li (2023) — aumentação para séries temporais
- Wang et al. (2026) — Dynamic Variance Gate para detecção de queda cross-domain