# 后端部分说明

## 文件夹概览

```bash
.
├── albatross.spec                          // pyinstaller 打包配置文件
├── apis
│   ├── base.py
│   └── version1
│       ├── route_common.py                 // 公用api，如前端logger传给后端
│       ├── route_eeg.py                    // 脑电数据、运动想象训练等功能
│       ├── route_mi.py                     // 生成报告调用的想象运动分析
│       ├── route_motion.py                 // 表情识别、姿态检测等摄像头相关功能
│       ├── route_peripheral.py             // 外设
│       ├── route_subjects.py               // 用户管理
│       └── route_trains.py                 // 训练记录管理
├── build_pyd.py                            // 使用Cython编译core代码
├── core                                    // 核心代码
│   ├── __init__.py
│   ├── facial_expression.py
│   ├── gait_analysis.py
│   ├── mi                                  // 想象运动相关
│   │   ├── eeg_csp.py                      // 基于CSP的在线分类和离线分析
│   │   ├── eeg_erds.py                     // ERD/ERS分析
│   │   ├── eeg_psd.py                      // 基于PSD的在线分类
│   │   ├── eeg_wpli.py                     // wPLI
│   │   └── utils.py
│   ├── peripheral                          // 外设相关
│   │   ├── factory.py
│   │   ├── hand                            // 各个手部外设
│   │   │   ├── base.py
│   │   │   ├── fubo_pneumatic_finger.py    // 富伯
│   │   │   └── ruishou.py                  // 睿手
│   │   └── manager.py                      // 手部外设主入口
│   ├── posture.py
│   ├── sig_chain                           // 数据链路
│   │   ├── device
│   │   │   ├── connector_factory.py
│   │   │   ├── connector_interface.py
│   │   │   ├── fake_sig                    // 假的eeg数据相关
│   │   │   │   ├── faker-server-setup.ps1  // faker_server 打包脚本
│   │   │   │   ├── sig_fake_server.py      // 假的eeg数据生成
│   │   │   │   ├── sig_generator.py        // 使用基本信号生成假数据
│   │   │   │   └── sig_reader.py           // 读取bdf文件用于生成假数据
│   │   │   ├── faker.py                    // 假数据接收
│   │   │   ├── montage_base_model.py
│   │   │   ├── neo.py                      // neo设备数据接收
│   │   │   ├── pony.py                     // pony设备数据接收
│   │   │   └── pony_sdk
│   │   ├── pre_process.py                  // 预处理
│   │   ├── sig_buffer.py                   // eeg信号接收buffer
│   │   ├── sig_reader.py                   // 读取bdf文件
│   │   ├── sig_receive.py                  // eeg信号接收
│   │   ├── sig_save.py                     // eeg信号存储
│   │   └── utils.py
│   ├── utils.py
│   └── visualizer.py
├── db                                      // 数据库相关
│   ├── base.py
│   ├── base_class.py
│   ├── data                                // bdf、视频等用户数据存储位置
│   ├── models
│   │   ├── daily_stats.py
│   │   ├── hand_peripherals.py
│   │   ├── subjects.py
│   │   └── trains.py
│   ├── repository
│   │   ├── daily_stats.py
│   │   ├── hand_peripherals.py
│   │   ├── subjects.py
│   │   └── trains.py
│   ├── session.py
│   └── utils.py
├── gui.py                                 // 作为桌面应用时的主入口
├── logging.json                           // 日志配置文件
├── logs                                   // 日志
├── main.py                                // 作为web应用时的主入口
├── schemas
│   ├── hand_peripheral.py
│   ├── subjects.py
│   └── trains.py
├── settings                               // 全局设置
│   └── config.py
├── sql_app.db                             // 数据库
├── static
│   ├── config
│   │   ├── config.json                    // 配置文件
│   │   ├── message_en.json
│   │   └── message_zh.json
│   ├── css
│   ├── fonts
│   ├── images
│   ├── js
│   └── video                              // 视频命名规则：<部位>_<动作>_<序号>.mp4
├── templates
├── tests                                  // 单元测试
└── tools                                  // 软件配套工具
    ├── README.md
    ├── process_offline.py                 // 算法离线分析
    └── process_offline.spec               // 离线分析工具打包文件
```

## 数据库

<div align="center"> <img src="./UML/dbschema.svg" /> </div>

## 重要功能逻辑

<!-- ## Sequence -->

+ 用户管理时序图

<div align="center"> <img src="./UML/subject_sequence.png" width = 50% height = 50% /> </div>

+ Train sequence

<div align="center"> <img src="./UML/train_sequence.png" width = 50% height = 50% /> </div>

+ sig_chain 时序图

<div align="center"> <img src="./UML/sig_chain sequence.svg"/> </div>

+ route_eeg api 调用逻辑

<div align="center"> <img src="./UML/route_eeg_activity.svg" width = 50%/> </div>

+ 训练流程(范式)

<div align="center"> <img src="./UML/backend_train_detail.svg" width = 50%/> </div>

+ 外设前后端交互时序图

<div align="center"> <img src="./UML/外设_seq.svg"/> </div>

+ 请求报告时序图

<div align="center"> <img src="./UML/请求报告时序图.svg" width = 50%/> </div>


## 外设

目前支持的外设有**睿手**和**富伯**机械手

- 睿手

<div align="center"> <img src="./UML/外设_ruishou_seq.svg" width = 50%/> </div>

- 富伯

<div align="center"> <img src="./UML/外设_fubo_seq.svg" width = 50%/> </div>
