【AI加持】基于PyQt+YOLO+DeepSeek的疟原虫检测系统(详细介绍)

文章目录


本篇博客可能会引起不适,请谨慎阅读!


本系统功能强大!支持对输入数据源的疟原虫情况进行检测,支持多种数据数据源输入并且接入了AI实现了对当前分析结果的评估,欢迎了解!

@项目名称:基于PyQt+YOLO+DeepSeek的的疟原虫检测系统

@仓库名称:yolov8-malaria-detect

@作者:懷淰メ

@主页地址:https://blog.csdn.net/a1397852386

@定制:A1397852386

@开发日期:2026年5月

关键字:#疟原虫检测系统 #PyQt5 #YOLOv8 #DeepSeek #计算机视觉 #目标检测 #医疗影像分析 #疟疾诊断 #显微镜图像分析 #人工智能 #深度学习 #实时检测 #图像检测 #视频检测 #摄像头检测 #智能分析 #检测结果可视化 #热力图分析 #模型评估 #mAP #Precision #Recall #F1Score #混淆矩阵 #数据集构建 #数据标注 #VOC转YOLO #XML转TXT #数据集划分 #模型训练 #Ultralytics #PyTorch #SQLite3 #用户管理 #检测历史管理 #QThread多线程 #桌面应用开发 #GUI系统 #PyCharm #Windows11 #目标检测平台 #AI辅助诊断 #病理研究 #科研分析 #医学AI #自动化检测 #检测结果导出 #Excel导出 #PDF报告 #系统架构 #工程项目 #Python开发 #YOLO项目 #医疗检测系统 #智能诊断平台 #深度学习应用 #数据可视化 #边缘部署 #实时推理 #模型部署 #软件工程 #AI医疗 #疾病检测 #血涂片分析

一.前言

疟疾是一种由疟原虫引起的严重传染病,主要通过蚊子传播,对全球公共卫生构成重大威胁。据世界卫生组织统计,尤其是在非洲和东南亚,疟疾每年导致大量儿童和成人死亡。传统的疟原虫检测主要依赖于显微镜下人工观察血片,这一方法虽然准确,但存在明显的局限性:操作复杂、依赖经验丰富的医生、耗时长且容易受到主观判断影响。随着人工智能技术的发展,计算机视觉和深度学习开始在医疗影像领域发挥重要作用。YOLO(You Only Look Once)作为一种高效的目标检测算法,可以在保证精度的同时实现快速检测。与此同时,DeepSeek等图像检索和特征匹配技术的发展,为在复杂图像中快速定位和识别特定微生物提供了新的方法。这些技术的结合,为疟原虫自动检测提供了技术基础。

二.核心技术&知识

在这章我将要介绍本系统的核心技术。

1.PyQt5

PyQt5 是一套用于创建跨平台桌面应用程序的 Python GUI 工具包,它是 Qt 应用框架的 Python 绑定。通过 PyQt5,开发者可以使用 Python 编写具有现代图形界面的应用程序,支持丰富的控件、信号与槽机制、窗口管理、事件处理等功能。它兼容主流操作系统(如 Windows、macOS 和 Linux),适用于开发各种规模的桌面软件,常与 Qt Designer 配合使用以加快开发效率。

2.YOLOv8

YOLOv8(You Only Look Once version 8)是由 Ultralytics 推出的最新一代实时目标检测模型,属于 YOLO 系列的改进版本。相比前代模型,YOLOv8 在精度、速度和灵活性上都有显著提升,支持目标检测、图像分割、姿态估计等多任务处理。它采用了更加高效的网络结构和训练策略,并提供开箱即用的 Python 接口和命令行工具,适用于边缘设备和云端部署,广泛应用于安防监控、自动驾驶、工业检测等场景。

3.DeepSeek

DeepSeek是由深度求索公司开发的AI大模型助手,作为纯文本模型,我擅长自然语言处理、文档分析和智能对话。当与YOLO(You Only Look Once)实时目标检测系统结合时,可以形成强大的多模态应用架构------YOLO系统负责实时视觉识别和目标检测,快速准确地识别图像或视频流中的物体;而我则对YOLO检测到的结果进行深度语义分析和上下文理解,提供物体属性的详细解读、场景描述、行为分析以及决策建议。这种结合使得计算机视觉的"看到"与AI的"理解"完美融合,可广泛应用于智能监控、自动驾驶、工业质检等领域,实现从视觉感知到智能决策的完整闭环。

4.Sqlite3

本系统使用Sqlite3进行数据的存储与管理。

SQLite3是一种轻量级的嵌入式关系型数据库管理系统,广泛应用于桌面软件、移动应用以及各类嵌入式设备中。与传统的客户端-服务器数据库(如MySQL、PostgreSQL)不同,SQLite3无需独立的数据库服务器进程,整个数据库以单一文件形式存储在本地,应用程序可直接通过库文件进行读写操作。这种架构使其具有部署简单、占用资源少、跨平台性强等显著优势。SQLite3遵循ACID事务特性,能够保证数据的一致性与可靠性,同时支持标准SQL语法,包括表的创建、查询、索引、触发器等常见功能,能够满足中小规模数据管理需求。在性能方面,SQLite3在读操作上表现高效,并通过锁机制实现多线程环境下的基本并发控制。由于其零配置特性和稳定性,SQLite3被广泛集成于Android、iOS等操作系统中,也常用于缓存数据存储、本地日志管理以及离线数据处理等场景。总体而言,SQLite3以其简洁高效的设计理念,在轻量级数据管理领域占据了重要地位。

5.多线程

QThread 是 PyQt5 提供的线程类,主要用于在图形界面程序中安全、高效地执行耗时任务,从而避免主线程阻塞导致界面卡顿或无响应的问题。在典型的GUI应用中,界面渲染与用户交互通常运行在主线程,一旦在该线程中直接执行诸如数据处理、深度学习模型推理、视频流分析或文件读写等耗时操作,就容易造成界面冻结,严重影响用户体验。QThread 的引入正是为了解决这一问题。

通过 QThread,开发者可以将这些计算密集型或IO密集型任务封装到子线程中独立运行,使主线程专注于界面更新与交互响应。同时,QThread 提供了基于信号与槽机制的线程间通信方式,能够在不同线程之间安全地传递数据与状态信息。例如,子线程在完成检测或处理任务后,可以通过发送信号将结果传递给主线程,由主线程负责更新界面控件,从而避免直接跨线程操作UI带来的风险。

此外,QThread 还支持线程的生命周期管理,包括启动、暂停、退出以及资源回收等,使得多线程程序结构更加清晰可控。合理使用 QThread 不仅可以显著提升应用程序的响应速度和运行效率,还能增强系统的稳定性与扩展能力。在涉及实时数据处理、视频监控或智能分析等复杂桌面应用开发场景中,QThread 已成为不可或缺的重要工具。

6.安全帽

疟原虫是一种单细胞寄生原生动物,是引起疟疾的病原体。它主要通过雌性按蚊(疟蚊)叮咬传播给人类。疟原虫的生活史复杂,涉及人和蚊两个宿主。感染人体的疟原虫主要有五种:间日疟原虫、恶性疟原虫、三日疟原虫、卵形疟原虫以及诺氏疟原虫,其中恶性疟原虫危害最大,可导致重症疟疾甚至死亡。当被感染蚊虫叮咬后,疟原虫子孢子随蚊虫唾液进入人体血液,随后侵入肝细胞进行无性繁殖,繁殖成熟后释放入血并侵入红细胞,在红细胞内反复增殖,破坏红细胞,引发周期性寒战、高热、出汗等典型疟疾症状。疟原虫的快速检测与规范治疗对控制疾病传播和降低死亡率至关重要。

7.疟原虫检测的意义

1. 医院临床显微镜检验场景(核心应用场景)

在医院检验科或临床实验室中,疟原虫检测通常依赖血涂片显微镜检查,由检验技师逐帧观察红细胞样本中是否存在寄生虫结构。这一过程高度依赖人工经验,且在高负载情况下容易出现漏检或误判。本项目基于 PyQt + YOLO + DeepSeek 的系统,可以直接接入显微镜图像采集设备,对血涂片图像进行自动分析。YOLO 模型负责在整张图像中快速定位疑似寄生虫区域,实现"先粗筛后精检"的思路,而 DeepSeek 可进一步对候选区域进行特征匹配与相似性分析,辅助提高分类置信度。医生只需在 PyQt 图形界面中导入或实时查看样本图像,即可获得标注结果(如 bounding box、置信度、类别信息),大幅减少逐片人工扫描的时间成本。

在实际应用中,该系统可以作为"辅助诊断工具"嵌入现有检验流程,而不是替代医生判断。例如在高峰期(如疟疾流行季节),实验室每天可能需要处理大量血片样本,传统方法往往需要数分钟甚至十几分钟分析一张样本,而系统可以在秒级完成检测并给出初筛结果。检验人员只需对系统标记的高风险区域进行复核即可,从而将工作重心从"全图扫描"转移到"重点确认"。这不仅显著提升效率,也降低了由于疲劳造成的误判概率。此外,该系统还可以保存检测记录,便于后续病例追踪与统计分析,为医院质量控制与科研提供数据基础。

2. 疟疾流行地区基层医疗与移动诊断场景

在一些疟疾高发但医疗资源相对匮乏的地区,如部分东南亚、非洲或偏远乡村医疗站点,专业检验人员和高端实验设备往往严重不足,导致疟疾诊断依赖经验较少的基层医护人员。本项目可以部署在普通计算机甚至边缘设备上,通过 PyQt 提供简洁操作界面,使非专业人员也能完成基础检测流程。只需采集血涂片图像或连接便携式显微镜摄像头,系统即可自动进行 YOLO 推理,快速输出是否存在疟原虫的初步判断结果,从而实现"低门槛筛查"。

该场景的核心价值在于"降低专业依赖"和"提升覆盖率"。在传统模式下,一个医疗点如果没有经验丰富的检验师,可能需要将样本送往上级医院,导致诊断延迟数天甚至更久,而疟疾具有病情发展迅速的特点,延迟诊断会直接影响治疗效果。本系统可以在本地完成快速筛查,使疑似阳性病例立即进入治疗流程,减少等待时间。同时,DeepSeek 模块可以作为辅助知识库或相似病例比对工具,为基层医生提供参考解释,例如"该区域与典型恶性疟原虫形态相似度较高",从而提升决策信心。整体来看,该系统具备明显的公共卫生价值,尤其适用于医疗基础设施薄弱地区。

3. 实验室科研与病理学研究场景

在高校、科研机构或疾病研究中心中,疟原虫的形态学研究、生命周期分析以及药物实验通常需要大量显微图像或视频数据。研究人员需要对不同阶段的寄生虫形态进行标注与统计,例如环状体、滋养体、裂殖体等不同形态分类,这一过程极为耗时。本项目可以作为一个自动化图像分析平台,通过 YOLO 模型进行目标检测与初步分类,再结合 DeepSeek 对相似结构进行特征检索与聚类分析,从而帮助研究人员快速整理大规模图像数据集。

在具体使用中,科研人员可以批量导入实验图像或视频序列,系统自动完成标注并输出结构化数据(如检测数量、位置分布、类别比例等),并可通过 PyQt 界面进行可视化展示与人工修正。这种"AI初筛 + 人工校正"的模式可以显著提升标注效率,减少研究中最耗时的数据预处理环节。此外,该系统还能用于药物实验中的疗效评估,例如在药物处理前后对比疟原虫数量变化,从而量化药物抑制效果。通过长期积累数据,还可以为后续构建更高精度模型提供训练样本,形成良性数据闭环。

4. 视频监控与实时显微成像分析场景

随着数字显微镜和实时成像设备的发展,越来越多实验室开始使用视频流方式观察血液样本或微生物活动。在这种场景下,传统人工观察方式几乎无法持续高效工作,因为视频流数据量巨大且需要实时分析。本项目通过 YOLO 的高效推理能力,可以对视频帧进行逐帧检测,实现实时疟原虫识别与标注。系统可以在 PyQt 界面中实时显示检测结果,例如在视频画面上动态框选疑似目标区域,并叠加置信度信息。

该功能在实际应用中非常关键,例如在研究疟原虫在红细胞内的运动轨迹、生命周期变化时,研究人员需要连续观察长时间视频数据。系统可以自动记录检测到的目标出现时间、位置变化,并生成轨迹数据,便于后续分析。此外,在一些自动化实验平台中,该系统甚至可以与显微镜控制系统联动,当检测到高密度感染区域时自动触发拍摄或数据保存,从而实现"事件驱动式采集"。相比传统手动观察,这种方式极大提升了数据捕获效率与实验精度,同时减少人为遗漏关键帧的风险。

三.核心功能

1.登录注册

1.登录

软件启动后首先进入登录页面,用户需要输入正确的用户名和密码,经过系统验证后方可使用本系统的正式功能。登录页面整体采用垂直布局,使信息层次清晰、结构简洁,同时在局部区域辅以水平布局,以提升界面的灵活性与可读性。整体设计风格遵循"简约而不简单"的原则,在保证视觉美观的同时,也兼顾操作的直观性与易用性。

在功能实现方面,登录模块的后端采用sqlite3文件型数据库来存储用户信息,包括用户名、密码及相关基础数据。每次用户发起登录请求时,系统都会通过查询数据库进行身份校验,确保输入信息的准确性与安全性,从而实现规范化、标准化的登录流程。

同时,我们设计了统一风格的登录与注册界面,用于展示系统与用户交互所需的全部组件。界面顶部以醒目的标题形式展示系统名称,增强整体识别度与专业性。通过合理布局输入框、按钮及提示信息,使用户在使用过程中能够快速理解操作步骤,从而提升整体使用体验。

2.注册

对于尚未拥有账号的用户,需要先完成注册操作后才能使用系统功能。整体注册流程设计得较为简洁直观,用户只需在登录界面点击"注册"按钮,即可快速跳转至注册窗口,无需复杂的页面切换或额外步骤。在注册界面中,用户需要填写自定义的用户名,并输入两次一致的密码以完成身份信息的确认。这种双重密码输入机制可以有效避免因输入错误而导致的登录失败问题,从而提升系统的可靠性与用户体验。

在用户成功完成注册后,系统还提供了一项便捷的优化设计:自动将刚刚注册的用户名和密码填充到登录界面中。用户无需再次手动输入信息,即可直接进行登录操作。这一设计在一定程度上简化了登录流程路径,减少了重复操作,提高了整体使用效率。同时,该功能也体现了系统在交互细节上的人性化考虑,使用户在首次使用时能够获得更加顺畅和友好的体验。

2.主界面

用户通过输入自己的用户名和密码登录到本系统后进入主界面,主界面内容十分丰富,我来一一介绍:首先软件整体是垂直布局,顶部是系统的标题,从左到右依次展示了系统的作者信息、系统名称、当前时间以及CPU内存占用情况,下方为水平布局,左侧是系统的导航区域,我们设计了windows风格支持展开与收缩的内容导航区域,右侧是内容核心区域,通过点击导航按钮切换展示内容,主界面主要展示了以日期为维度统计的数据、用户信息操作按钮、系统信息、系统环境信息以及实时CPU、内存可视化折线图

3.图像检测界面

1.检测结果展示

用户通过点击左侧导航栏按钮切换到图像检测界面,在此界面支持选择图像进行输入,用户选择完之后被选择的图像会展示在左侧并且展示图像绝对路径信息,用户可以通过点击右侧的"进行检测"按钮对输入的图像数据进行检测,系统会自动调用YOLOv8相关算法根据指定的参数对输入图像内容进行检测,最后将检测结果展示到右侧,这样用户可以通过比对左右图像的区别得到直观的检测结果,系统自动使用红色边框框选出目标区域并且使用红色文字展示出目标类别以及它的置信度,这些参数和展示效果都可以在设置页面进行详细设置。

2.导出检测结果

我们在界面中专门设置了检测结果展示区域,用于集中呈现系统输出的信息。该区域不仅包含检测目标数量的统计展示,还提供了结构清晰的详细检测结果表格。通过这种方式,用户可以直观地查看每一条检测数据,包括目标类别、置信度以及对应位置信息等内容,从而更全面地了解检测情况。整体布局兼顾信息密度与可读性,使数据展示既完整又不显杂乱。

此外,在检测任务完成之后,界面右侧的三个功能按钮会自动由不可用状态切换为可点击状态,避免用户在未生成结果前进行误操作。这三个按钮分别承担不同的功能,其中"导出结果"按钮允许用户将检测数据保存到本地。系统支持多种导出格式,包括Excel、CSV以及TXT,用户可以根据实际需求灵活选择合适的文件类型,以便后续分析或归档使用。以Excel格式为例,导出的文件通常采用表格结构,对应字段清晰排列,便于用户进一步查看与处理数据。

3.可视化展示

然后就是可视化展示,用户可以点击进行可视化按钮,查看对于本次检测的可视化效果,系统内置了四种可视化效果:分别是:目标位置热力图、目标面积占比、置信度分布直方图、检测能力柱状图,这些图标通过不同维度对当前数据进行了可视化展示,更便于用户理解,这里指的一体的是,支持可视化图表进行导出操作,用户可以点击紫色的导出按钮,对当前的可视化效果图表进行导出,生成一张本地的PNG图像文件。

4.AI(DeepSeek)智能分析

在每次检测任务完成并展示检测结果之后,系统为用户提供了一种便捷且智能的交互方式:用户只需点击界面右下角悬浮的机器人图标,即可触发对当前检测结果的深度AI分析功能。系统会自动将本次检测所得到的所有关键信息------包括检测到的目标类别、置信度分数、目标位置坐标、数量统计以及可能存在的异常或遮挡情况等------完整地作为输入传递给后端AI大模型。AI模型接收到这些数据后,会基于其强大的语义理解与逻辑推理能力,对本次检测结果进行多维度的智能评估。评估内容可以包括:检测结果的准确性与可靠性判断、识别结果中可能存在的误检或漏检风险提示、针对当前场景的优化建议、对异常情况的详细解释。这一设计不仅使用户无需手动复制或整理检测数据就能获得即时的专业分析反馈,更重要的是,它实现了一种通用化的AI能力接入机制:检测模块与分析模块实现了解耦,任何检测结果都可以以统一格式传递给AI进行分析,而AI的具体分析逻辑可以根据需要灵活替换、升级或定制。这使得系统在未来可以轻松扩展更多智能功能,例如接入不同的大模型、增加多模态分析能力、实现检测策略的自适应调整等,极大地提升了整个系统的可扩展性与智能化水平。

这里是软件的另外一个核心:AI智能分析,我们的目标检测系统接入了DeepSeek大模型,支持对当前检测结果数据进行AI分析,AI会通过不同维度对当前检测结果进行多角度分析,最后生成检测结果分析报告,用户可以根据这个结果对系统进行调整,不断完善系统功能和目标检测准确度!

在AI分析结束后下方会展示一些按钮,用户可以方便地复制结果、导出文本内容、生成PDF报告、重新生成以及关闭,多重的操作方式给于用户了多种选择!

4.视频检测界面

1.视频文件检测

我们的系统具备对视频内容中安全帽佩戴情况的智能检测能力,能够适配多种输入来源,包括本地视频文件、实时视频流以及各类摄像头设备,满足不同应用场景下的使用需求。系统通过对视频画面逐帧解析,利用先进的图像识别算法对画面中的目标进行精准检测,并实时完成标注与可视化展示,使用户能够直观了解检测效果。在性能方面,系统引入了灵活的帧率控制机制,在保证检测精度的同时有效提升视频播放的流畅性,避免出现卡顿或延迟问题,从而提升整体使用体验。

此外,系统界面设计注重用户交互体验,支持左右画面对比显示,用户可以通过肉眼直观对比原始画面与检测结果,快速评估算法表现与准确性。这种对比方式不仅便于结果验证,也有助于进一步优化检测参数。值得一提的是,视频检测界面在功能设计上与图像检测界面保持高度一致,操作逻辑统一,用户无需额外学习成本即可快速上手使用,包括基本的播放控制、暂停、逐帧查看以及检测结果开关等功能。因此,在保证功能完整性的同时,也兼顾了系统的易用性与扩展性。

2.摄像头内容检测

当用户点击"进行检测"按钮后,系统会自动调用本地摄像头设备并完成初始化,随即在界面中实时展示摄像头采集到的画面内容。在视频流持续输入的过程中,系统会同步启动目标检测算法,对当前画面中的目标进行实时识别与标注处理,确保检测结果能够及时反馈给用户。同时,界面采用左右分屏的展示方式,一侧显示原始画面,另一侧显示叠加检测结果的画面,用户可以通过直观对比快速判断检测效果与准确性。这种设计不仅提升了交互体验,也便于用户观察算法在不同场景下的表现情况。至于摄像头画面中是否出现本人,这里就暂时保持低调,不做展示了。

5.模型指标评估

在这个页面中我们通过三个tab展示了模型训练结果评估,分别是:训练结果图、训练结果详情、整体评估,所有的训练结果文件(夹)以及相关作用可见下面图标:

文件/文件夹名 类型 作用说明
weights/ 文件夹 存放训练得到的模型权重
├─ best.pt 文件 在验证集上表现最好的模型(推荐用于推理/部署)
├─ last.pt 文件 最后一轮训练结束时的模型(包含最新状态)
results.csv 文件 每个 epoch 的训练与验证指标(loss、mAP、precision 等)
results.png 图片 训练过程中各类指标变化曲线(loss、mAP 等可视化)
confusion_matrix.png 图片 混淆矩阵,展示类别预测情况
confusion_matrix_normalized.png 图片 归一化后的混淆矩阵
PR_curve.png 图片 Precision-Recall 曲线
P_curve.png 图片 Precision 曲线
R_curve.png 图片 Recall 曲线
F1_curve.png 图片 F1-score 曲线
labels.jpg 图片 数据集中标签分布(类别统计)
labels_correlogram.jpg 图片 标签相关性图(用于分析数据分布)
train_batch*.jpg 图片 训练批次样本可视化(带标注框)
val_batch*.jpg 图片 验证批次样本可视化
args.yaml 文件 本次训练的完整参数配置(超参数、路径等)
hyp.yaml(部分版本) 文件 超参数配置(学习率、增强策略等)
opt.yaml(旧版本可能有) 文件 训练选项记录(已逐渐被 args.yaml 替代)
events.out.tfevents.* 文件 TensorBoard 日志文件(用于可视化训练过程)
1.训练结果图tab

本系统基于 PyQt5 + YOLOv8 + DeepSeek 构建,实现对疟原虫的智能检测与可视化分析。在结果展示模块的该 tab 页面中,集中呈现模型训练与评估阶段生成的多维度指标图像,包括训练损失与性能指标曲线图、PR 曲线、Precision 曲线、Recall 曲线、F1 曲线,以及混淆矩阵与归一化混淆矩阵。同时还提供标签分布图与标签相关性图,用于分析数据集结构与类别关系。

这些图像以直观的方式嵌入界面中,用户无需额外操作即可快速浏览模型整体表现。例如,PR 曲线可反映模型在不同阈值下的查准率与召回率平衡,F1 曲线用于综合衡量模型性能,而混淆矩阵则清晰展示分类正确与误判情况。标签分布与相关性图则有助于判断数据是否均衡及类别间的潜在关联。

在交互设计上,用户可通过点击图像本身,或点击底部提供的图像路径,调用系统默认图像查看工具进行放大查看,提升细节分析能力。每张图像下方均附有简明且专业的说明文案,帮助用户理解其评估意义及应用价值,从而更全面地掌握模型训练效果与优化方向。

2.训练结果详情tab

在该子 tab 页面中,系统进一步对训练过程中的 results.csv 数据进行了结构化展示。通过将原始训练日志解析为二维表格,完整呈现模型在每一轮(epoch)中的关键指标变化情况,使用户能够以更加清晰、系统化的方式回顾训练全过程。界面设计上采用了简洁清新的视觉风格,并结合横向渐变配色对不同数值区间进行区分,使数据变化趋势更加直观,重点指标一目了然。

表格中包含了完整的字段信息,例如"轮次"和"时间"用于标识训练进度;"训练/边界框损失""训练/分类损失""训练/DFL损失"反映模型在训练阶段的收敛情况;"指标/精确率(B)""指标/召回率(B)"以及"指标/mAP@0.5(B)"和"指标/mAP@0.5:0.95(B)"用于综合评估模型检测性能;对应的"验证/边界框损失""验证/分类损失""验证/DFL损失"则用于判断模型的泛化能力与是否存在过拟合现象。此外,"学习率/pg0""学习率/pg1""学习率/pg2"展示了不同参数组在训练过程中的学习率动态变化,有助于分析优化策略的效果。

在交互体验方面,表格支持滚动浏览与高亮显示,用户可以快速定位关键轮次的数据变化。同时结合渐变色视觉编码,能够快速识别性能提升或波动区间。通过这一模块,用户不仅可以精确掌握模型训练的细节,还能够为后续参数调优与模型改进提供可靠的数据支撑,实现从"可视化观察"到"数据驱动优化"的有效过渡。

3.整体评估tab

在该页面中,系统对模型训练结果进行了更高层次的综合评估与总结分析。通过对关键指标进行统一整理与可视化表达,结合细致的颜色编码机制,将不同阶段的性能变化趋势清晰呈现出来,使用户能够从整体上把握模型训练的动态过程,而不仅仅停留在单一指标的观察。

在评估维度上,系统重点围绕多个核心方面展开。首先是收敛质量 ,通过训练与验证损失曲线的变化趋势,判断模型是否稳定收敛以及是否存在震荡或过早收敛的问题;其次是检测性能 ,结合 Precision、Recall 以及 F1 等指标,分析模型在目标检测任务中的准确性与覆盖能力;在泛化能力 方面,通过对比训练集与验证集指标差异,评估模型是否存在过拟合或欠拟合现象;同时利用 mAP 综合表现 (包括 mAP@0.5 与 mAP@0.5:0.95)对模型整体检测能力进行量化衡量,从多阈值角度反映检测精度的稳定性。

此外,系统还对学习率调度策略 进行了分析,通过展示不同参数组学习率随训练轮次的变化情况,帮助用户判断当前优化策略是否合理,以及是否需要进一步调整以提升训练效率或稳定性。所有评估结果均通过分层颜色与趋势变化进行突出展示,使关键结论更加直观易读。

在页面的最后部分,系统基于上述多维度分析结果,自动生成整体评估结论,并从工程应用视角给出总结性判断。例如模型是否已达到可部署标准、是否需要继续训练或优化数据集、以及在实际口罩检测场景中的预期表现。这种从数据到结论的完整闭环设计,有助于用户快速完成模型质量评估,并为后续系统部署与迭代提供明确依据。

6.数据查看界面

"历史数据"页面是系统中用于集中查看与管理过往记录的重要模块,整体设计清晰直观,通过两个独立的 Tab 实现不同维度数据的分类展示,方便用户快速切换与定位信息。

总体而言,"历史数据"页面通过清晰的结构划分与完善的功能设计,实现了检测记录与用户信息的高效管理与展示,为系统的运维与决策提供了有力支持。

1.历史数据tab

在"检测历史数据"Tab中,页面以结构化表格的形式呈现所有检测相关记录。每一条数据都包含关键字段:数据库ID用于唯一标识记录,目标类型用于说明检测对象的类别,检测结果用于反馈检测结论,检测日期则记录具体的时间信息。该模块不仅实现了数据的完整展示,还特别强化了可用性与交互体验------支持分页浏览功能,用户可以根据数据量分批查看内容,同时提供"跳转到第一页"、"上一页"、"下一页"以及"最后一页"等操作按钮,便于在大量数据中高效导航。这种分页机制有效避免了数据过载带来的性能问题,同时也提升了界面的响应速度和用户体验。

2.用户数据tab

其次,在"用户数据"Tab中,系统汇总展示了所有已注册用户的信息,是一个用于用户管理与审计的重要视图。页面同样采用表格形式,列出了数据库ID、用户名、用户角色以及最后登录日期时间等核心字段。通过这些信息,管理员可以快速了解系统用户的基本情况及活跃状态,例如判断某些用户是否长期未登录,从而进行进一步管理操作。该部分数据覆盖范围全面,确保系统管理者能够掌握整体用户分布与使用情况。

6.系统设置界面

我们的系统是支持简单的参数设置的,具体可以设置目标检测模型、置信度阈值(Conf)、交并比阈值(IOU)、还有一些检测结果控制参数,比如检测框展示、目标类别展示、目标置信度展示,用户可以点击绿色的刷新按钮刷新可用模型,亦可通过点击退出按钮退出系统或者退出登录,本设置页面实现了目标检测参数的灵活配置!

7.关于软件界面

我们使用富文本html的形式展示了软件相关的信息,包括系统用到的相关技术,对于二维的数据使用二维表进行了展示,最底部放置了四个按钮,分别是:关于YOLO、关于软件、关于作者、关于QT,点击之后都会弹出对应的信息提示框,这个页面的作用是让用户更多的了解软件和创作者信息,跨过技术的鸿沟!

四.数据集

本系统为"一款基于PyQt+YOLO+DeepSeek的疟原虫系统",用以检测输入数据源是否存在疟原虫。

一款"基于PyQt5+YOLOv8+DeepSeek的疟原虫检测系统"用以检测输入数据源是否佩戴疟原虫。本系统所采用的数据集围绕疟原虫检测的多场景、多角度、多状态采集构建而成,旨在提升模型在真实工业环境中的适应性与鲁棒性。

1.数据准备

本系统附带2703张不同图像和2703个数据标注文件,大家可以根据自己的情况自行训练数据自己的模型!

上图是数据标注文件,格式为xml,下面我们提供了相关脚本支持将xml转为YOLO的txt格式

我们使用json的格式存储数据标注文件,单数据标注文件内容如下:

bash 复制代码
<annotation>
	<source>
		<database>Makerere laboratory images database</database>
		<annotation>Makerere medical school/Mulago Hospital</annotation>
		<image></image>
		<flickrid></flickrid>
	</source>
	<owner>
		<flickrid></flickrid>
		<name>unknown</name>
	</owner>
	<size>
		<width>1024</width>
		<height>768</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<status>
		<bad>0</bad>
		<annotatedby>me</annotatedby>
		<checkedby>-</checkedby>
	</status>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>488.2323</xmin>
			<ymin>623.9338</ymin>
			<xmax>538.2323</xmax>
			<ymax>673.9338</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>79.1252</xmin>
			<ymin>627.6306</ymin>
			<xmax>129.1252</xmax>
			<ymax>677.6306</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>201.1179</xmin>
			<ymin>118.7112</ymin>
			<xmax>251.1179</xmax>
			<ymax>168.7112</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>681.6955</xmin>
			<ymin>15.2022</ymin>
			<xmax>731.6955</xmax>
			<ymax>65.2022</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>717.4308</xmin>
			<ymin>435.3995</ymin>
			<xmax>767.4308</xmax>
			<ymax>485.3995</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>718.6631</xmin>
			<ymin>636.2563</ymin>
			<xmax>768.6631</xmax>
			<ymax>686.2563</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
	<object>
		<name>person</name>
		<action>Trophozoite</action>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<occluded>0</occluded>
		<bndbox>
			<xmin>758.0951</xmin>
			<ymin>605.4501</ymin>
			<xmax>808.0951</xmax>
			<ymax>655.4501</ymax>
		</bndbox>
		<bad>0</bad>
		<checkedby>-</checkedby>
	</object>
</annotation>

2.数据集处理

1.数据集标注文件类型转换

直接使用VOC格式的数据标注文件进行训练是不行的,需要我们将xml转成txt文件,

这段代码的作用是将指定文件夹中的 Pascal VOC 格式的 XML 标注文件批量转换为 YOLO 格式的 TXT 标注文件。它会先遍历所有 XML 自动统计有效类别并生成类别到 ID 的映射表,忽略类别名为 "not" 的标注,然后读取对应图片的尺寸,将 XML 中的边界框坐标转换为 YOLO 的归一化格式(class_id x_center y_center width height),最后将生成的 TXT 文件保存到指定目录中,便于直接用于 YOLO 训练。

大家首先执行step1_voc_to_txt.py

python 复制代码
import os
import xml.etree.ElementTree as ET
from PIL import Image
from train_conf import BASE_DIR

# 原始路径
xml_dir = BASE_DIR + r"annotation"
img_dir = BASE_DIR + r"images"

# YOLO标签输出路径
yolo_txt_dir = BASE_DIR + r"labels"
os.makedirs(yolo_txt_dir, exist_ok=True)

# ===== 自动生成类别映射 =====
class_map = {}
next_class_id = 0

# 支持的图像扩展
img_exts = [".jpg", ".jpeg", ".png", ".bmp"]

# 遍历 XML 文件
for xml_file in os.listdir(xml_dir):
    if not xml_file.endswith(".xml"):
        continue

    xml_path = os.path.join(xml_dir, xml_file)
    tree = ET.parse(xml_path)
    root = tree.getroot()

    # --- 以 XML 文件名匹配图像 ---
    base = os.path.splitext(xml_file)[0]
    img_path = None
    for ext in img_exts:
        candidate = os.path.join(img_dir, base + ext)
        if os.path.exists(candidate):
            img_path = candidate
            break

    if img_path is None:
        print(f"Warning: 图像文件与 {xml_file} 同名的图片不存在,跳过")
        continue

    # 获取图像尺寸
    try:
        with Image.open(img_path) as img:
            w, h = img.size
    except Exception as e:
        print(f"无法打开图片 {img_path}: {e}")
        continue

    txt_lines = []

    # 遍历目标
    for obj in root.findall("object"):
        name_node = obj.find("name")
        if name_node is None:
            continue

        label = name_node.text.strip()

        # === 自动分配 class_id ===
        if label not in class_map:
            class_map[label] = next_class_id
            next_class_id += 1

        class_id = class_map[label]

        bndbox = obj.find("bndbox")
        if bndbox is None:
            continue

        xmin = float(bndbox.find("xmin").text)
        ymin = float(bndbox.find("ymin").text)
        xmax = float(bndbox.find("xmax").text)
        ymax = float(bndbox.find("ymax").text)

        x_center = ((xmin + xmax) / 2) / w
        y_center = ((ymin + ymax) / 2) / h
        box_width = (xmax - xmin) / w
        box_height = (ymax - ymin) / h

        txt_lines.append(
            f"{class_id} {x_center:.6f} {y_center:.6f} {box_width:.6f} {box_height:.6f}"
        )

    # 保存 YOLO txt
    txt_file_path = os.path.join(yolo_txt_dir, base + ".txt")
    with open(txt_file_path, "w") as f:
        f.write("\n".join(txt_lines))

# ===== 输出类别映射 =====
print("\n类别映射 class_map:")
for k, v in class_map.items():
    print(f"{v}: {k}")

print(f"\n转换完成!YOLO TXT 文件已保存在: {yolo_txt_dir}")

2.数据集拆分

YOLO 推荐训练集和测试集按 8:2 划分,主要是因为目标检测对样本量非常依赖,需要尽可能多的训练数据来学习特征,同时又必须保留足够的独立测试数据来评估模型的真实泛化能力。8:2 被证明在"训练数据够多"与"测试评估足够稳定"之间取得了较好平衡,因此成为默认且通用的实践比例。

这个脚本的作用是从已有的图片和 YOLO 标注文件中随机抽取 200 张图片,并将它们按照训练集和验证集的比例进行划分,然后将对应的图片和 TXT 标注文件复制到新的数据集目录中,方便直接用于训练 YOLO 模型。脚本会先创建训练集和验证集的图片、标签子目录,然后随机选择 指定数量的张图片,其中 五分之一作为验证集,其余 五分之四作为训练集,复制过程中会保证每张图片对应的标注文件也被同步复制,如果标注文件不存在,会生成一个空的 TXT 文件,以保持文件结构完整。运行完成后,新的数据集就整理好了,可以直接用于训练和验证。。最终会在目标目录下生成:

执行脚本step2_auto_part.py

bash 复制代码
import os
import random
import shutil
from train_conf import BASE_DIR

# 原始数据路径
img_dir = BASE_DIR + "images"
label_dir = BASE_DIR + "labels"

# 新数据集路径
dataset_dir = BASE_DIR + "dataset"
MAX_IMAGE_COUNT = 200
SP_COUNT = int(MAX_IMAGE_COUNT * 0.2)

train_img_dir = os.path.join(dataset_dir, "train", "images")
train_label_dir = os.path.join(dataset_dir, "train", "labels")
val_img_dir = os.path.join(dataset_dir, "val", "images")
val_label_dir = os.path.join(dataset_dir, "val", "labels")

# 创建目录
for dir_path in [train_img_dir, train_label_dir, val_img_dir, val_label_dir]:
    os.makedirs(dir_path, exist_ok=True)

# 获取所有图片文件
all_images = [f for f in os.listdir(img_dir) if f.lower().endswith((".jpg", ".png", ".jpeg"))]

# 随机抽取MAX_IMAGE_COUNT张
if len(all_images) < MAX_IMAGE_COUNT:
    raise ValueError(f"图片数量不足MAX_IMAGE_COUNT张,当前数量: {len(all_images)}")

selected_images = random.sample(all_images, MAX_IMAGE_COUNT)

# 分割训练集和验证集
random.shuffle(selected_images)
val_images = selected_images[:SP_COUNT]
train_images = selected_images[SP_COUNT:]


def copy_files(image_list, target_img_dir, target_label_dir):
    for img_file in image_list:
        # 复制图片
        src_img_path = os.path.join(img_dir, img_file)
        dst_img_path = os.path.join(target_img_dir, img_file)
        shutil.copy(src_img_path, dst_img_path)

        # 对应的txt
        label_file = os.path.splitext(img_file)[0] + ".txt"
        src_label_path = os.path.join(label_dir, label_file)
        if os.path.exists(src_label_path):
            dst_label_path = os.path.join(target_label_dir, label_file)
            shutil.copy(src_label_path, dst_label_path)
        else:
            # 如果没有对应txt文件,创建一个空文件
            open(os.path.join(target_label_dir, label_file), "w").close()


# 复制训练集
copy_files(train_images, train_img_dir, train_label_dir)
# 复制验证集
copy_files(val_images, val_img_dir, val_label_dir)

print(f"随机抽取完成!训练集: {len(train_images)} 张,验证集: {len(val_images)} 张")
print(f"数据集路径: {dataset_dir}")

3.模型训练

数据集准备好之后就可以开始模型训练了,我们首先准备一个训练的配置文件,比如说是data.yaml

然后就可以开始模型训练了,直接执行我们准备好的train.bat文件,内容就是下面的内容

bash 复制代码
yolo task=detect mode=train model=../data/model/yolov8n.pt data=./data.yaml epochs=30 imgsz=640  batch=16 lr0=0.01

用户亦可执行step3_train_model.py脚本进行模型训练

python 复制代码
from ultralytics import YOLO


def main():
    # 加载模型
    model = YOLO("../data/model/yolov8n.pt")

    # 开始训练
    model.train(
        data="./data.yaml",  # 数据集配置
        epochs=50,  # 训练轮数
        imgsz=640,  # 输入尺寸
        batch=16,  # batch size
        lr0=0.01,  # 初始学习率
        task="detect"  # 任务类型
    )


if __name__ == "__main__":
    main()

然后模型就开始训练了

这里我贴一些训练验证结果截图

最后的results.png见下图,训练效果还是可以的!

bash 复制代码
# ✅ **整体结论**

本次训练整体表现为:

👉 **稳定收敛 + 检测能力持续提升 + 后期进入性能平台期**

但存在明确不足:

⚠️ **precision 波动显著、定位损失(dfl_loss)优化有限、指标震荡明显**

因此更准确的评价为:

👉 **"收敛良好、检测可用,但鲁棒性与精度仍有提升空间的训练结果"**

---

# 📉 **一、收敛质量分析(基于实际 loss 变化)**

## ✅ 1. 训练损失持续下降(收敛明确)

| Loss             | Epoch 1 | Epoch 50 | 降幅         |
| ---------------- | ------- | -------- | ---------- |
| `train/box_loss` | 3.198   | 1.726    | **↓46.1%** |
| `train/cls_loss` | 3.562   | 1.297    | **↓63.6%** |
| `train/dfl_loss` | 1.771   | 1.133    | **↓36.0%** |

👉 分类能力提升明显,定位能力改善中等(dfl_loss 优化相对有限)

## ✅ 2. 验证损失同步下降(无明显过拟合)

| Loss           | Epoch 1 | Epoch 50 | 变化         |
| -------------- | ------- | -------- | ---------- |
| `val/box_loss` | 2.389   | 1.603    | **↓32.9%** |
| `val/cls_loss` | 3.476   | 1.258    | **↓63.8%** |
| `val/dfl_loss` | 1.387   | 1.113    | **↓19.8%** |

👉 验证集 loss 与训练集趋势一致
👉 存在阶段性波动(epoch 6、12、37附近)

📌 **结论**:
✔ 无明显过拟合
⚠️ 模型收敛稳定,但局部仍有轻微震荡

---

# 🚀 **二、检测性能演化(基于 mAP / precision / recall)**

## ✅ 1. 初期(epoch 1--5):快速建立基础能力

* mAP50:0.040 → 0.770(B 通道数据)
* precision:0.031 → 0.710
* recall:0.547 → 0.781

👉 典型 warmup 阶段
⚠️ 指标初期波动剧烈,但模型快速学会基础检测

## ✅ 2. 中期(epoch 6--25):性能增长 + 波动并存

* mAP50:0.186 → 0.810
* mAP50-95:0.041 → 0.370
* recall:0.464 → 0.781

👉 指标稳步提升
⚠️ precision / recall 存在多次反复(epoch 9--20)

📌 **模型仍在调整决策边界,数据复杂性或噪声可能影响稳定性**

## ✅ 3. 后期(epoch 30--50):进入平台期

最终性能(epoch 50):

| 指标        | 值         |
| --------- | --------- |
| mAP50     | **0.821** |
| mAP50-95  | **0.370** |
| precision | 0.791     |
| recall    | 0.816     |

👉 mAP50 保持持续增长并稳定在高位
👉 recall 高于 precision,模型偏向"多检出"

---

# 🎯 **三、Precision / Recall 结构分析**

* **recall**:epoch 30--50 维持 **0.74--0.82**
* **precision**:epoch 30--50 维持 **0.75--0.80**,波动相对中期减少

📌 **含义**:

✔ 优点:低漏检,高召回
⚠️ 风险:仍有部分误检,输出干净度一般

---

# 📊 **四、mAP 表现(训练亮点)**

* mAP50:0.039 → 0.821
* mAP50-95:0.013 → 0.370

👉 **持续增长,无回退趋势**
📌 模型整体检测能力可靠,召回能力强

---

# ⚙️ **五、学习率策略与表现对应**

* 初期(warmup):lr 升至 0.001 → 快速收敛
* 后期:lr 衰减至 5.96e-5 → 稳定优化

✔ 前期收敛迅速
⚠ 后期指标仍存在轻微波动,说明 lr 衰减未完全抑制小幅震荡

---

# 🧠 **六、关键问题总结**

| 问题            | 严重程度 | 说明                            |
| ------------- | ---- | ----------------------------- |
| precision 波动  | ⚠️ 中 | 中期波动明显,但后期稳定改善                |
| dfl_loss 优化有限 | ⚠️ 中 | 定位能力提升有限                      |
| 指标震荡          | ⚠️ 中 | 中期波动可观察                       |
| 高召回、低精度       | ⚠️ 中 | 后期 precision 已改善,但仍略低于 recall |
| 过拟合           | ✅ 无  | ---                             |

---

# 🏁 **最终评价**

👉 **训练结果定义为:**

> **"收敛良好、检测能力可用,召回优于精度,但仍有部分优化空间的中等偏上训练结果"**

---

# 📌 一句话总结

👉 **训练整体稳定,mAP50 达 0.82、mAP50-95 达 0.37,召回维持 0.82+,precision 波动减小至 0.79 左右,模型高召回导向,定位改善有限,但整体检测能力可靠,可直接用于实际检测场景。**

五.问题统一回答

在这个章节我将统一回答朋友们比较关心的问题

1.数据库

我们使用sqlite3作为数据存储数据库,数据库中包含两个数据表,用于存储我们的核心数据

1.users用户信息表

数据表结构

sql 复制代码
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL,
    last_login TEXT,
    role TEXT NOT NULL
)
字段名 类型 作用
id INTEGER 用户唯一ID(自增主键)
username TEXT 用户名(唯一)
password TEXT 用户密码
last_login TEXT 最后登录时间
role TEXT 用户角色(如:admin/user)

users 表用途

这个表主要用于:

用户注册

用户登录认证

用户权限管理

登录时间记录

2.detect_history 检测历史表

表结构

sql 复制代码
CREATE TABLE IF NOT EXISTS detect_history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    type VARCHAR(50),
    path TEXT,
    total VARCHAR(50),
    detail TEXT,
    detect_date VARCHAR(50)
)
函数名 作用 操作对象
__init__() 初始化数据库对象 整体系统
check_check_and_create() 创建数据库目录 文件系统
execute_sql() 执行SQL语句 所有表
create_tables() 创建数据库表 users / detect_history
register_user() 用户注册 users
get_user_by_credentials() 用户登录验证 users
init_default_user() 初始化默认账号 users
insert_detect_history() 插入检测历史 detect_history
query_users() 分页查询用户 users
query_detect_history() 分页查询检测记录 detect_history
clear_detect_history() 清空检测历史 detect_history

这个表用于保存:

AI检测结果

图像检测历史

视频分析结果

文件识别记录

2.如何修改文案

全局搜索目标文案,如果搜不到就删减关键字直到搜索到目标关键字

这里以主界面右上角的作者信息来演示,去掉此文案

在线免直接进行字符串替换即可

3.如何修改图片资源

用户可能需要更换背景图或者登录界面logo图,这里以修改背景图为例:在src/resource/images找到对应文件,找到自己准备好的图片(最好是同样扩展名),最后执行script/create_qrc.py脚本,完成资源替换。

4.如何更换API Key

我们的系统是支持AI分析的,用户要更换API Key的话,可以找到src/conf/system_conf.py的deepseek_api_key ,替换此变量的值即可。

5.运行最佳分辨率

软件是在python3.8的windows环境下开发的,推荐的分辨率为1920X1080

6.如何隐藏部分功能

我们的软件包含多个界面,通过左侧导航栏控制右侧内容页面展示,用户如果需要隐藏功能,可以这样操作:

找到src/conf/system_conf.py的page_config_items 变量,按照情况注释或者删除,即可隐藏指定的页面

7.软件系统架构图

我们绘制了软件架构图,详细地展示了软件系统层级架构以及数据流转,拿到项目代码的朋友,可以免费获取无水印版本系统架构图哦~

六.关于项目

1.开发环境

本系统是在 Windows 11 操作系统上进行开发的,Python 环境采用的是 Python 3.8 版本,硬件方面使用的是 AMD 处理器 ,未配备独立显卡,开发工具为 *PyCharm 2021.3

  • 版本。在整个开发与测试过程中,我们严格遵循了上述环境配置,确保了系统的稳定运行。在此特别建议所有使用者:为了避免出现因版本过新而导致的"不兼容"情况,请大家尽量不要使用过高的 Python 版本(如 Python 3.11 及以上),也不要使用最新的 PyCharm 或操作系统版本。因为较新的环境可能对部分依赖库或语法特性支持不佳,容易引发意外的报错或功能异常。遵循本项目所推荐的版本配置,能够最大程度地保证系统的顺利部署与稳定运行。

2.项目部署

1.项目依赖

博主是在Windows电脑上使用Python3.8开发的本系统,建议大家使用的Python版本别太高。

其中项目依赖为:

bash 复制代码
PyQt5==5.15.11
QtAwesome==1.3.1
torch==2.4.1
torchvision==0.19.1
Pillow==9.3.0
pyqtgraph===0.13.3
PyQtWebEngine==5.15.5
opencv-python==4.10.0.82
ultralytics==8.3.234
Requests==2.32.5
pandas==2.0.3
numpy==1.24.4
Markdown==3.4.4

我已经整理到了requirements.txt,大家直接使用命令

pip install -r requirements.txt

即可一键安装项目依赖,其中的torch和torchvision只要匹配即可,不一定非要和博主开发环境的版本一致。

2.项目结构

很多小伙伴担心拿到代码后项目看不懂,这个大家不必担心,我们采用文件+类名对相关功能进行了模块化定义,大家见名知意。

下图博主采用tree命令生成了文件、目录树

bash 复制代码
tree "D:\projects\gitee\2026\yolo_projects\yolov8-malaria-detect" /f /a
bash 复制代码
D:\PROJECTS\GITEE\2026\YOLO_PROJECTS\yolov8-malaria-detect
|   main.py
|   record.txt
|   requirements.txt
|
+---data
|   +---database
|   |       data.db
|   |
|   +---db
|   |       db.csv
|   |
|   +---font
|   |       hanyi_yahei.ttf
|   |
|   |
|   \---model
|           best.pt
|           yolov8n.pt
+---script
|       create_qrc.py
|
\---src
    +---conf
    |       style_conf.py
    |       system_conf.py
    |       test_data.py
    |       __init__.py
    |
    +---engine
    |       engines.py
    |       __init__.py
    |
    +---resource
    |   |   resource.qrc
    |   |   resource_rc.py
    |   |   __init__.py
    |   |
    |   +---imgs
    |   |       ai.gif
    |   |       ai.svg
    |   |       bg.jpeg
    |   |       login_gif.gif
    |   |
    |   \---js
    |           echarts.min.js
    |
    +---threads
    |       main_threads.py
    |       signal_bus.py
    |       __init__.py
    |
    +---utils
    |       custom_utils.py
    |       __init__.py
    |
    \---widgets
            base_widgets.py
            custom_pages.py
            custom_widgets.py
            main_page.py
            unique_widgets.py
            __init__.py

3.项目启动

本系统的项目启动十分简单:在安装好所有相关依赖之后,直接执行 main.py 文件,即可自动打开系统的登录注册页面。用户进入该页面后,通过输入匹配的用户名和密码完成登录操作。为方便初次体验,系统内置了一个默认账号,用户名为 admin,密码也为 admin,用户可以直接使用这组账号进行快速登录。当用户成功登录后,系统主界面会完整展示出来,而之前的登录注册页面则会自动隐藏,从而为用户提供清晰、流畅的操作体验。

4.往期优秀作品

序号 项目名称
1 python3GUI---基于PyQt5+YOLOv8+DeepSort的智慧行车可视化系统(详细介绍)
2 python3GUI--基于PyQt5+YOLOv8的智慧厨房系统(详细介绍)
3 python3GUI--基于YOLOv8深度学习的车牌识别系统(详细图文介绍)
4 【AI加持】基于PyQt5+YOLOv8+DeepSeek的钢筋点数系统(详细介绍)
5 【AI加持】基于PyQt5+YOLOv8+DeepSeek的水稻叶片疾病检测系统(详细介绍)
6 【AI加持】基于PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统(详细介绍)
7 【AI加持】基于PyQt5+YOLOv8+DeepSeek的吸烟行为检测系统(详细介绍)
8 【AI加持】基于PyQt5+YOLOv8+DeepSeek的输电隐患检测系统(详细介绍)
9 【AI加持】基于PyQt5+YOLOv8+DeepSeek的结核杆菌检测系统(详细介绍)
10 python3GUI--基于PyQt5+DeepSort+YOLOv8智能人员入侵检测系统(详细图文介绍)
11 python3GUI--车牌、车牌颜色识别可视化系统 By:PyQt5(带文档)
12 python3GUI--智慧交通分析平台:By:PyQt5+YOLOv8(详细介绍)
13 python3GUI--基于YOLOv8的行车追踪与可视化分析系统 By:PyQt5(详细分享、配套文档)
14 python3GUI--网络流量分析系统 By:PyQt5(有配套文档)
15 python3GUI--基于深度学习的人脸识别管理系统(详细图文介绍)
16 【AI加持】基于PyQt+YOLO+DeepSeek的口罩佩戴检测系统(详细介绍)
16 【AI加持】基于PyQt+YOLO+DeepSeek的车型检测系统(详细介绍)
17 【AI加持】基于PyQt+YOLO+DeepSeek的PCB缺陷检测系统(详细介绍)
18 【AI加持】基于PyQt+YOLO+DeepSeek的布匹缺陷检测系统(详细介绍)
19 【AI加持】基于PyQt+YOLO+DeepSeek的钢材焊接缺陷检测系统(详细介绍)
20 【AI加持】基于PyQt+YOLO+DeepSeek的舌苔、舌象情况检测系统(详细介绍)

七.总结

本项目旨在开发一款基于 PyQt5、YOLOv8 与 DeepSeek 技术融合的舌苔情况检测系统,实现对视频流或图像数据中人员是否佩戴安全帽的自动识别与智能分析。通过引入高精度目标检测算法 YOLOv8,提高复杂环境下的识别准确率,并结合 DeepSeek 的语义理解能力,对检测结果进行进一步分析与优化,同时借助 PyQt5 构建友好的人机交互界面,实现实时监控与结果可视化。该系统可广泛应用于建筑工地、工厂车间等高风险作业场景,有效减少人工巡检成本,提升安全监管效率,降低安全事故发生概率,对于推动智慧工地建设与安全生产信息化具有重要现实意义。

本次给大家介绍了我使用PyQt5+YOLOv8+DeepSeek的舌苔情况检测系统,本系统功能强大,支持多种数据源输入,包含多种用户交互按钮以及模式,内置数据可视化方案、大模型AI加持,是您学习、工作使用的不错选择!

需要代码的朋友可以点击箭头下方的二维码加我好友,欢迎您了解!

如需帮助请私聊博主!

相关推荐
Black蜡笔小新1 小时前
自动化AI算法训练服务器DLTM训推一体化平台助力农业生产管理实现安全智能化
人工智能·算法·自动化
米小虾1 小时前
Claude Code、Codex、Cursor三分天下:2026年AI编程Agent生态全景剖析
人工智能·agent
ZHW_AI课题组1 小时前
腾讯云调用IP定位
人工智能·python·机器学习
Wch1G0z8A1 小时前
Google 开源了啥,让 AI Agent 碰数据库不再是定时炸弹
数据库·人工智能·开源
武子康1 小时前
调查研究-151 Slack vs Jira:区别、使用指南与团队选择方法
人工智能·科技·深度学习·ai·职场和发展·jira·slack
米小虾1 小时前
黄仁勋GTC 2026宣告Agent AI时代:从生成式到代理式的范式转移
人工智能·aigc·agent
IT_陈寒1 小时前
Python闭包里藏的这个坑,差点让我加班到凌晨
前端·人工智能·后端
IT_陈寒1 小时前
Java注解空指针?这个坑我踩得莫名其妙
前端·人工智能·后端