imosudi/tinyml-fall-detection-arduino

GitHub: imosudi/tinyml-fall-detection-arduino

在Arduino微控制器上构建端到端TinyML流水线,利用IMU传感器数据实现实时活动识别与跌倒检测,并探索向兽医术后监护场景的扩展。

Stars: 0 | Forks: 0

# tinyml-fall-detection-arduino ![Python](https://img.shields.io/badge/python-3.10%2B-blue?logo=python) ![TensorFlow](https://img.shields.io/badge/TensorFlow-2.x-FF6F00?logo=tensorflow&logoColor=white) ![TensorFlow Lite](https://img.shields.io/badge/TFLite-Micro-orange) ![TinyML](https://img.shields.io/badge/TinyML-Embedded_AI-green) ![Arduino](https://img.shields.io/badge/Arduino-Nano_33_BLE_Sense_Rev2-00979D?logo=arduino&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-ARM_Cortex--M4-blueviolet) ![MCU](https://img.shields.io/badge/MCU-nRF52840-red) ![Sensor](https://img.shields.io/badge/Sensor-BMI270_IMU-success) ![Edge AI](https://img.shields.io/badge/Edge_AI-Real_Time-informational) ![Activity Recognition](https://img.shields.io/badge/HAR-Activity_Recognition-yellowgreen) ![Fall Detection](https://img.shields.io/badge/Fall-Detection-critical) ![Inference](https://img.shields.io/badge/Inference-On_Device-brightgreen) ![Dataset](https://img.shields.io/badge/Dataset-UCI_HAR-lightgrey) ![Device Native](https://img.shields.io/badge/Data-Device_Native-blue) ![Quantization](https://img.shields.io/badge/Quantization-INT8-orange) ![Framework](https://img.shields.io/badge/Framework-TFLite_Micro-black) ![Google Colab](https://img.shields.io/badge/Google-Colab-F9AB00?logo=googlecolab&logoColor=white) ![Jupyter](https://img.shields.io/badge/Jupyter-Notebook-F37626?logo=jupyter&logoColor=white) ![Linux](https://img.shields.io/badge/Linux-Ubuntu-E95420?logo=ubuntu&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green) ![Status](https://img.shields.io/badge/Status-Research_Prototype-blue) ![Research](https://img.shields.io/badge/Research-TinyML-important) ![Latency](https://img.shields.io/badge/Latency-<50ms-success) ![Sampling Rate](https://img.shields.io/badge/Sampling-50Hz-blue) ![Memory](https://img.shields.io/badge/SRAM-Constrained-red) ![Deployment](https://img.shields.io/badge/Deployment-Microcontroller-success) ![Serial Logging](https://img.shields.io/badge/Serial-CSV_Logging-lightgrey) ![Model](https://img.shields.io/badge/Model-Fully_Connected_NN-blue) ![Feature Engineering](https://img.shields.io/badge/Feature-Engineered-yellow) ![Edge Computing](https://img.shields.io/badge/Edge-Computing-9cf) ![IoT](https://img.shields.io/badge/IoT-Smart_Systems-ff69b4) ![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen) ![Made With](https://img.shields.io/badge/Made_with-Colab-orange) 使用 TinyML 在 Arduino Nano 33 BLE Sense Rev2 上进行实时跌倒与活动检测。 本仓库演示了一个基于 IMU 进行活动识别的端到端 TinyML 工作流,并且正被改编用于兽医术后监护。同样的轻量级边缘流水线可以通过紧凑的传感器项圈或胸背带,支持对动物的连续恢复评估,从而替代主观的人工观察。 ## 系统概览与内存布局 本项目使用了一个事件驱动的 TinyML 流水线,它从 IMU 开始,经过预过滤门控、窗口化、特征提取,最后进行量化设备端推理。可视化框图可在 [images/architecture_block_diagram.png](images/architecture_block_diagram.png) 和 [images/architecture_block_diagram.svg](images/architecture_block_diagram.svg) 中查看。 为了了解在 Nano 33 BLE Sense Rev2 上部署的可行性,[images/SRAM_layout.png](images/SRAM_layout.png) 和 [images/SRAM_layout.svg](images/SRAM_layout.svg) 中提供了 SRAM 分配视图。这些图表非常重要,因为 tensor arena、解释器运行时、特征缓冲区和栈使用量都必须容纳在微控制器受限的 SRAM 预算内。 - 来自 Arduino 的设备原生 IMU 数据采集 - 基于 Python 的数据集捕获与 CSV 导出 - 由 Notebook 驱动的 TensorFlow 模型开发 - 用于 TFLite Micro 部署的 Int8 量化 - 用于实时带标签 IMU 记录的 Arduino sketch ## 兽医应用重点 ### 1. 目标:连续的术后监护 传统上,评估动物的恢复情况依赖于诊所工作人员定期、主观的视觉观察。通过改造该系统,轻量级的传感器项圈或胸背带可以 24/7 全天候连续追踪恢复中的动物,消除人为偏差。 - 镇静与疼痛追踪:该系统可以对细微的行为变化进行分类。经历突破性疼痛或长时间镇静的动物会表现出极度受限的动作,从而改变“静止”与“活跃”状态的预期基线比率。 - 伤口与设备保护:IMU 捕捉到的突然、反复的猛烈动作可以标记出动物正在激烈地抓挠、撕咬,或是将头部剧烈甩动摩擦手术部位、石膏或伊丽莎白圈。 ### 2. 自动化动物跌倒与骨科疼痛预警 对于大型动物(如从麻醉中恢复的马或牛),或在经历大型骨科或神经外科手术后的中小型动物,跌倒可能是灾难性的。 - 即时创伤标记:利用流水线的实时跌倒检测算法,系统可以瞬间识别出高 G 冲击力,或随后伴随长时间静止的空间姿态的突然改变。 - 卧倒警告:如果术后患者跌倒或瘫倒,并保持完全静止状态一段异常长的时间,边缘设备可以触发自动警报,立即通知诊所工作人员。 ### 3. 定量活动能力与步态评估 在骨科康复期间,兽医需要了解动物随着时间的推移是否在增加负重活动。 - 活动量分配:该系统可以通过量化动物行走与休息的时间分钟数,来计算出每日活动量分配。 - 步态完整性:在行走时间窗口内,加速度幅度和变异性的变化可以作为跛行或不对称肢体受力的数字生物标志物。 ### 4. 无创、低压力的边缘智能 恢复期的动物对压力极其敏感,传统的监控设置往往是不切实际的。 - 超轻量化设计:该流水线将神经网络优化为紧凑的 INT8 TFLite Micro 二进制文件,允许智能闭环直接在设备上运行。 - 长电池续航与低压力:该设备可以在本地处理数据,并且仅在发生异常时传输警报,保持其占用空间小巧且不具侵入性。 当前的尝试是从已知的现有成果出发,逐步探索未知领域,利用从活体动物身上收集的数据集进行工作。 ## 项目结构 ``` tinyml-fall-detection-arduino ├── arduino_data_logger │ └── arduino_data_logger.ino ├── data_capture.py ├── device_native_dataset │ ├── STATIONARY_20260510_194427.csv │ └── WALKING_20260510_193844.csv ├── device_native_training.ipynb ├── LICENSE ├── README.md ├── requirements.txt ├── screenshots │ └── arduino_data_logger_upload.png ``` ## 快速开始 ``` git clone https://github.com/imosudi/tinyml-fall-detection-arduino.git cd tinyml-fall-detection-arduino python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ## 环境要求 - Python 3.9+(使用 Python 3.11 测试) - 用于串口通信的 `pyserial` - Arduino Nano 33 BLE Sense Rev2 - 用于加载 sketch 的 Arduino CLI 或 Arduino IDE 安装 Python 依赖项: ## 数据采集 1. 运行: ./arduino-ide_2.3.8_Linux_64bit.AppImage --no-sandbox **Arduino IDE**: [Arduino IDE](screenshots/arduino_data_logger_upload.png) 2. 将 `arduino_data_logger/arduino_data_logger.ino` 上传到 Arduino Nano 33 BLE Sense Rev2。 3. 通过 USB 将开发板连接到电脑。 4. 如果您的设备未处于 `/dev/ttyACM0`,请更新 `data_capture.py` 中的 `SERIAL_PORT`。 5. 运行捕获脚本: ``` python data_capture.py ``` 6. 选择标签索引和录制时长。 7. 脚本会将选择的标签发送给 Arduino 并等待确认响应。 8. 录制的 CSV 文件将保存到 `device_native_dataset/`。 ## 数据采集注意事项 - Arduino sketch 以 50 Hz 的频率记录 IMU 样本。 - 每一行 CSV 包含: `timestamp_ms`, `label`, `ax`, `ay`, `az`, `gx`, `gy`, `gz`。 - Python 脚本会在标签确认后丢弃预热样本,以避免出现无标签的数据行。 ## 模型开发 包含了几个用于实验和量化的 notebook: - `uci_har_prototype.ipynb` - `uci_har_prototype_single_block.ipynb` - `uci_har_prototype_quantised.ipynb` - `uci_har_prototype_quantised_single_block.ipynb` - `uci_har_prototype_stage2.ipynb` - `device_native_training.ipynb` 使用这些 notebook 来探索特征工程、模型训练以及用于部署的 TFLite 量化。 ## 当前挑战 当前的分类器行为表现出单类预测问题。混淆矩阵显示模型仅预测为 `STATIONARY`: 真实类别 预测为 STATIONARY 预测为 WALKING STATIONARY 120 0 WALKING 0 0 这意味着模型正确分类了 120 个 `STATIONARY` 样本,但没有产生任何 `WALKING` 预测。 注:目前正在解决此问题 ## 部署 本仓库专注于数据集收集和模型原型设计。下一步是将训练好的量化模型转换为 TFLite Micro 并将其部署到 Arduino 平台。 ## 项目目标 - 在设备端采集带标签的 IMU 数据 - 构建用于活动与跌倒检测的 TinyML 工作流 - 调整流水线以用于兽医恢复与疼痛监护 - 在 Arduino 硬件上实现高效的 int8 推理 - 支持未来向动物活动与骨科康复应用场景的扩展 ## 许可证 本项目采用 **BSD 3-Clause License** 授权。详情请参阅 [LICENSE](./LICENSE)。 ## 作者 **Mosudi Isiaka O.** 📧 [mosudi.isiaka@gmail.com](mailto:mosudi.isiaka@gmail.com) 💻 [https://github.com/imosudi](https://github.com/imosudi)
标签:Apex, Arduino, NoSQL, TensorFlow Lite, TinyML, 嵌入式开发, 摔倒检测, 机器学习, 逆向工具