肺功能单数据提取与自动录入(一):流程分析

完全不了解的深度学习的同学建议先学习课程:零基础实践深度学习:飞桨PaddlePaddle-源于产业实践的开源深度学习平台       

       肺功能测试是一种用于评估和测量个体呼吸系统功能的医学检查。这种测试可以提供有关肺部健康和功能的重要信息,对于诊断和监测呼吸系统疾病非常有帮助。肺功能检测单包含了患者的肺功能测试结果,以及可能的解释和评估。然而要录入大量肺功能单数据并不是一件容易的事,不仅耗时耗力,还极易出错。

       在此,分享如何基于百度飞桨(PaddlePaddle)开源深度学习平台开发肺功能单数据提取与自动录入程序。

1、问题分析

1.1、从图片到数据

想必大家都使用过QQ或微信的文字提取功能,那么我们是否可以通过肺功能检测单的照片提取我们想要的数据呢?答案是肯定的。

QQ或微信该功能的实现是通过光学字符识别OCR(Optical Character Recognition)技术,这是一种计算机视觉技术,能够将印刷或手写的文本图像转换为可以被计算机处理的文本数据。

但这种方法被集成到软件中了,那么我们是否有开源的、能够灵活批量处理肺功能单的工具?下面我将隆重介绍我们的主角------PaddleOCR!!!这是百度飞桨平台发布的一个文字识别项目(GitHub - PaddlePaddle/PaddleOCR),它提供了数据标注工具、多语言文字识别预训练模型、模型训练与微调工具、模型推理与部署工具和一系列教程,能够让我们开心快乐地开发出能够实现特定任务的OCR深度学习模型,实现某些特定任务。PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。

1.2、演示示例

文字识别模型识别图像后返回的结果到底是个什么东西?以下是利用ch_PP-OCRv4_det文本检测模型(检测图像中文本的位置)和ch_PP-OCRv4_rec文本识别模型(根据det模型提供的文本位置识别文本内容)推理的结果展示。

## 以上是检测结果的可视化,以下是实际产生的推理结果的文本文件

/home/aistudio/Croped_imgs/img_rot270_001.jpg    

{"ocr_info": [{"transcription": "金**", "bbox": [269, 3, 692, 175], "points": [[276.0, 3.0], [692.0, 21.0], [685.0, 175.0], [269.0, 157.0]], "pred_id": 3, "pred": "ANSWER"}, {"transcription": "Name", "bbox": [128, 87, 247, 159], "points": [[128.0, 87.0], [247.0, 87.0], [247.0, 159.0], [128.0, 159.0]], "pred_id": 1, "pred": "QUESTION"}, {"transcription": "IDNo", "bbox": [128, 154, 247, 226], "points": [[128.0, 154.0], [247.0, 154.0], [247.0, 226.0], [128.0, 226.0]], "pred_id": 1, "pred": "QUESTION"}, {"transcription": "810745", "bbox": [271, 164, 562, 217], "points": [[271.0, 164.0], [562.0, 164.0], [562.0, 217.0], [271.0, 217.0]], "pred_id": 3, "pred": "ANSWER"}, {"transcription": "Date", "bbox": [124, 217, 233, 294], "points": [[124.0, 217.0], [233.0, 217.0], [233.0, 294.0], [124.0, 294.0]], "pred_id": 1, "pred": "QUESTION"}, {"transcription": "05/27/2023 10:02", "bbox": [266, 231, 652, 279], "points": [[266.0, 231.0], [652.0, 231.0], [652.0, 279.0], [266.0, 279.0]], "pred_id": 3, "pred": "ANSWER"}, {"transcription": "Sex", "bbox": [128, 284, 219, 347], "points": [[128.0, 284.0], [219.0, 284.0], [219.0, 347.0], [128.0, 347.0]], "pred_id": 1, "pred": "QUESTION"}, {"transcription": "Male", "bbox": [266, 289, 371, 347], "points": [[266.0, 289.0], [371.0, 289.0], [371.0, 347.0], [266.0, 347.0]], "pred_id": 3, "pred": "ANSWER"}, {"transcription": "Age", "bbox": [500, 284, 600, 352], "points": [[500.0, 284.0], [600.0, 284.0], [600.0, 352.0], [500.0, 352.0]], "pred_id": 1, "pred": "QUESTION"}, {"transcription": "53", "bbox": [657, 284, 733, 342], "points": [[657.0, 284.0], [733.0, 284.0], [733.0, 342.0], [657.0, 342.0]], "pred_id": 3, "pred": "ANSWER"}, {"transcription": "HT", "bbox": [128, 347, 205, 414], "points": [[128.0, 347.0], [205.0, 347.0], [205.0, 414.0], [128.0, 414.0]], "pred_id": 1, "pred": "QUESTION"}, {"transcription": "162.6cm", "bbox": [266, 347, 466, 414], "points": [[266.0, 347.0], [466.0, 347.0], [466.0, 414.0], [266.0, 414.0]], "pred_id": 3, "pred": "ANSWER"}]}

推理结果文本格式讲解:

1、每一行就是一张图片的推理结果,以上只显示了一行结果(一张图)的部分内容。

2、一行格式为:图片路径 、制表符、 JSON格式内容(也可以说是python的字典类型数据)

/home/aistudio/Croped_imgs/img_rot270_001.jpg    {‘xx’:[xx]}

3、JSON格式内容

{"ocr_info":[

    {

        "transcription":"金**",

        "bbox":[269,3,692,175],

        "points":[[276,3],[692,21],[685,175],[269,157]],

        "pred_id":3,

        "pred":"ANSWER"

    },

    {

        "transcription":"Name",

        "bbox":[128,87,247,159],

        "points":[[128,87],[247,87],[247,159],[128,159]],

        "pred_id":1,

        "pred":"QUESTION"

    }

  ]

}

# JSON格式是一个字典类型数据,即{"key": "value"},键值对数据

# key名为ocr_info,value为一个列表数据,即[]

# 列表数据中又包含了多个字典{},每个字典就是一个检测框的数据

# 每个检测框的数据存在一个字典里,字典包含名为transcription、bbox等的键名和对应的值

# transcription是检测的文本结果,bbox是文本框位置

我们就是从推理结果的文本文件中提取我们想要的数据!

1.3、方向分类

某些手机,即使当我们竖着拍照时,图像有时候也会发生旋转,这会极大地影响到后续结果。以下是一个0°的图像和180°的图像的预测结果。

可以看到,发生旋转的图像识别效果非常差!这时就需要训练一个能够自动校正图像方向的模型。那么什么是方向分类模型?那么什么是分类模型,以下是一个例子。

分类模型可以识别主体是什么,比如看见猫的图片就可以识别为“猫”这个标签。类似地,我们可以训练肺功能单的方向分类模型,让正向图片的标签为“0°”,以此类推。当模型见到旋转的图像就会识别为对应的标签,我们就可以根据标签对图像进行转正操作。

该部分参考:

多方向证照图片的OCR方案详解 - 飞桨AI Studio星河社区 (baidu.com)

1.4、目标检测

由于肺功能单比较狭长,照片大概会有2/3无效信息,对无效信息进行裁剪可以提高模型训练和推理的速度。那么我们如何才能精确的裁剪?我们可以利用目标检测模型推理出的目标框进行裁剪。基于人物的目标检测模型可以检测出人物所在的最小四边形。同理,我们也可以训练一个针对肺功能单这个目标的检测模型,并根据检测出的四边形位置信息裁剪图像。

该部分参考:

数据标注懒人包:目标检测小样本手动标注解决方案(一) - 飞桨AI Studio星河社区 (baidu.com)

1.5、关键信息提取KIE, Key Information Extraction

不知道你是否发现:1.2示例的结果文本文件中,识别的内容并不是完全、严格地从上到下、从左到右的顺序识别文本内容,我们就不能知道哪个肺功能指标对应哪个数值!!!

好在PaddleOCR提供了一种关键信息提抽取实现路径,可以训练模型将问题和答案链接。或许我们也可以训练一个关键信息抽取模型,将肺功能指标和对应的结果链接,就可以完美解决问题和答案不清的问题。

图中红色框表示问题,蓝色框表示答案问题答案之间使用绿色线连接。

详细参考:

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/README_ch.md

2、实践流程

根据以上的分析,本项目拟实践流程如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QH_ShareHub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值