自动摘要: |时间|对应版本号|修订人|主要修订内容| ||||| ||V1.0.0|[@SindreYang( ……..
时间 | 对应版本号 | 修订人 | 主要修订内容 |
---|---|---|---|
V1.0.0 | @Sindre Yang(sindre) | 基于Libtorch部署 | |
V1.0.1 | @邹童玺 | 基于openvino集成 |
V1.0.0
背景
- libtorch(pytorch的C++版本):https://pytorch.org/
- 建议使用1.9版本及以上,因为服务器用的1.9.1
- cmake:建议使用3.12版以上cmake封装
文件说明
model.pth—>模型文件(生成模型,可应用于单牙,三连牙)infer.py—>接口文件
前处理-preprocess
模型推理-inference
后处理-postprocess
参数信息
preprocess
1 | """ |
inference
1 | """ |
postprocess
1 | """ |
V1.0.1
应用场景
- 适用于前磨牙、磨牙;
- 椅旁CAD中自动形式的嵌体生成;
- 有边缘线情况;
- 无边缘线情况;
- 基本版CAD中自动形式的嵌体生成
- 有边缘线情况;
- 无边缘线情况;
算法输入
- 模型输入
- 模型为三颗牙(中间为待修复的嵌体)的片段模型或一颗牙(嵌体)的片段Mesh结构,该片段Mesh需要一个算法获得(任务1),其中输入条件为三颗牙时效果优于一颗牙,输入多颗牙的目的是为限制嵌体与邻牙的间隙,所以针对不同情况输入信息不同:
- 近中(磨牙)、坏磨牙、远中(磨牙):输入三颗牙;
- 近中(磨牙)、坏磨牙:输入两颗牙;
- 近中(尖牙)、坏磨牙、远中(磨牙):输入三颗牙;
- 不考虑坏牙为尖牙的情况。
- 模型为三颗牙(中间为待修复的嵌体)的片段模型或一颗牙(嵌体)的片段Mesh结构,该片段Mesh需要一个算法获得(任务1),其中输入条件为三颗牙时效果优于一颗牙,输入多颗牙的目的是为限制嵌体与邻牙的间隙,所以针对不同情况输入信息不同:
- Mesh模型深度图获取
- 通过ToothMarker工具从具体的CAD扫描件,提取输入模型的深度图(任务2)。
算法输出
- 深度图转换成嵌体Mesh
- 深度图需还原成点云模型(任务3),之后点云模型需三角化成网格(任务4);得到的网格是多颗牙的片段模型,需要对其进行裁剪,将嵌体对应的区域裁剪下来进行,该部分为嵌体外层,用外层与嵌体内层进行拼接,得到最终的嵌体模型Mesh(任务5)。
任务列表
任务1:CAD中AI嵌体算法输入模型的裁剪
输入:牙弓Mesh模型、坏牙位置;输出:片段Mesh模型、变换矩阵;
裁剪当前坏牙牙位的近中侧和远中侧邻牙,输出多颗牙的片段模型Mesh,需将片段Mesh移至世界坐标系原点,返回变换矩阵,用于AI嵌体算法的输入;情况:近中(磨牙)、坏磨牙、远中(磨牙):输入三颗牙;近中(磨牙)、坏磨牙:输入两颗牙;近中(尖牙)、坏磨牙、远中(磨牙):输入三颗牙;不考虑坏牙为尖牙的情况;
自动生成可能需要邻牙提取算法;手动生成参考ToothMarker中交互功能;
任务2:AI嵌体算法片段模型生成深度图
输入:裁剪后的片段模型Mesh;输出:牙尖侧、舌侧、颊侧方向的深度图组;参考DepthImageLib;
任务3:AI嵌体算法输出深度图点云化
输入:深度图组,相机参数;输出:Mesh点集;参考DepthImageLib;
任务4:点云模型三角化重建
输入:片段模型点云Mesh;输出:片段模型网格Mesh;参考方法:泊松重建方法、贪婪投影三角化方法;
任务5:模型裁剪拼接生成嵌体
输入:片段模型网格Mesh;输出:嵌体Mesh模型;1、根据任务1中的变换矩阵,模型变换回原坐标系位置,在同一坐标系下进行裁剪;2、根据有无嵌体边缘线情况采用不同的裁剪方法:有边缘:需要变换回原坐标系,使用边缘线参与裁剪;无边缘:需要变换回原坐标系,基于重叠的处理,裁掉重叠的面片、点,保留嵌体区域,该方法会有误差,根据效果进行完善;3、对裁剪后的网格进行滤波(Refine);4、内外层拼接,用上面的外层与嵌体的内层,拼接形成一个闭合的成品修复体;
任务计划
10.22 | 整理之前沟通输出的任务 ==>文档; 理解并运行C++封装的分牙算法 ==> toothmarker展示分牙效果准备、为嵌体封装做准备; |
---|---|
10.23 | AI嵌体算法的理解运行 ==>输出训练后深度图效果; 理解并运行toothmarker ==>理解深度图生成方法,输出深度图效果,嵌体封装需要; ==>熟悉toothmarker的结构、以便后续优化填加功能; |
10.25-10.26 | 封装AI嵌体算法并运行 ==>生成的深度图记录变换矩阵; ==>验证,深度图生成点云,后续进行点云三角化和后处理; ==>嵌体部分裁剪、拼接; ==>通知吴晓燕,准备10组数据,后续测试; |
10.27 | 自测并与张新霞反馈 ==>跑10组数据,改BUG,观察效果; ==>反馈,优缺点,改进方向讨论; toothmarker集成分牙功能 ==>toothmarker添加调用接口,显示分牙效果; |
10.28 | *点云三角化及后处理 ==>确定实现者 ==>自己实现则10.28处理,计划顺延n天或暂停(需讨论),他人实现则并行处理; *toothmarker集成AI嵌体 ==>输出点云还是网格?网格需等待“点云三角化及后处理” ==>toothmarker添加调用接口,显示嵌体效果; 封装全冠生成算法 ==>理解全冠算法,运行结果; ==>确定封装的输入数据,如何处理; ==>封装,测试结果; |
10.29 | toothmarker集成全冠生成 ==>toothmarker添加调用接口,显示全冠效果; 完善toothmarker ==>界面、模型、调用; |
调用方式:
1、设置待修复体片段模型;
2、设置神经网络模型路径,在VinoInlayLib/model中;
3、执行嵌体修复;
4、得到修复后的模型;
依赖库
所依赖的openvino/opencv动态库在VinoInlayLib/bin中;
效果
缺陷
1.
2.
- 还未进行缺失区域的裁剪拼接,待后续处理;