# Albatross
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)

A BCI-driven system for neuro-rehabilitation

## Function module
+ MI-BCI online
+ Patient and Train database
+ Online visual feedback
+ Video-based posture detection
+ EEG analysis offline and report
+ Physical feedback

如图：

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

## Technology stack
+ FastAPI
+ Uvicorn as server
+ Sqlite
+ JS HTML CSS as frontend
+ flaskwebgui for desktop app
+ pyinstaller

如图：

<div align="center"> <img src="./docs/UML/framework.svg" width = 80% height = 80% /> </div>

前后端实现细节请查看 [frontend.md](./docs/frontend.md) 和 [backend.md](./docs/backend.md)

## Use case

如图：

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


## File structure

```
├─.git
├─.vscode
├─backend
│  ├─apis                                //底层路由
│  │  ├─general_pages
│  │  └─version1
│  ├─core                                //算法代码
│  ├─db                                  //数据库相关
│  │  ├─data                             //视频及脑电数据存放路径
│  │  ├─models
│  │  └─repository
│  ├─logs
│  ├─schemas
│  ├─service                             //api调用到的复杂功能
│  ├─settings                            //配置文件
│  ├─static
│  │  ├─config                           //配置文件资源包括前后端所需
│  │  ├─css
│  │  ├─images
│  │  ├─js
│  │  └─video
│  ├─templates                           //页面
│  │  ├─components
│  │  ├─eeg
│  │  ├─general_pages
│  │  ├─shared
│  │  ├─subjects
│  │  └─trains
│  ├─tests                               //测试api代码
│  │  └─test_routes
│  ├─tools                               //软件配套工具代码（离线验证工具）
│  └─webapps                             //页面路由
│      ├─eeg
│      ├─subjects
│      └─trains
└─docs
```

## Start the project

运行项目前，请先到微盘下载训练视频文件，并放到`backend/static/video` 下

```bash
# pip install pipenv
# create a python 3.8.5 virtual environment
# acvivate virtual env
cd <project dir>
conda create -f environment.yml
# or
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
# run web app
streamlit run main.py
```

除主体软件, 本项目还包含两个开发辅助工具的代码:

- faker server 工具: 没有脑电硬件设备时，可使用此工具模拟信号调试
- 离线验证工具: 用于验证在线算法的准确性

### faker server的使用：

通过以下命令
```bash
cd backend
python -m core.sig_chain.device.fake_sig.sig_fake_server
```
启动 faker server (或运行[提前打包](#faker-server-工具)好的软件使用), 然后在配置文件中修改设备为 faker，最后启动albatross。


### 离线验证工具的使用

参考tools下的[README.md](./backend/tools/README.md)


## 打包

使用 [pyinstaller](https://pyinstaller.org/en/stable/index.html) 打包

### 主体软件

```
python build_pyd.py build_ext --inplace
pyinstaller -y albatross.spec
```

打包完在 `backend/dist` 下会发现 albatross 文件夹，即为打包好的应用。


### faker server 工具

[](#faker_server)

执行 `backend/core/sig_chain/device/fake_sig` 下的脚本

```
faker-server-setup.ps1
```

生成的exe文件在同级目录下的 `dist` 文件夹中


### 离线验证工具

参考backend下的[process_offline.md](./backend/process_offline.md)
