#物联网征文#基于实例分割的恶性皮肤肿瘤检测系统 原创

小西在这里
发布于 2022-8-30 19:41
浏览
0收藏

@toc

​项目摘要

  识瘤者团队通过敏锐的目光抓住目前困扰人群已久的恶性皮肤肿瘤问题进行研究,研发出基于ModelArts的恶性皮肤肿瘤检测系统,完全自主研发,团队对其有完全自主知识产权。恶性皮肤肿瘤恶性度高,转移发生早,死亡率高,除了手术切除外,缺乏特效治疗,因此早期诊断、早期治疗很重要。
  近年来,由于政策支撑的原因,数字医疗迅猛发展,我们团队考虑到不同医院的医师专业性常常存在一些差距,而且患者常常因为一些小病就到大型医院进行诊疗,严重消耗了医疗资源,基于种种原因研发了这款恶性皮肤肿瘤病灶区域检测系统。
  采集设备端将传来的皮肤镜图像展示在基于OpenHarmony的润和大禹系列HH-SCDAYU200开发套件的界面端或者Qt应用程序界面,在设备端对图片进行预处理,随后将处理过后的图片传输至服务端,调用部署好的模型识别病灶区域,将最终结果存储至华为云服务器,并将数据归档至OBS对象存储服务中;用户端采用的是基于HarmonyOS的鸿蒙APP,患者可上传图片进行检测,查看自己的诊疗记录。识瘤者APP使用ArkUI方舟开发框架,轻量级存储等,开发效率提高30%。
  我们未来计划从恶性皮肤肿瘤一个领域拓展到更多领域,我们将从恶性皮肤肿瘤诊断的分类提升至各种皮肤病的分类,我们首先专注于黑色素瘤的诊断,目前拓展到恶性皮肤肿瘤的诊断,从点到线再到整个面,将模型的识别增加更多的种类,帮助医师与患者检查和诊断在人群中存在的不易检测的疾病。

1. 项目背景

  恶性皮肤肿瘤,是一种起源于表皮基底细胞或毛囊外根鞘的低度恶性肿瘤。临床有两种类型,即基底细胞癌、鳞状细胞癌,均来源于角化细胞。常见的恶性皮肤肿瘤有Bowen病、Paget病、基底细胞癌、鳞状细胞癌、恶性黑素瘤等。恶性皮肤肿瘤大部分生长于原发部位,但也有转移和不明方向的肿瘤发生。恶性皮肤肿瘤的发生率和死亡率逐年升高,通常诊断出患有恶性皮肤肿瘤的患者年龄在65-74岁,恶性皮肤肿瘤造成患者死亡的高发年龄为75-84岁。
  恶性皮肤肿瘤多发生于皮肤,也可见于黏膜和内脏,如果在患病初期就进行治 疗,那么5年之内的存活率可以显著提高7倍。目前医院临床主要依靠皮肤镜或者病理组织切片来确诊恶性皮肤肿瘤。但这种方式存在一定的问题,比如皮肤镜中图像对比度低,肉眼难以区分;人工检查费时费力;专家数量不足,偏远地区医患比达1:70000等。

2. 团队介绍

  识瘤者团队是一家专注于恶性皮肤肿瘤识别技术研发的在校创新创业团队,旨在利用我们的设备帮助患者更早的发现病情,为国家的基础医疗做出自己的贡献。
  识瘤者团队来自于梅科尔工作室,目前梅科尔工作室已经形成了一个跨多专业深入融合的平台,研究方向覆盖医疗器械、五轴数控机床装备研发、3D打印、软体机器人、人工智能、机器人、大数据、物联网、新能源等多个领域,目前有10个研发小组和上百个在研项目。并且工作室还多次承担国家级大学生创新创业项目,参加各个级别比赛,至今获得国际奖项27项、国家级奖项158项、省级奖项412项。
#物联网征文#基于实例分割的恶性皮肤肿瘤检测系统-鸿蒙开发者社区

3. 应用场景

  面向客户分为大三类:医院及医保公司、医疗软件服务商、个人用户。
  ① 针对医院及医保公司提供两种解决方案,一是由Qt应用程序主导的S款售卖模式,二是由DAYU200开发板主导H款售卖模式。两者都使用皮肤镜采集图像,图像展示在设备界面,在端侧对图片进行预处理,调用部署到ESC的模型识别病灶区域,将数据归档至数据库和OBS对象存储服务中,持久化存储;
  ② 针对医疗软件服务商提供API,识瘤者将恶性皮肤肿瘤图像噪声消除、纹理特征提取分割能力作为后端服务,供客户调用模型进行二次开发;
  ③ 针对个人用户提供鸿蒙APP自测、查看历史诊疗记录等功能。
  本项目采用MaskRCNN算法,在ModelArts平台对皮肤病图像训练,将训练好的模型部署到华为云ECS服务器中。

4. 产品功能

  通过皮肤镜采集得到的皮肤镜图片,检测是否为恶性皮肤肿瘤,是哪种恶性皮肤肿瘤。
  本检测系统首先采集病灶区域图像信息,随后对图像进行预处理,即去毛和滤波等处理,接着采用对比度调整、移动裁剪和颜色平衡调整等方法进行数据增强,随后进行模型的训练、封装,模型部署后,通过采集患者的信息,可以检测相应的图片及反馈相应的分级检测结果,如图所示:
#物联网征文#基于实例分割的恶性皮肤肿瘤检测系统-鸿蒙开发者社区

登录界面

hml源码:

<div class="container">

    <image src="../../common/image_st/logo.png" class="image-mode" ></image>

    <div class="content">
        <input id="id" class="input" type="number" value="{{id}}" maxlength="20" enterkeytype="next"
               placeholder="手机号/邮箱/账号" onchange="idChange" >
        </input>
        <input id="password" class="input" type="password" value="{{password}}" maxlength="20" enterkeytype="done"
                placeholder="请输入密码" onchange="pswChange">
        </input>

    <!--        <div>-->
    <!--            <button class="button" type="capsule" value="登录" onclick="login"></button>-->
    <!--            <button class="button" type="capsule" value="注册" onclick="register"></button>-->
    <!--        </div>-->
        <div class="div_button">
            <div class="login_button"  onclick="login">
                <text class="div_login_button_text">
                    登录
                </text>
            </div>
            <div class="register_button" onclick="register">
                <text class="div_register_button_text">
                    注册账号
                </text>
            </div>
        </div>

    </div>

    <div class="problem_privacy">
        <button class="problem" type="text" value="帮助"
                @click="clickfun('help')"></button>
        <button class="privacy" type="text" value="隐私声明"
                @click="clickfun('privacy statement')"></button>
    </div>
</div>

css源码:

.container {
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
}

.image-mode{
    margin-top: 100px;
    margin-bottom: 30px;
    width: 80%;
/*    object-fit: cover;*/
    height: 190px;
}

.title {
    margin-top: 10px;
    font-size: 30px;
    color: #1216D8;
}

/* 输入框 */
.content {
    margin-left: 10%;
    margin-right: 10%;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.input {
    placeholder-color: gray;
    margin-top: 20px;
    justify-content: center;
    align-items: center;
}

/* 对class#EB0F54n"的组件设置样式 */
.button {
    width: 100px;
    height: 50px;
    background-color: #4c5cf1;
    font-size: 20px;
    text-color: #FFFFFF;
    margin: 20px;
    margin-top: 10px;
}


.problem_privacy {
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    margin-top: 30%;
}

.div_button {
/*    width: 90%;*/
    flex-direction: column;  /* 按照列排 */
    align-items: center;  /* 在X轴方向上居中 */
    top:50px;
}

.div_login_button_text {
    left: 250px;
    top: 25px;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    font-size: 40px;
    font-weight: normal;
    color: #FFFFFF;
}

.div_register_button_text {
    left: 210px;
    top: 25px;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    font-size: 40px;
    font-weight: normal;
    color: #5868E8;
}

/* 对class#EB0F54n"的组件设置样式 */
.login_button {
    border-radius: 50px;
    width: 100%;
    height: 100px;
    background-color: #5868E8;
    margin-bottom: 16px;
}

/* 对class#EB0F54n"的组件设置样式 */
.register_button {
    border-radius: 50px;
    width: 100%;
    height: 100px;
    background-color: #e0dad4;
}

Js源码:

import router from '@system.router';

export default {
    login() {
        router.push ({
            uri:'pages/first/first', // 跳转到注册页面
        })
    },
    register(){
      router.push({
          uri:'pages/register/register',
      })
    },
    data: {
        title: "",
    },
}

注册界面:

hml源码:

<div class="container">
    <image src="../../common/image_st/logo.png" class="image-mode" ></image>

<!-- 手机号和密码 -->
    <div class ="input-container">
        <input class="input-text" type="number" placeholder="请输入手机号" onchange="getPhone"></input>
    </div>

    <div class ="input-container">
        <input class="input-text" type="password" placeholder="请输入密码" onchange="getPsw"></input>
    </div>

    <div class ="input-container">
        <input class="input-text" type="text" placeholder="请输入姓名" onchange="getName"></input>
    </div>

    <div class ="input-container">
        <input class="input-text" type="number" placeholder="请输入身份证号" onchange="getIdNumber"></input>
    </div>
<!--    <div class ="input-container">-->
<!--        <input class="input-text" type="number" placeholder="短信验证码" onchange="getName"></input>-->
<!--        <button type="capsule" value="获取验证码" class="idbtn">-->
<!--        </button>-->
<!--    </div>-->

<!-- gender -->
    <div class ="item-container1">
        <text class="item-title">性别</text>
        <div>
            <label target="radio1" style="font-size: 40px;">男:</label>
            <input id="radio1" type="radio" name="radio" value="male" onchange="getMaleGender" checked="true"></input>
            <label target="radio2" style="font-size: 40px;">女:</label>
            <input id="radio2" type="radio" name="radio" value="female" onchange="getFemaleGender"></input>
        </div>
    </div>

<!-- 生日 -->
    <div class="item-container2">
        <text class="item-title">生日</text>
        <div class="item-content">
            <picker type="date" end="2021-10-01" selected="1990-01-01" value="{{date}}" onchange="getDate"></picker>
        </div>
    </div>

<!-- area -->
    <div class ="item-container3">
        <text class="item-title">地区</text>
        <select class="select" onchange="getArea">
            <option value="亚洲" selected="true">亚洲</option>
            <option value="欧洲">欧洲</option>
            <option value="美洲">美洲</option>
            <option value="非洲">非洲</option>
            <option value="大洋洲">大洋洲</option>
        </select>
    </div>

    <div class="content1_1">
        <div class="button" onclick="onRegister">
            <text class="button_text">注册</text>
        </div>
        <div class="button" onclick="last">
            <text class="button_text">返回</text>
        </div>
    </div>
    <dialog class="sureDialog" id="hintDialog">
        <div class="dialog-div">
            <text class="text">确定注册?</text>
            <div class="dialog-div">
                <button type="text" value="确定" onclick="sethintDialog" class="btn-txt"></button>
            </div>
        </div>
    </dialog>

</div>

css源码:

@import "../../common/css/common.css";
.container {
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
}

.page-title-wrap {
    padding-top: 30px;
    justify-content: center;
}

.image-mode{
    margin-end: 50px;
    margin-top: 50px;
    margin-bottom: 30px;
    width: 80%;
    object-fit: cover;
}

.input-container{
    justify-content: center;
    margin-bottom: 30px;
}
.input-text {
    placeholder-color: gray;
    margin-left: 30px;
    margin-right: 30px;
    height: 100px;
}
.idbtn{
    width: 200fp;
    margin-right: 30px;
    font-size: 15px;
    background-color: #2d6dea;
}
.item-container {
    margin-left: 30px;
    margin-bottom: 20px;
}
.item-container1 {
    margin-left: -130px;
    margin-bottom: 20px;
}
.item-container2 {
    margin-left: -160px;
    margin-bottom: 20px;
}
.item-container3 {
    margin-left: -190px;
    margin-bottom: 20px;
}


.item-title {
    font-size: 40px;
    padding-left: 30px;
    padding-right: 20px;
    color: #aaaaaa;
    text-align: left;
}

.item-content {
    width: 300px;
    height: 60px;
    border-radius: 30px;
    background-color: aliceblue;
    justify-content: center;
    text-align: left;
}


.select{
    text-align: left;
}


.content1_1 {
    margin-top: 10px;
    justify-content: center;
    align-items: center;
}

/* 对class#EB0F54n"的组件设置样式 */
.button {
    width: 200px;
    height: 100px;
    background-color: #5768e4;
    font-size: 20px;
    text-color: #FFFFFF;
    margin: 10px;
    border-radius: 50px;
}

.button_text {
    left: 60px;
    top: 27px;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    font-size: 40px;
    font-weight: normal;
    color: #FFFFFF;
}

.sureDialog{
    height: 30%;
    width: 80%;
    align-content: center;
}

.dialog-div{
    flex-direction: column;
    align-items: center;
    align-content: center;
    justify-content: center;
    margin-bottom: 20px;
}

5.项目创新点

恶性皮肤肿瘤图像预处理

  本系统采用调用OpenCV库中的函数,对图像进行预处理,能够有效减少毛孔、细小的绒毛、头发等影响,能够更好的对特征进行特征的提取,能够有效地提高后续模型训练识别的准确度,如图5.1所示。
#物联网征文#基于实例分割的恶性皮肤肿瘤检测系统-鸿蒙开发者社区
::: hljs-center

图5.1 预处理结果展示

:::

ModelArts进行恶性皮肤肿瘤的模型训练

  我们使用ResNet50进行特征提取和 ModelArts框架的周边产品对模型进行封装、并且申请模型部署的华为云ECS服务器,服务端采用ECS云服务器进行数据处理和模型预测。云数据库RDS来存储数据保护用户的数据隐私;并转存至华为OBS来进行数据备份。使得我们的模型不受制于芯片框架的限制,能够在各平台上直接调用运行,大大提升了我们模型搭载使用的方便程度,使得恶性皮肤肿瘤的分类诊断更为便捷和方便。

深度学习+特色硬件——恶性皮肤肿瘤识别

  我们将恶性皮肤肿瘤的诊断过程中加入深度学习的部分,随后结合我们的特色硬件(如图5.2、图5.3所示),推出了我们的产品。为恶性皮肤肿瘤的诊断提供识别依据,检测后系统会显示反馈数据,医院医师、家庭医生和患者可以快速的获取诊治意见,减少了医疗资源紧张的问题,增加了社区医院的医疗优势。
::: hljs-center

#物联网征文#基于实例分割的恶性皮肤肿瘤检测系统-鸿蒙开发者社区 #物联网征文#基于实例分割的恶性皮肤肿瘤检测系统-鸿蒙开发者社区
图5.2 去毛修复 图5.3 检测结果

:::

【本文正在参加物联网有奖征文活动】,活动链接:https://ost.51cto.com/posts/14758

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2022-8-30 19:41:40修改
2
收藏
回复
举报
回复
    相关推荐