一、为什么需要 AI 医疗问诊系统?传统医疗的痛点与需求

1.1 传统医疗的核心痛点

调研医疗服务场景,发现患者与医生面临明显效率与体验问题,制约健康服务普及:

  • 患者痛点
    • 问诊不便:轻微症状(如 “感冒咳嗽”)需线下挂号,往返医院 + 等待耗时 2-3 小时,性价比低;
    • 信息不对称:不清楚附近医院科室分布、医生擅长领域,盲目选择导致误诊风险;
    • 流程繁琐:预约挂号需现场排队或抢号,药品购买需凭处方线下取药,特殊人群(老人、残疾人)操作困难;
  • 医生痛点
    • 重复工作多:大量轻微症状患者占用接诊时间,医生需反复解答相似问题(如 “如何缓解头痛”);
    • 管理低效:手动记录患者就诊信息,跟踪病情需翻查纸质病历,耗时且易出错;
    • 沟通成本高:患者线下复诊才能反馈病情变化,远程咨询缺乏便捷渠道。

1.2 系统的核心价值

系统通过 “AI 辅助诊断 + 全流程服务链” 解决痛点,为患者与医生创造双向价值:

  • 对患者
    • 足不出户自诊:通过 App 填写症状(如 “发烧、干咳”),AI 模型 30 秒生成诊断报告(含患病概率、建议),小病无需跑医院;
    • 全流程线上化:在线预约挂号(选择医院 / 科室 / 时间)、购买药品(支持配送)、查看健康资讯,流程从 3 小时缩短至 30 分钟;
    • 精准导航:整合百度地图 API,一键查看医院位置、规划路线,避免迷路;
  • 对医生
    • AI 辅助诊断:系统自动分析患者症状,生成初步诊断建议,医生可聚焦复杂病例,接诊效率提升 50%;
    • 高效管理:在线查看患者就诊记录、跟踪病情变化,无需手动整理病历,管理时间减少 60%;
    • 便捷沟通:通过 App 与患者实时交流(文字 + 图片),解答疑问、调整治疗方案,减少线下复诊次数。

二、用什么技术实现?适配医疗场景的技术选型

系统采用 “轻量化、高兼容” 技术栈,围绕 “易操作、数据安全、实时性” 展开,确保患者(尤其是中老年用户)轻松使用,医生高效管理,具体如下:

技术模块具体选择作用说明
App 端开发Android Studio(Bottom Navigation 模板)实现简洁交互界面(5 大功能模块:首页、诊断、医院、药品、个人中心),适配 Android 7.0 及以上机型,支持老人模式(字体放大)
机器学习模型TensorFlow 2.x(逻辑回归算法)训练 AI 诊断模型,输入患者症状(如 “发烧、年龄、性别”),输出患病概率(如 “新冠肺炎概率 15%”),模型体积小(<10MB),适配移动端
后端与数据库Bmob 云数据库存储用户信息(患者 / 医生)、诊断记录、预约数据、药品信息,支持数据加密(符合医疗隐私要求),无需自建服务器
第三方集成百度地图 API + 邮件服务百度地图实现医院导航(经纬度定位、路线规划),邮件服务用于密码重置(发送验证链接)
开发工具Android Studio+PyCharm+NavicatAndroid Studio 开发 App,PyCharm 训练 TensorFlow 模型,Navicat 管理 Bmob 数据

三、系统能做什么?双角色功能设计

系统按 “患者(App 端)、医生(App 端)、管理员(Bmob 后台)” 划分权限,覆盖 “诊断 - 预约 - 购药 - 管理” 全流程,核心功能如下:

3.1 患者角色:便捷获取健康服务

(1)AI 自主诊断
  • 功能描述:患者填写个人信息(性别、年龄)与症状(如 “发烧 38.5℃、干咳”),系统调用 TensorFlow 模型分析,生成诊断报告(含患病概率、建议:“居家观察 / 及时就医”);
  • 关键细节
    • 症状引导:提供症状选择列表(避免输入错误),如 “呼吸道症状” 下分 “咳嗽、咽痛、呼吸困难”;
    • 风险提示:若模型判定 “高风险疾病”(如 “新冠肺炎概率 > 50%”),弹窗提醒 “立即前往定点医院”,并显示附近医院列表。
(2)医院服务
  • 预约挂号:按 “地区、科室(内科 / 外科)” 筛选医院,选择医生与就诊时间,提交后生成预约凭证(含医院地址、就诊序号);
  • 医院导航:点击预约记录中的 “导航” 按钮,调用百度地图显示医院位置,支持 “公交 / 驾车 / 步行” 路线规划;
  • 急救通道:首页设置 “急救电话” 快捷按钮,点击直接拨打 120,同步显示附近急救中心位置。
(3)药品购买与健康管理
  • 药品购买:按 “疾病(感冒 / 高血压)” 或 “药品名称” 搜索,查看药品详情(功效、剂量、禁忌),支持加入购物车结算(对接第三方配送);
  • 健康记录:自动保存诊断报告、预约记录、购药订单,支持按 “时间” 筛选,方便跟踪健康变化;
  • 健康资讯:首页推送健康文章(如 “秋季预防感冒技巧”),按 “疾病类型” 分类,支持收藏阅读。

3.2 医生角色:高效开展医疗工作

(1)AI 辅助诊断
  • 功能描述:医生输入患者症状(可批量导入),系统生成初步诊断建议,医生可调整后确认,减少重复分析时间;
  • 关键细节:支持查看患者历史诊断记录,对比症状变化(如 “上次咳嗽无痰,本次有痰”),辅助判断病情进展。
(2)患者管理与沟通
  • 就诊管理:查看预约患者列表(含姓名、症状、预约时间),标记 “已接诊 / 待接诊”,自动生成就诊记录模板(医生补充细节);
  • 医患交流:通过 App 与患者实时沟通(文字 + 图片),解答疑问(如 “用药剂量”),发送复诊提醒(如 “3 天后复查血压”)。

3.3 管理员角色(Bmob 后台):数据管控与权限管理

  • 用户管理:查看患者 / 医生注册信息,禁用违规账号(如 “虚假预约”);
  • 数据维护:更新医院信息(新增科室、调整医生出诊时间)、药品库存(下架过期药品);
  • 权限设置:为医生分配 “接诊范围”(如 “内科医生仅查看内科预约”),保障数据安全。

四、系统如何实现?核心模块开发与技术细节

4.1 AI 诊断模型:基于 TensorFlow 的逻辑回归实现

(1)数据来源与预处理
  • 数据集:采用 Kaggle 开源医疗数据集(https://www.kaggle.com/iamhungundji/covid19-symptoms-checker),含 19.8 万条记录,每条含 “性别、年龄、症状(发烧 / 干咳等)、诊断结果(是否感染新冠肺炎)”;
  • 预处理步骤
    1. 数据清洗:删除缺失值(如 “症状未填写”)、异常值(如 “年龄 > 150 岁”);
    2. 特征编码:将分类特征(如 “性别:男 = 1,女 = 2”)转为数值,便于模型计算;
    3. 数据划分:按 7:3 比例分为训练集(13.86 万条)与测试集(5.94 万条);
    4. 归一化:将特征值缩放到 [0,1] 区间(公式:xnorm​=xmax​−xmin​x−xmin​​),提升模型收敛速度。
(2)模型训练代码(Python+TensorFlow)
import tensorflow as tf
import numpy as np
from sklearn.model_selection import train_test_split

# 1. 加载数据(假设已预处理为x_data特征,y_data标签)
x_data = np.load("x_data.npy")  # 形状:(198000,7),7个特征(性别、年龄、5个症状)
y_data = np.load("y_data.npy")  # 形状:(198000,1),标签0=未感染,1=感染

# 2. 划分训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.3, random_state=42)

# 3. 定义模型(逻辑回归)
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, activation='sigmoid', input_shape=(7,))  # 输入7个特征,输出患病概率
])

# 4. 编译模型(优化器:梯度下降,损失函数:二元交叉熵,评估指标:准确率)
model.compile(
    optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
    loss=tf.keras.losses.BinaryCrossentropy(),
    metrics=['accuracy']
)

# 5. 训练模型(200轮迭代,批量大小64)
history = model.fit(
    x_train, y_train,
    batch_size=64,
    epochs=200,
    validation_data=(x_test, y_test)
)

# 6. 保存模型(用于Android App调用)
model.save("medical_diagnosis_model.h5")

# 7. 评估模型(测试集准确率)
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"测试集准确率:{test_acc:.4f}")  # 输出约92.5%
(3)模型部署到 Android App
  • 将训练好的medical_diagnosis_model.h5转为 TensorFlow Lite 格式(.tflite),减小体积(从 10MB 压缩至 2MB);
  • App 端通过TensorFlowLite.Interpreter加载模型,输入患者症状特征,输出患病概率,示例代码:
// 加载TFLite模型
Interpreter interpreter = new Interpreter(loadModelFile(context, "medical_model.tflite"));

// 准备输入数据(患者特征:性别1、年龄25、发烧1、干咳0、咽痛1、疲惫1、呼吸困难0)
float[][] input = {{1.0f, 25.0f/120.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f}};  // 年龄归一化(最大120岁)

// 分配输出缓冲区(1个输出:患病概率)
float[][] output = new float[1][1];

// 运行模型
interpreter.run(input, output);

// 获取结果(如output[0][0]=0.15,即患病概率15%)
float diseaseProb = output[0][0];
String result = diseaseProb < 0.3 ? "低风险,建议居家观察" : "高风险,立即就医";

4.2 核心功能实现:医院预约与药品购买

(1)医院预约(Android 端代码)
// 1. 选择医院后,跳转至科室选择
hospitalListView.setOnItemClickListener((parent, view, position, id) -> {
    Hospital hospital = hospitalList.get(position);
    Intent intent = new Intent(HospitalListActivity.this, DepartmentActivity.class);
    intent.putExtra("hospitalId", hospital.getId());  // 传递医院ID
    intent.putExtra("hospitalName", hospital.getName());  // 传递医院名称
    startActivity(intent);
});

// 2. 选择科室与日期,提交预约
confirmBtn.setOnClickListener(v -> {
    String department = departmentSpinner.getSelectedItem().toString();
    String date = datePicker.getText().toString();  // 如"2024-10-15"
    
    // 构造预约对象
    Reservation reservation = new Reservation();
    reservation.setUserId(BmobUser.getCurrentUser(User.class).getObjectId());
    reservation.setHospitalId(hospitalId);
    reservation.setDepartment(department);
    reservation.setDate(date);
    reservation.setStatus("待接诊");  // 初始状态
    
    // 保存到Bmob云数据库
    reservation.save(new SaveListener<String>() {
        @Override
        public void done(String objectId, BmobException e) {
            if (e == null) {
                Toast.makeText(ReservationActivity.this, "预约成功!", Toast.LENGTH_SHORT).show();
                finish();  // 返回上一页
            } else {
                Toast.makeText(ReservationActivity.this, "预约失败:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });
});
(2)药品购买(Android 端代码)
// 1. 加入购物车
addCartBtn.setOnClickListener(v -> {
    Medicine medicine = medicineList.get(position);
    CartItem cartItem = new CartItem();
    cartItem.setMedicineId(medicine.getId());
    cartItem.setMedicineName(medicine.getName());
    cartItem.setPrice(medicine.getPrice());
    cartItem.setUserId(BmobUser.getCurrentUser(User.class).getObjectId());
    
    // 保存到购物车表
    cartItem.save(new SaveListener<String>() {
        @Override
        public void done(String objectId, BmobException e) {
            if (e == null) {
                Toast.makeText(MedicineDetailActivity.this, "已加入购物车", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MedicineDetailActivity.this, "添加失败:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });
});

// 2. 结算生成订单
checkoutBtn.setOnClickListener(v -> {
    // 查询购物车商品
    BmobQuery<CartItem> query = new BmobQuery<>();
    query.addWhereEqualTo("userId", BmobUser.getCurrentUser(User.class).getObjectId());
    query.findObjects(new FindListener<CartItem>() {
        @Override
        public void done(List<CartItem> list, BmobException e) {
            if (e == null && !list.isEmpty()) {
                // 计算总金额
                double total = 0;
                for (CartItem item : list) {
                    total += item.getPrice() * item.getCount();
                }
                
                // 生成订单
                Order order = new Order();
                order.setUserId(BmobUser.getCurrentUser(User.class).getObjectId());
                order.setTotalPrice(total);
                order.setStatus("待支付");
                order.save(new SaveListener<String>() {
                    @Override
                    public void done(String objectId, BmobException e) {
                        if (e == null) {
                            Toast.makeText(CartActivity.this, "订单生成成功,可前往支付", Toast.LENGTH_SHORT).show();
                            // 清空购物车
                            deleteCartItems(list);
                        }
                    }
                });
            }
        }
    });
});

4.3 数据库设计:Bmob 核心表结构

系统使用 Bmob 云数据库,设计 6 张核心表,覆盖 “用户 - 诊断 - 预约 - 药品” 全流程,确保数据关联清晰、隐私安全:

表名核心字段作用说明
用户表(User)objectId(主键)、username(账号)、password(加密密码)、role(角色:0 = 患者 / 1 = 医生)、phone(电话)、email(邮箱)存储用户账号信息,区分角色权限
诊断记录表(Diagnosis)objectId(主键)、userId(关联用户)、symptoms(症状 JSON)、result(诊断结果)、probability(患病概率)、createTime(时间)保存 AI 诊断记录,支持历史查询
医院表(Hospital)objectId(主键)、name(医院名称)、city(城市)、address(地址)、tel(电话)、latitude(纬度)、longitude(经度)存储医院基础信息,用于导航
预约表(Reservation)objectId(主键)、userId(关联用户)、hospitalId(关联医院)、department(科室)、date(预约日期)、status(状态:待接诊 / 已完成)存储预约记录,医生可查看
药品表(Medicine)objectId(主键)、name(药品名称)、price(价格)、function(功效)、taboo(禁忌)、stock(库存)、producer(生产商)存储药品信息,支持购买
购物车表(CartItem)objectId(主键)、userId(关联用户)、medicineId(关联药品)、count(数量)、addTime(添加时间)存储用户购物车商品,用于结算

4.3 系统运行截图

五、系统测试与优化:确保医疗场景的稳定与安全

5.1 关键测试用例

为确保系统适配医疗服务场景,针对 “AI 诊断准确性、预约流程、数据安全” 等核心功能设计测试用例,重点验证 “功能完整性、结果可靠性、隐私保护”:

测试功能测试步骤预期结果实际结果
AI 诊断准确性1. 输入 “发烧 38℃、干咳、25 岁男性”→2. 对比医生诊断模型输出 “新冠肺炎概率 12%,建议居家观察”,与医生结论一致符合预期,准确率 92.5%
医院预约流程1. 选择 “北京协和医院 - 内科”→2. 预约 10 月 15 日→3. 查看预约记录预约成功,记录显示 “待接诊”,医院可查新增预约符合预期,流程通畅
数据安全测试1. 尝试修改他人预约记录→2. 查看加密字段(如 password)无权限修改,加密字段显示为密文符合预期,权限管控生效
多机型兼容1. Android 7.0 手机诊断→2. Android 13 平板购药→3. 老人模式(字体放大)所有设备功能正常,界面无错乱符合预期,适配主流机型

5.2 常见问题与优化

  1. 问题 1:AI 模型在复杂症状下准确率低原因:数据集仅含新冠肺炎症状,对其他疾病(如 “流感、过敏”)覆盖不足;解决:扩充数据集(加入流感、高血压等症状数据),改用多分类模型(输出多种疾病概率),准确率提升至 94%;
  2. 问题 2:医院预约无日期冲突校验原因:未判断 “同一医生同一时段是否已约满”,易出现重复预约;解决:预约时查询该医生该时段已预约人数,若达上限(如 “每时段 5 人”),提示 “该时段已满,请选择其他时间”;
  3. 问题 3:老年用户操作困难原因:界面字体小、按钮密集,老人看不清;解决:新增 “老人模式”(设置中开启),字体放大 200%,简化首页(仅保留 “诊断、预约、电话” 核心功能)。

六、总结与未来计划

6.1 项目成果

这款 AI 医疗问诊系统已实现核心目标,达成 “患者便捷自诊、医生高效管理” 的设计初衷:

  • 效率提升:患者问诊时间从 3 小时缩短至 30 分钟,医生接诊效率提升 50%,预约管理时间减少 60%;
  • 体验优化:AI 诊断覆盖常见小病(感冒、流感等),准确率 92.5%,减少不必要线下就医;全流程线上化,特殊人群(老人)操作难度降低;
  • 安全合规:数据加密存储(符合医疗隐私要求),权限管控严格,杜绝信息泄露。

6.2 未来优化方向

  1. 功能扩展
    • 多疾病诊断:扩充模型支持 “高血压、糖尿病” 等慢性病初步诊断,提供用药提醒(如 “每日 8 点服药”);
    • 医保对接:集成医保支付接口,药品购买可直接医保结算,无需线下报销;
    • 远程问诊:支持医生视频接诊,实时查看患者症状(如 “皮肤红疹”),提升诊断准确性;
  2. 技术升级
    • 模型轻量化:将 TFLite 模型压缩至 1MB 以内,适配低配置手机(如老年机);
    • 云同步:实现多设备数据同步(如 “手机诊断,平板查看报告”);
  3. 运营优化
    • 医生认证:新增医生资质审核(上传执业证书),保障问诊专业性;
    • 健康档案:为患者建立电子健康档案(含诊断、用药、体检记录),医生可一键查看,减少重复问诊。

七、资料获取

论文全文档(含完整需求分析、模型训练代码、测试报告,可直接用于本科毕设答辩);

核心源码(含 Android App 端、TensorFlow 模型、Bmob 数据库脚本);

运行教程(Android Studio 配置、模型部署步骤、Bmob 后台使用指南)。

👉 获取方式:关注相关技术社区,查看对应资源分享,或联系作者获取完整资料包!

如果本文对你的 AI 医疗系统开发或本科毕设有帮助,欢迎点赞 + 收藏 + 关注,后续会持续分享 Android 与机器学习开发实战技巧!

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐