☰
计算机毕业设计:YOLO目标检测+LLM多模态大模型驱动的电力输电线路缺陷检测分析预警系统(源码+文档+PPT+讲解)
2026/9/29 22:33:52 网站建设 项目流程

1. 输电线路巡检为什么需要 YOLO + LLM 多模态

电力输电线路长期暴露在野外,鸟巢、风筝、塑料薄膜、导线断股、绝缘子破损这些隐患几乎每年都会遇到。传统做法是无人机拍完照片,人工一张张回看,百公里线路排查要花好几天,长时间盯着屏幕还容易漏掉小目标。更麻烦的是,就算发现了隐患,也只能判断“有或没有”,至于这个隐患到底多严重、多久内必须处理、要带什么工具,还得靠老师傅二次研判。

这套毕业设计想解决的就是这条链路:用 YOLO 做缺陷目标检测,把隐患框出来;再把裁剪图和场景信息交给 LLM 多模态大模型,让它输出风险等级、影响范围和处置建议;最后按等级触发预警。对做毕设的同学来说,这个题目覆盖了目标检测、多模态调用、后端接口、可视化看板,工作量和技术深度都够,答辩时也讲得出东西。

下面我会按“环境准备 → YOLO 训练配置 → 多模态分析配置 → 全链路验证 → 排障”的顺序,给出可以直接复制的骨架代码和参数。你拿到后换成自己的数据集路径和 API Key 就能跑。

2. TaoToken 前置准备:模型调用入口与 Key 获取

多模态分析这一环,毕设里最省事的做法是走统一的大模型 API 网关,而不是自己本地部署一个几十 GB 的视觉语言模型。本地部署对显卡要求高,答辩机器不一定扛得住;走 API 则只要网络能通、Key 有效,就能稳定拿到结构化结果。

我这边用的是 TaoToken 作为模型调用入口,它把对话模型和多模态模型的调用方式统一了,配置项少,适合毕设这种要快速跑通全链路的场景。你需要先拿到 API Key,再确认要调用的多模态模型名称。

操作路径如下:

  • 注册并登录后,进入控制台创建 API Key:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
  • Key 管理页面在:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
  • 接口文档(请求体字段、返回结构)在:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
  • 想先在网页上试一下模型对话效果,可以用:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite

注意:API Key 不要写死在提交的源码里,用.env或环境变量读取,答辩演示时也避免直接投屏 Key。

API 基础地址是https://taotoken.net/api,后面所有请求都基于这个地址拼接。如果你后面要做长期编码、Agent 类功能,可以了解 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite

3. 可复制配置:YOLO 训练参数与多模态调用骨架

3.1 项目目录结构

先约定目录,后面代码都按这个来,避免路径混乱:

power-inspect/ ├── datasets/ │ └── transmission/ │ ├── images/{train,val} │ └── labels/{train,val} ├── weights/ │ └── yolov8n.pt ├── configs/ │ ├── data.yaml │ └── train.yaml ├── detect/ │ └── infer.py ├── llm/ │ └── multimodal_client.py ├── pipeline/ │ └── run_chain.py └── .env

3.2 数据集配置 data.yaml

输电线路隐患类别按你的标注来,这里给 12 类的示例:

path: ./datasets/transmission train: images/train val: images/val names: 0: bird_nest 1: kite 2: balloon 3: plastic_film 4: broken_strand 5: insulator_damage 6: bolt_loose 7: tower_rust 8: foreign_object 9: icing 10: tree_barrier 11: construction_machine

3.3 YOLO 训练参数 train.yaml

针对小目标(绝缘子破损、断股)建议加一层 P2 小目标检测头,输入尺寸拉到 960:

model: weights/yolov8n.pt data: configs/data.yaml epochs: 80 imgsz: 960 batch: 8 device: 0 workers: 4 optimizer: AdamW lr0: 0.001 lrf: 0.01 cos_lr: true warmup_epochs: 3 patience: 20 close_mosaic: 10 project: runs/transmission name: yolov8n_p2

启动训练:

yolo detect train cfg=configs/train.yaml

训练完成后权重在runs/transmission/yolov8n_p2/weights/best.pt。如果显存不够,把batch降到 4、imgsz降到 640 先跑通,再逐步加。

3.4 多模态调用客户端

这是把检测结果送进大模型的核心文件,用 OpenAI 兼容格式调用多模态接口:

# llm/multimodal_client.py import os import base64 import json import requests from dotenv import load_dotenv load_dotenv() API_BASE = "https://taotoken.net/api" API_KEY = os.getenv("TAOTOKEN_API_KEY") MODEL = os.getenv("MULTIMODAL_MODEL", "gpt-4o") def encode_image(path: str) -> str: with open(path, "rb") as f: return base64.b64encode(f.read()).decode("utf-8") def analyze_defect(image_path: str, detections: list) -> dict: """把裁剪图和检测结果交给多模态模型,返回结构化分析""" b64 = encode_image(image_path) det_text = json.dumps(detections, ensure_ascii=False) prompt = f"""你是电力输电线路巡检专家。图中检测到以下隐患: {det_text} 请输出 JSON,字段包括: risk_level(一般/较重/严重/紧急)、 impact(可能引发的事故及波及范围)、 action(多久内到场、携带工具、临时防护措施)。 只输出 JSON,不要多余文字。""" payload = { "model": MODEL, "messages": [ { "role": "user", "content": [ {"type": "text", "text": prompt}, {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}} ] } ], "temperature": 0.2 } resp = requests.post( f"{API_BASE}/v1/chat/completions", headers={ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" }, json=payload, timeout=60 ) resp.raise_for_status() content = resp.json()["choices"][0]["message"]["content"] return json.loads(content)

.env文件:

TAOTOKEN_API_KEY=你的Key MULTIMODAL_MODEL=gpt-4o

提示:temperature设低一点(0.1~0.3),让模型输出更稳定,方便你后面用json.loads解析。如果模型返回带了 ```json 包裹,先做一次字符串清洗再解析。

4. 全链路验证:检测 → 分析 → 预警

4.1 检测脚本 infer.py

# detect/infer.py from ultralytics import YOLO import cv2 def detect(image_path, weights="runs/transmission/yolov8n_p2/weights/best.pt"): model = YOLO(weights) results = model.predict(image_path, imgsz=960, conf=0.35, iou=0.5) detections = [] img = cv2.imread(image_path) for r in results: for box in r.boxes: cls_id = int(box.cls[0]) conf = float(box.conf[0]) xyxy = box.xyxy[0].tolist() detections.append({ "class_id": cls_id, "class_name": model.names[cls_id], "confidence": round(conf, 3), "bbox": [round(v, 1) for v in xyxy] }) x1, y1, x2, y2 = map(int, xyxy) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2) cv2.imwrite("runs/result_vis.jpg", img) return detections

4.2 串联脚本 run_chain.py

# pipeline/run_chain.py from detect.infer import detect from llm.multimodal_client import analyze_defect def run(image_path): dets = detect(image_path) if not dets: print("未检测到隐患") return print(f"检测到 {len(dets)} 处隐患:{dets}") analysis = analyze_defect(image_path, dets) print("风险等级:", analysis["risk_level"]) print("影响评估:", analysis["impact"]) print("处置建议:", analysis["action"]) if analysis["risk_level"] == "紧急": print("[预警] 触发声光告警 + 短信推送") elif analysis["risk_level"] == "严重": print("[预警] 5分钟内生成工单") if __name__ == "__main__": run("datasets/transmission/images/val/sample_01.jpg")

4.3 预期成功结果

跑通后终端大致输出:

检测到 2 处隐患:[{'class_name': 'bird_nest', 'confidence': 0.91, ...}, ...] 风险等级: 严重 影响评估: 鸟巢靠近导线,雨天可能引发单相接地,波及本段线路供电 处置建议: 24小时内安排带电作业清除,携带绝缘操作杆、防护手套,临时设置警示标识 [预警] 5分钟内生成工单

同时runs/result_vis.jpg会保存带框的可视化图,这张图直接放进论文和 PPT 里,答辩时展示效果很直观。

5. 本篇常见错排查

报错一:ModuleNotFoundError: No module named 'ultralytics'说明环境没装 YOLO 库。执行pip install ultralytics python-dotenv requests opencv-python,注意 Python 版本建议 3.9~3.11,太高版本部分依赖轮子还没跟上。

报错二:401 Unauthorized或invalid api keyKey 没读到或写错了。先确认.env和脚本在同一工作目录,load_dotenv()能加载到;再确认请求头是Bearer 你的Key,中间有空格。可以先用模型对话页面确认 Key 本身可用:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite

报错三:json.decoder.JSONDecodeError模型返回里带了 Markdown 代码块标记。在analyze_defect里加清洗:

content = content.strip().removeprefix("```json").removeprefix("```").removesuffix("```").strip()

报错四:检测框位置偏移或漏检小目标多半是训练时imgsz和推理时不一致。训练用 960,推理也要 960;小目标漏检可以调低conf到 0.25 试试,但别太低,否则误检会变多。

报错五:CUDA out of memory把batch降到 2 或 4,或者先用 CPU 跑通流程(device: cpu),答辩演示对速度要求没那么高。

报错六:多模态分析耗时过长图片 base64 太大。送模型前先把裁剪图 resize 到长边 768 以内,既省 token 又快,识别效果基本不受影响。

6. 毕设交付物与后续接入建议

这套系统的交付物建议按四块整理:源码(检测 + 多模态 + 后端接口)、文档(需求、架构、测试用例)、PPT(背景痛点、架构图、实测指标、演示截图)、讲解稿(按“检测→分析→预警”三段讲,每段配一张结果图)。论文里的实测指标表,把单张检测耗时、多模态分析耗时、漏检率、准确率列清楚,数据用你自己跑出来的,别照抄。

如果你后面想把系统做成可交互的 Web 看板,后端用 FastAPI 把run_chain包成接口,前端用 Vue 轮询展示预警列表即可。接口文档和字段说明参考:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite

长期做编码类功能、想让模型帮你写检测后处理脚本或前端页面,可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite

最后提醒一句:答辩前一定用离线样例图把全链路跑三遍,确认 Key 有效、权重路径正确、模型返回能解析。演示时网络波动是最大的不确定因素,提前准备好一份“检测结果 + 分析结果”的本地缓存 JSON,万一接口超时也能继续讲。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询