# 虚拟牙合架系统后端代码 **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
存储了用户求解的铰链轴信息 ## 算法部分介绍