ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于YOLOv8的智能服药提醒系统:从模型训练到部署实战

基于YOLOv8的智能服药提醒系统:从模型训练到部署实战 简介本资源是一个面向计算机相关专业本科生与初学者的毕业设计级项目聚焦于人工智能在智慧养老场景中的落地应用——基于YOLOv8实现老人服药行为智能识别与提醒。系统涵盖目标检测、可视化交互界面与轻量部署全流程适用于毕设、课程设计、大作业及AI实践入门。压缩包共97个文件含70个核心Python源码如detect.py、train_mode.py、UI主程序等、4个预训练/微调模型.pt格式、12个编译缓存文件、5个标注XML及配套说明文档整体24.21MB结构清晰、模块解耦便于理解YOLOv8训练—推理—可视化—部署链路。已有36人下载学习资源附带完整数据集、训练指标曲线图F1/PR/混淆矩阵等、验证结果可视化及详细部署教程开箱即用无需额外调试即可运行演示是少有的兼顾工程完整性与教学友好性的CV实战项目。1. 项目概述一个能“看见”药盒的智能管家最近在整理一些过往的课程设计和毕业设计项目时翻到了这个基于YOLOv8的智能家居老人服药提醒系统。说实话这个项目虽然技术栈不算最前沿但它的实用性和完整性让它成为了一个非常棒的练手和参考案例。它完美地结合了当下热门的计算机视觉YOLOv8、物联网应用智能家居和实际社会需求老人健康监护对于想入门AI应用开发特别是目标检测落地的同学来说是个绝佳的敲门砖。这个系统的核心逻辑非常直观用摄像头“看见”老人是否按时服药。听起来简单但背后涉及了从模型训练、服务部署到前后端联调的完整流水线。项目包里提供了从零开始的一切标注好的药盒数据集、训练好的YOLOv8模型权重、一个基于PyQt或类似框架开发的可视化操作界面、以及详细的部署教程。这意味着你拿到手后按照步骤操作很快就能在本地跑起来一个能识别药盒并发出提醒的演示系统。无论是用于理解YOLOv8的工作流程还是作为毕设/课设的核心模块进行二次开发都极具价值。它的目标用户很明确首先是高校计算机、人工智能、物联网相关专业的学生需要一个完整、可运行、有创新点的项目作为毕业设计或课程大作业其次是刚接触AI应用开发的爱好者想通过一个具体案例学习如何将模型从训练、测试最终部署成一个可交互的软件再者就是对智能家居和健康监护感兴趣的开发者可以借鉴其设计思路。这个项目最大的优点就是“开箱即用”它把环境配置、数据准备这些最劝退新手的环节都帮你解决了让你能快速聚焦在模型应用和系统逻辑本身。2. 系统核心设计思路与方案选型为什么选择YOLOv8为什么是这样一个架构这是理解整个项目的起点。做技术选型永远是在性能、精度、开发效率和资源消耗之间做权衡。2.1 为何是YOLOv8而非其他模型在目标检测领域选择很多从老牌的Faster R-CNN到新兴的DETR系列。但对于“药盒识别”这个具体的、需要一定实时性的嵌入式或边缘端应用场景YOLO系列几乎是首选。YOLOv8作为Ultralytics公司在2023年初推出的版本在之前版本的基础上做了大量优化在精度和速度上取得了更好的平衡。对于这个项目而言YOLOv8的几个优势非常关键部署友好YOLOv8提供了极其简洁的API和丰富的导出格式支持如ONNX, TensorRT, CoreML, OpenVINO等。这意味着训练好的模型可以相对轻松地部署到各种平台无论是Windows/Linux服务器还是树莓派、Jetson Nano等边缘设备甚至是手机端。项目提供的“简单部署即可运行”很大程度上得益于此。精度与速度的平衡识别药盒不需要像自动驾驶那样检测上百个微小目标但对精度有一定要求不能把水杯误认为药盒。YOLOv8在COCO等通用数据集上表现优异通过提供的预训练权重进行迁移学习可以用较少的数据和训练时间获得一个针对药盒的、鲁棒性不错的专用模型。活跃的社区与生态Ultralytics维护的生态非常活跃文档清晰遇到问题容易找到解决方案。这对于课程设计或毕设项目至关重要能节省大量排查环境依赖和奇怪Bug的时间。2.2 整体系统架构拆解这个智能服药提醒系统本质上是一个**“感知-判断-提醒”**的闭环。其软件架构通常分为三层感知层前端由USB摄像头或网络摄像头构成视觉输入。核心是运行YOLOv8模型推理的模块。它持续捕获图像送入模型得到图像中所有药盒的边界框Bounding Box和置信度。逻辑层后端服务这是系统的大脑。它接收感知层的结果并执行核心业务逻辑状态判断根据识别到的药盒数量、位置例如是否在手中以及时间信息判断老人的服药状态。例如在预设的服药时间窗口内识别到药盒被拿起 - 判定为“正在服药”时间窗口内未识别到药盒 - 判定为“未服药”时间窗口外识别到药盒 - 可能是“误操作”或“提前/推迟服药”。提醒触发当逻辑层判断需要提醒时如超时未服药它会生成提醒指令。数据记录将每次的识别结果、服药事件时间、是否成功记录到本地数据库或文件中便于后续查看服药历史。交互层人机界面即提供的可视化界面。它承担两个主要功能控制与配置允许用户设置服药时间表、提醒方式屏幕弹窗、声音、甚至未来可扩展的智能音箱语音、查看摄像头实时画面和识别结果。信息展示实时显示摄像头画面并用框框标出识别到的药盒同时显示系统的状态如“等待中”、“已服药”、“请服药”。整个数据流是摄像头 - YOLOv8模型推理 - 逻辑判断 - 界面更新/提醒触发。这种分层设计使得各部分耦合度低例如你可以很容易地将YOLOv8模型替换成其他版本如v5, v9或轻量化模型如YOLOv8n只需修改感知层的推理代码也可以将提醒方式从本地弹窗改为调用智能家居平台的API向智能灯泡发闪烁信号。注意在方案选型时我们放弃了更复杂的方案比如加入人脸识别来特定针对某位老人或者使用目标跟踪来持续追踪药盒的移动轨迹。主要是为了保持项目的核心聚焦和轻量化确保在有限的毕设周期内能够完成并稳定运行。这些都可以作为项目的高级扩展功能。3. 从零到一环境配置与模型部署详解拿到项目压缩包后第一步就是搭建能让它跑起来的环境。这部分往往是新手最容易卡住的地方我会结合常见的坑点把流程掰开揉碎讲清楚。3.1 项目结构与核心文件解析解压项目包后你通常会看到类似如下的目录结构理解它们的作用能让你事半功倍基于YOLOv8的智能家居老人服药提醒系统/ ├── README.md # 项目总说明部署指南入口 ├── requirements.txt # Python依赖包列表 ├── yolov8_medicine/ # YOLOv8模型相关目录 │ ├── weights/ # 存放训练好的模型权重文件.pt │ ├── data/ # 数据集和配置文件 │ │ ├── images/ # 训练和验证图片 │ │ ├── labels/ # 对应的YOLO格式标注文件 │ │ └── data.yaml # 数据集配置文件定义了类别、路径等 │ └── train.py # 模型训练脚本如需重新训练 ├── src/ # 系统主源代码目录 │ ├── main.py # 主程序入口启动图形界面 │ ├── detector.py # 封装YOLOv8检测的核心类 │ ├── scheduler.py # 服药时间调度与逻辑判断模块 │ ├── ui/ # 用户界面文件如PyQt的.ui文件或代码 │ └── utils/ # 工具函数如日志、数据库操作 ├── config/ # 配置文件目录 │ └── settings.yaml # 系统设置时间表、提醒方式、摄像头ID等 └── docs/ # 部署教程、设计文档等关键文件说明requirements.txt这是环境复现的蓝图。里面列出了所有需要的Python库及版本如torch,torchvision,ultralytics,opencv-python,PyQt5等。务必注意版本兼容性特别是PyTorch与CUDA版本的匹配。data.yaml这是YOLOv8训练和推理的“地图”。它指明了训练/验证图片的路径、类别数量nc: 1很可能表示只有“medicine_box”一类和类别名称names: [‘medicine_box’]。weights/best.pt这是项目的核心资产——训练好的模型权重。部署时主要就用这个文件。main.py一切故事的开始。3.2 步步为营本地部署实操流程假设你在一台装有Windows或Ubuntu并配有NVIDIA显卡的电脑上部署。步骤一创建并激活Python虚拟环境这是最佳实践可以避免包版本冲突。# 打开终端或Anaconda Prompt conda create -n med_reminder python3.8 # 推荐使用3.8或3.9兼容性较好 conda activate med_reminder如果没有Anaconda也可以用venvpython -m venv med_reminder_env # Windows: med_reminder_env\Scripts\activate # Linux/Mac: source med_reminder_env/bin/activate步骤二安装PyTorch带CUDA支持这是最大的一个坑点。必须去 PyTorch官网 根据你的CUDA版本复制对应的安装命令。你可以通过nvidia-smi命令查看CUDA版本。 例如CUDA 11.7对应的命令可能是pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117务必先独立安装好匹配的PyTorch再安装其他依赖因为requirements.txt里的torch版本可能不匹配你的环境。步骤三安装项目依赖进入项目根目录安装requirements.txt中的其他包。cd /path/to/your/project pip install -r requirements.txt如果安装ultralyticsYOLOv8官方库或opencv-python时遇到网络问题可以考虑使用国内镜像源如清华源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt。步骤四验证YOLOv8环境安装完成后在Python交互环境中简单测试一下from ultralytics import YOLO model YOLO(yolov8n.pt) # 加载一个官方纳米模型试试水 results model(https://ultralytics.com/images/bus.jpg) # 检测示例图片 print(results[0].boxes) # 如果能看到检测框信息说明环境基本OK步骤五运行主程序确保摄像头已连接。通常主程序main.py会读取config/settings.yaml中的配置比如摄像头设备ID通常是0代表默认摄像头。python src/main.py如果一切顺利你应该能看到图形界面弹出摄像头画面启动并且当药盒出现在画面中时会被一个框实时框出来。实操心得摄像头权限在Windows上如果OpenCV打不开摄像头可能是权限问题。尝试以管理员身份运行你的IDE或终端。在Mac或Linux上也可能需要检查相机权限。虚拟环境的重要性我强烈建议每个项目都使用独立的虚拟环境。这次装乱了直接删掉环境重来不会影响其他项目。这是血的教训换来的好习惯。PyTorch CUDA版本如果运行时报错与CUDA相关大概率是PyTorch版本与CUDA驱动不匹配。重新安装正确版本的PyTorch是最彻底的解决办法。如果显卡是GTX 1660 Ti这类确保安装了合适的显卡驱动。4. 核心模块深度解析与二次开发指南系统跑起来只是第一步。要真正理解它甚至进行二次开发比如更换识别物体、优化界面、增加新功能就需要深入几个核心模块。4.1 YOLOv8检测模块detector.py是如何工作的这个文件是计算机视觉部分的核心。我们打开它通常会看到一个Detector类。它的核心任务就是加载模型并对每一帧图像进行推理。# 伪代码展示核心逻辑 class Detector: def __init__(self, model_pathweights/best.pt, devicecuda:0): # 加载训练好的模型 self.model YOLO(model_path) # 将模型移动到指定设备GPU或CPU self.model.to(device) # 可以设置一些推理参数如置信度阈值、IOU阈值 self.args {conf: 0.5, iou: 0.45, verbose: False} def detect(self, frame): 对输入的一帧图像进行检测。 Args: frame: numpy数组BGR格式的图像。 Returns: results: 检测结果通常包含框、置信度、类别ID。 annotated_frame: 绘制了检测框的图像。 # 使用YOLOv8模型进行预测 predictions self.model(frame, **self.args)[0] # 解析结果 boxes predictions.boxes.xyxy.cpu().numpy() # 边界框 [x1, y1, x2, y2] confidences predictions.boxes.conf.cpu().numpy() # 置信度 class_ids predictions.boxes.cls.cpu().numpy().astype(int) # 类别ID # 在原始帧上绘制结果可选用于可视化 annotated_frame predictions.plot() # Ultralytics提供的便捷绘图方法 # 也可以自己用OpenCV画 # for box, conf, cls_id in zip(boxes, confidences, class_ids): # x1, y1, x2, y2 map(int, box) # cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) # label f{self.model.names[cls_id]} {conf:.2f} # cv2.putText(frame, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2) return {boxes: boxes, confidences: confidences, class_ids: class_ids}, annotated_frame关键点解析设备选择device参数可以是cuda:0第一块GPU、cpu。如果部署在没有GPU的机器上务必改为cpu否则会报错。置信度阈值conf这是一个非常重要的参数。调高如0.7会让模型更“谨慎”只输出它非常确信的检测结果漏检可能增加调低如0.3会让模型更“敏感”能检测到更多目标但误检把其他东西当成药盒也可能增加。需要根据实际场景在精度和召回率之间权衡。结果解析YOLOv8的结果对象非常丰富。boxes.xyxy是左上右下格式的坐标boxes.conf是置信度boxes.cls是类别索引。.cpu().numpy()是为了将GPU上的张量转到CPU并转为NumPy数组方便后续处理。4.2 服药调度与逻辑判断模块scheduler.py的智慧检测到药盒只是获得了“感知”scheduler.py负责理解这感知背后的含义。它通常是一个基于时间的事件驱动状态机。# 伪代码展示核心逻辑 class MedicationScheduler: def __init__(self, schedule_config): # 从配置文件加载服药时间表例如 {morning: 08:00, noon: 12:00, evening: 19:00} self.schedule schedule_config self.reminder_window 30 # 提醒窗口单位分钟。例如8:00服药则在7:30-8:30间检测 self.medication_taken {key: False for key in self.schedule.keys()} # 记录本次是否已服药 self.reminder_sent {key: False for key in self.schedule.keys()} # 记录本次是否已发送提醒 def update(self, current_time, detection_result): 根据当前时间和检测结果更新状态。 Args: current_time: datetime对象当前时间。 detection_result: 从detector返回的检测结果字典。 Returns: state: 系统当前状态如 normal, within_window, should_remind, taken。 message: 需要显示或播报的消息。 # 1. 判断当前处于哪个服药时间窗口 current_state normal for med_time_name, med_time_str in self.schedule.items(): med_time datetime.strptime(med_time_str, %H:%M).time() window_start (datetime.combine(current_time.date(), med_time) - timedelta(minutesself.reminder_window/2)).time() window_end (datetime.combine(current_time.date(), med_time) timedelta(minutesself.reminder_window/2)).time() if window_start current_time.time() window_end: current_state within_window # 2. 在窗口内检查检测结果 if len(detection_result[boxes]) 0: # 检测到了药盒 # 可以增加更复杂的判断比如药盒在画面中的大小、位置是否在手中区域 if not self.medication_taken[med_time_name]: self.medication_taken[med_time_name] True current_state taken message f{med_time_name.capitalize()} medication taken at {current_time.strftime(%H:%M)} else: # 在窗口内但未检测到药盒 if not self.medication_taken[med_time_name] and not self.reminder_sent[med_time_name]: # 如果已过服药时间点则触发提醒 if current_time.time() med_time: current_state should_remind self.reminder_sent[med_time_name] True message fReminder: Please take your {med_time_name} medication! break # 假设同一时间只在一个窗口内 # 3. 每日重置状态例如在午夜 if current_time.hour 0 and current_time.minute 0: self._reset_daily_status() return current_state, message def _reset_daily_status(self): for key in self.medication_taken: self.medication_taken[key] False self.reminder_sent[key] False逻辑精粹状态机设计系统在不同状态间转换正常、在服药窗口内、应提醒、已服药逻辑清晰易于调试和扩展。时间窗口使用时间窗口而非精确时间点更符合人性化设计。老人可能在时间点前后几分钟服药。防误判仅仅检测到药盒可能不够。更健壮的逻辑可以加入a) 药盒必须出现在画面中央或特定区域代表在手中b) 药盒被检测到的持续帧数需超过一个阈值避免一晃而过就判定为服药c) 结合其他传感器如重量传感器药盒变轻。重置机制每日自动重置服药记录确保新的一天重新开始。4.3 可视化界面连接用户与算法的桥梁图形界面通常使用PyQt5、Tkinter或PySide开发。它的主要职责是视频流显示在一个QLabel或QGraphicsView控件中实时显示来自detector.detect()返回的annotated_frame已画好框的帧。控制面板提供按钮开始/停止检测、设置调整置信度阈值、编辑服药时间表、日志显示区域。事件响应当scheduler返回should_remind状态时界面弹出提醒对话框、播放提示音或改变某个状态标签的颜色。界面与逻辑的通信通常采用信号与槽机制PyQt或简单的函数回调。主线程运行界面同时启动一个工作线程QThread专门负责视频捕获、检测和逻辑判断避免界面卡顿。工作线程通过信号将状态如state,message,annotated_frame发送给主线程更新UI。5. 模型训练与数据集的奥秘虽然项目提供了训练好的模型和数据集但如果你想识别新的物体比如不同类型的药瓶、保健品或者想优化现有模型的性能就需要了解模型训练的过程。5.1 数据集准备YOLO格式详解项目提供的data.yaml和images/、labels/文件夹就是标准YOLO格式的数据集。images/train/和images/val/分别存放训练和验证图片.jpg, .png。labels/train/和labels/val/存放与图片同名的.txt标注文件。data.yaml内容示例如下path: ../datasets/medicine # 数据集根目录 train: images/train # 训练集图片相对路径 val: images/val # 验证集图片相对路径 nc: 1 # 类别数量 (number of classes) names: [medicine_box] # 类别名称列表标注文件格式每个.txt文件对应一张图片每行代表一个标注对象。class_id x_center y_center width height例如0 0.5 0.5 0.2 0.3class_id: 类别索引从0开始。对应names列表中的位置。x_center, y_center: 边界框中心点的归一化坐标除以图片宽高。width, height: 边界框的归一化宽高。你可以使用标注工具如LabelImg、Roboflow或CVAT来制作自己的数据集。5.2 模型训练从预训练模型微调YOLOv8提供了极其简单的训练接口。项目中的train.py可能类似这样from ultralytics import YOLO # 加载一个预训练模型作为起点迁移学习能加速收敛 model YOLO(yolov8s.pt) # 可以选n, s, m, l, x不同尺寸的模型 # 开始训练 results model.train( datayolov8_medicine/data/data.yaml, # 数据集配置文件路径 epochs100, # 训练轮数 imgsz640, # 输入图片尺寸 batch16, # 批次大小根据GPU内存调整 device0, # 使用GPU 0如果是CPU则写 cpu workers4, # 数据加载的线程数 projectruns/train, # 训练结果保存目录 nameexp1, # 实验名称 pretrainedTrue, # 使用预训练权重 optimizerAdamW, # 优化器 lr00.01, # 初始学习率 augmentTrue, # 使用数据增强翻转、裁剪、色彩抖动等 )关键参数解析模型尺寸yolov8n.pt纳米最小最快精度最低yolov8x.pt超大最慢最准。对于药盒检测yolov8s或yolov8m通常是很好的平衡点。epochs训练轮数。需要观察训练损失和验证损失曲线避免过拟合训练损失持续下降但验证损失开始上升。imgsz模型输入的固定尺寸。YOLOv8内部会做缩放。更大的尺寸通常能带来更好的精度但也会增加计算量和内存消耗。数据增强augment非常重要它能通过对训练图片进行随机变换旋转、缩放、调整亮度对比度等极大地提升模型的泛化能力使其在光线变化、角度变化时仍能稳定识别。训练完成后在runs/train/exp1/weights/目录下会生成best.pt验证集上表现最好的权重和last.pt最后一轮的权重。将best.pt复制到项目原来的weights/目录下替换即可使用新训练的模型。6. 常见问题排查与性能优化实战录在实际部署和运行过程中你几乎一定会遇到下面这些问题。这里我把它们和解决方案整理出来希望能帮你节省大量时间。6.1 部署与运行类问题Q1: 运行main.py时提示ImportError: No module named ‘ultralytics’或类似错误。原因虚拟环境未激活或依赖包未正确安装。解决确认终端前有(med_reminder)之类的虚拟环境提示符。在项目根目录下重新执行pip install -r requirements.txt。如果ultralytics安装失败尝试单独安装pip install ultralytics。Q2: 程序能运行但摄像头黑屏或打不开。原因A摄像头被其他程序占用如微信、Zoom。解决关闭所有可能使用摄像头的程序。原因BOpenCV使用的摄像头索引不对。解决在config/settings.yaml或代码中尝试将摄像头ID从0改为1或2。你可以写一个简单的OpenCV脚本来测试所有索引import cv2 for i in range(10): cap cv2.VideoCapture(i) if cap.isOpened(): print(fCamera index {i} is available.) cap.release()Q3: 程序运行时卡顿、延迟高。原因A模型推理在CPU上进行。解决检查detector.py中是否指定了devicecuda:0并确认PyTorch CUDA可用在Python中运行import torch; print(torch.cuda.is_available())应返回True。原因B模型尺寸太大或输入图片分辨率太高。解决尝试使用更小的模型如用yolov8n.pt替换yolov8s.pt。项目提供的权重可能已经是轻量级版本。在推理时降低imgsz参数如从640降到320但可能会轻微影响精度。在界面中降低视频显示的帧率FPS例如从30FPS降到15FPS。原因C界面刷新和视频处理在同一线程阻塞了UI。解决确保按照4.3节所述使用了多线程或异步处理将耗时的检测逻辑放在工作线程中。6.2 模型与检测类问题Q4: 模型检测不到药盒或者误检严重把水杯、遥控器当成药盒。原因A置信度阈值conf设置不当。解决在界面或配置中调高conf值如从0.25调到0.5减少误检如果漏检则适当调低。原因B训练数据不足或缺乏多样性。解决这是根本原因。需要收集更多数据特别是在不同光照、角度、背景以及有相似干扰物其他方形物体的场景下的药盒图片重新标注并训练模型。原因C实际部署环境与训练数据差异太大。解决尝试进行“在线数据增强”或使用测试时的增强TTA, Test Time Augmentation但更推荐收集部署环境的数据进行微调。Q5: 如何将模型部署到树莓派或手机等资源受限的设备步骤模型导出使用YOLOv8的export功能将.pt模型转换为更高效的格式。对于树莓派ONNX或OpenVINO格式是不错的选择对于手机可以考虑TFLite或CoreML。from ultralytics import YOLO model YOLO(weights/best.pt) model.export(formatonnx) # 导出为ONNX格式优化推理引擎在树莓派上可以使用onnxruntime或OpenVINO的推理引擎来加载ONNX模型它们对ARM CPU有优化。在安卓上可以使用TensorFlow Lite的API加载TFLite模型。轻量化模型训练时直接使用最小的yolov8n模型或者使用剪枝、量化等模型压缩技术进一步减小模型体积和加速。降低输入分辨率将推理时的图片尺寸从640降到320甚至224能大幅提升速度但会牺牲精度。6.3 功能与逻辑类问题Q6: 提醒逻辑不准确比如人还没走开就提醒或者一直不提醒。原因scheduler.py中的状态判断逻辑过于简单。优化持续检测不要只根据单帧判断。可以设置一个计数器当连续N帧如10帧约0.3秒都检测到药盒才判定为“药盒出现”连续M帧未检测到才判定为“药盒消失”。这能有效过滤瞬时抖动。区域判断在画面中定义一个“服药区域”如画面下半部分。只有当药盒的边界框中心点落在这个区域内才认为药盒可能被拿在手中。多时间窗口当前的逻辑可能只处理了一个时间窗口。确保逻辑能正确处理一天内多个服药时间点早、中、晚。Q7: 想增加新的提醒方式比如发送微信消息或让智能灯泡闪烁。思路这是一个很好的扩展点。在scheduler.py中当状态变为should_remind时除了调用界面弹窗可以新增一个通知管理器Notifier。class Notifier: def __init__(self): self.wechat_bot WeChatBot() # 假设有微信机器人封装 self.smart_home SmartHomeAPI() # 假设有智能家居API封装 def send(self, message): # 1. 本地弹窗/声音 show_dialog(message) play_sound(alert.wav) # 2. 发送微信 self.wechat_bot.send_to_family_group(message) # 3. 控制智能家居 self.smart_home.blink_lights(living_room, times3)然后在scheduler中调用notifier.send(reminder_message)即可。你需要自行实现或集成第三方库来完成微信推送如使用Server酱、企业微信应用消息和智能家居控制如通过MQTT协议控制Home Assistant。这个项目就像一颗种子它展示了一个完整的AI应用从数据到模型再到产品的闭环。你可以沿着任何一个方向深入下去深入研究YOLOv8的网络结构改进、尝试更复杂的多目标跟踪算法、设计更美观易用的界面、或者将其集成到真正的智能家居生态中。最重要的是通过亲手部署、运行、调试甚至修改它你将获得远比读十篇论文更实在的经验和信心。本文还有配套的精品资源点击获取
返回列表