# 虚拟牙合架系统后端代码
**Repository Path**: xinqizeng/teethbite
## Basic Information
- **Project Name**: 虚拟牙合架系统后端代码
- **Description**: 虚拟牙合架可视化后端代码
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2022-04-16
- **Last Updated**: 2023-06-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 虚拟牙合架可视化后端代码
## 目录
- [虚拟牙合架可视化后端代码](#虚拟牙合架可视化后端代码)
- [目录](#目录)
- [介绍](#介绍)
- [代码结构及功能介绍](#代码结构及功能介绍)
- [Dockerfile](#dockerfile)
- [Python files(teethbite)](#python-filesteethbite)
- [global files](#global-files)
- [routes](#routes)
- [处理用户信息相关的请求](#处理用户信息相关的请求)
- [处理患者信息相关的请求](#处理患者信息相关的请求)
- [处理上传图片,配准等的请求](#处理上传图片配准等的请求)
- [处理存取工程文件的请求](#处理存取工程文件的请求)
- [SQLOperation](#sqloperation)
- [算法部分](#算法部分)
- [后端安装及运行流程](#后端安装及运行流程)
- [患者目录介绍](#患者目录介绍)
- [算法部分介绍](#算法部分介绍)
## 介绍
“虚拟牙合架可视化” 是一个网页版虚拟牙合架工具,能够模拟人的口腔内部上下颌运动,可用于口腔医学临床诊疗:通过CBCT数据的采集,在患者术前通过计算机模拟出上下颌运动。其利用计算机的计算功能,实现对咬合及运动特征的实时定量分析。
本文档介绍了项目后端程序结构及功能,并可帮助您将虚拟牙合架可视化后端程序部署到云服务器上。
本项目由python flask框架实现,利用其搭建的服务器处理前端发送的请求、操作用户和患者信息数据库、并调用C++程序。为保证运行的速度,配准、求解旋转轴等功能均由C++实现。上述程序所需环境和依赖由docker搭建,在docker虚拟容器中进行,保证了程序能快速部署至任意一台服务器。
## 代码结构及功能介绍
### Dockerfile
构建docker镜像时所需的配置
### Python files(teethbite)
#### global files
* main.py
后端程序的入口
* constants.py
定义了python文件中需要用到的常量,如数据库配置信息,患者信息文件默认路径等
* Interface.py
实现了对C++接口的封装,以供python文件调用
* SQLConfig.py
初始化flask的app并配置数据库
* updateProjectFile.py
实现工程文件的增删改查,记录用户的操作,以复现用户行为
* requirements.txt
python依赖的配置,用于在虚拟环境中导入运行所必须的依赖
#### routes
##### 处理用户信息相关的请求
* login.py
处理用户登录请求。
* register.py
处理用户注册请求。
* updateUserInformation.py
处理修改个人信息的请求
* SearchByUsername.py
通过用户名查找用户,并返回其信息
##### 处理患者信息相关的请求
* newPatient.py
处理新建患者的请求
* updatePatientInformation.py
处理修改患者信息的请求
* SearchPatient.py
用于查询患者信息
* getAllPatients.py
返回用户下所有患者的信息,用于初始化患者信息表
* deletePatient.py
用于删除患者
##### 处理上传图片,配准等的请求
* uploadImage.py
用于上传扫描得到的CT数据(stl文件)
* deleteStlFile.py
用于删除用户上传的stl文件
* punctuation.py
接受用户标点的数据并保存为txt文件
* addAlign.py
根据两个index获得大致变换矩阵
* analyse.py
运用之前上传的数据,发起分析请求,得到旋转轴的信息
##### 处理存取工程文件的请求
* getProjectFile.py
用于获取记录患者操作信息及当前状态的患者工程文件
* saveProjectData.py
用于保存当前工作状态至工程文件
#### SQLOperation
* UserSQLOperation.py
用于操作用户数据库的python文件
* PatientSQLOperation.py
用于操作患者信息数据库的python文件
### 算法部分
* CMakeLists.txt
cmake文件,用于构建C++文件
* under_sample.cpp
根据给定的STL文件,以及size大小,进行降采样,减少点的数量。
* abs_rotation.cpp
根据用户标点,获得大致的变换矩阵
* add_align.cpp
对上颌进行配准
* key_points.cpp
对下颌进行操作,求解出对应点
* testPo.py
根据下颌求得的对应点,求解旋转轴
## 后端安装及运行流程
在安装并运行项目前,您需要确保:
* 拥有一台linux服务器,且CentOS系统的内核版本高于3.10(或其他符合要求的linux操作系统)
* 服务器上已经安装了git
* 在安全组配置中开放了8080端口,且端口未被其他服务占用
若已满足上述要求,您可以按照下列步骤运行虚拟牙合架可视化后端程序。
1. 配置docker环境
可参考[linux docker篇(一键安装、部署、使用)—CSDN](https://blog.csdn.net/qq_36379495/article/details/92837897?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165019270616782246487255%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165019270616782246487255&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-92837897.142^v9^pc_search_result_cache,157^v4^control&utm_term=LINUX%E9%85%8D%E7%BD%AEdocker&spm=1018.2226.3001.4187)
2. 配置mysql数据库环境
可参考[linux安装配置Mysql详细步骤—CSDN](https://blog.csdn.net/weixin_44198965/article/details/91891985?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165019253116781685362079%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165019253116781685362079&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-91891985.142^v9^pc_search_result_cache,157^v4^control&utm_term=linux%E9%85%8D%E7%BD%AEmysql&spm=1018.2226.3001.4187)
数据库配置如下:
`
* 用户名:root
* 密码:111111
* 数据库名:db2
若您希望修改上述信息,可在源码中进行替换。
3. 下载源码
```
git clone https://gitee.com/xinqizeng/teethbite.git
```
记本次路径为 `baseurl`,若您之前修改了数据库信息,需在`baseurl/src/teethbite/constants.py` 中修改数据库对应参数。
4. 通过docker搭建环境并运行
切换当前文件夹为 `baseurl` ,并运行以下命令。请确保 `8080` 端口未被占用,且已经在安全组中配置。如希望修改端口,可通过修改Dockerfile中 `EXPOSE 8080` 的 `8080` 为您希望修改的端口。
* 搭建运行环境
```
./build.sh
```
* 运行后端程序
```
./start.sh
```
此时后端程序将运行在docker容器中的 `8080` 端口,并映射到主机 `8080` 端口中,可以通过 `http://主机IP:8080/` 访问。
## 患者目录介绍
在docker虚拟容器中, `/root/upload/` 路径为存储患者信息的目录。其中每个文件夹为一个患者,其文件夹名为患者的id。在这个文件夹中,存储了以下三个子文件/文件夹,分别为:
* stlFiles
这个文件夹用于存储用户上传的stl文件,若上传同名文件将加_0, _1等后缀。
* points
这个文件夹用于存储用户对stl文件标点的数据其命名方式为:目标点云的文件名(不含后缀,下同)+初始点云的文件名+标记点云的文件名.txt
* projectFile.json
这是为患者实现的工程文件,用json格式存储。用于保存用户目前操作的状态。若该患者曾经进行过咬合模拟,用户就可以直接通过初始化从后端将之前的状态复原,而不必进行重复操作。其中包含以下键:
* patientInformation
其中存储了患者的基本信息,即id,姓名,性别,年龄,挂号时间,手机号码和所属的用户(医生)。
* stlFiles
其中以json list方式存储了数个用户上传的stl文件的状态,与stlFiles目录下的文件一一对应。信息有:文件名,在前端展示时用户自定义的名字,颜色,是否可见,以及旋转矩阵。
* points
其中以json list方式存储了用户对stl文件进行标点的数据。包含标点文件的文件名(与points目录中一一对应),目标点云和初始点云的文件名。
* information
存储了用户求解的铰链轴信息
## 算法部分介绍