1、下载YOLOv8模型文件

下载地址:https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics

2、编写python脚本 aaa.py

import cv2
import numpy as np
from ultralytics import YOLO
import matplotlib.pyplot as pltdef plot_detection(image, boxes, scores, class_ids, class_names, conf_threshold=0.5):"""将检测结果绘制到图像上"""# 创建图像的副本用于绘制img_with_detections = image.copy()# 定义颜色列表,为不同类别使用不同颜色colors = [(0, 255, 0), (255, 0, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255)]# 遍历所有检测结果for i, (box, score, class_id) in enumerate(zip(boxes, scores, class_ids)):# 过滤低置信度的检测结果if score < conf_threshold:continue# 获取框的坐标 (x1, y1, x2, y2)x1, y1, x2, y2 = map(int, box)# 选择颜色 (循环使用颜色列表)color = colors[class_id % len(colors)]# 1. 绘制边界框cv2.rectangle(img_with_detections, (x1, y1), (x2, y2), color, 2)# 2. 绘制标签背景label = f"{class_names[class_id]}: {score:.2f}"(label_width, label_height), baseline = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)cv2.rectangle(img_with_detections, (x1, y1 - label_height - 5), (x1 + label_width, y1), color, -1)  # -1 表示填充矩形# 3. 绘制标签文本cv2.putText(img_with_detections, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)return img_with_detectionsdef main():# 1. 加载预训练的 YOLOv8n 模型print("正在加载 YOLOv8n 模型...")model = YOLO('yolov8n.pt')  # 会自动下载模型如果不存在# 2. 加载要检测的图像image_path = '123.jpg'  # 替换为你的图片路径print(f"正在加载图像: {image_path}")image = cv2.imread(image_path)if image is None:print(f"错误: 无法加载图像 {image_path}")return# 3. 进行推理print("正在进行推理...")results = model(image, verbose=False)  # verbose=False 减少输出信息# 4. 提取检测结果# 获取第一个结果(因为只输入了一张图片)result = results[0]# 提取边界框信息boxes = result.boxes.xyxy.cpu().numpy()      # 边界框坐标 [x1, y1, x2, y2]scores = result.boxes.conf.cpu().numpy()     # 置信度分数class_ids = result.boxes.cls.cpu().numpy().astype(int)  # 类别ID# 获取类别名称class_names = result.namesprint(class_names)print(f"检测到 {len(boxes)} 个对象")for i, (box, score, class_id) in enumerate(zip(boxes, scores, class_ids)):print(f"对象 {i+1}: {class_names[class_id]} (置信度: {score:.3f})")# 5. 将检测结果绘制到图像上print("正在绘制检测结果...")result_image = plot_detection(image, boxes, scores, class_ids, class_names)# 6. 保存和显示结果output_path = 'detection_result123-x.jpg'cv2.imwrite(output_path, result_image)print(f"结果已保存到: {output_path}")# 使用 matplotlib 显示结果(支持中文显示)plt.figure(figsize=(12, 8))# 将 BGR 转换为 RGB 用于 matplotlib 显示result_image_rgb = cv2.cvtColor(result_image, cv2.COLOR_BGR2RGB)plt.imshow(result_image_rgb)plt.title('YOLOv8 result')plt.axis('off')plt.tight_layout()#plt.savefig('detection_result_plt.jpg', dpi=300, bbox_inches='tight')plt.show()def detect_specific_classes():"""示例:只检测特定的类别(如可能类似于电表的物体)"""# 可能类似于电表的 COCO 类别target_classes = {67: 'cell phone',    # 手机 - 最可能检测到数字屏幕62: 'tvmonitor',     # 显示器75: 'remote',        # 遥控器74: 'clock'          # 时钟}# 加载模型和图像model = YOLO('yolov8n.pt')image = cv2.imread('your_meter_image.jpg')# 推理results = model(image, verbose=False)result = results[0]# 提取结果boxes = result.boxes.xyxy.cpu().numpy()scores = result.boxes.conf.cpu().numpy()class_ids = result.boxes.cls.cpu().numpy().astype(int)class_names = result.names# 过滤出目标类别filtered_boxes = []filtered_scores = []filtered_class_ids = []for box, score, class_id in zip(boxes, scores, class_ids):if class_id in target_classes and score > 0.3:  # 降低阈值filtered_boxes.append(box)filtered_scores.append(score)filtered_class_ids.append(class_id)print(f"检测到可能的目标: {target_classes[class_id]} (置信度: {score:.3f})")# 绘制结果if filtered_boxes:result_image = plot_detection(image, filtered_boxes, filtered_scores, filtered_class_ids, class_names, conf_threshold=0.3)cv2.imwrite('meter_detection_result.jpg', result_image)print("电表检测结果已保存")else:print("未检测到可能的目标物体")if __name__ == "__main__":# 运行主函数进行通用物体检测main()# 或者运行特定类别检测(用于电表检测尝试)# detect_specific_classes()

3、运行python脚本

python aaa.py

正在加载 YOLOv8n 模型...
正在加载图像: 10.jpg
正在进行推理...
检测品类:{0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 
7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 11: 'stop sign', 12: 
'parking meter', 13: 'bench', 14: 'bird', 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 
19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 
'umbrella', 26: 'handbag', 27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis', 31: 
'snowboard', 32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove', 36:'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle', 40: 'wine glass', 41: 
'cup', 42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl', 46: 'banana', 47: 'apple', 48: 
'sandwich', 49: 'orange', 50: 'broccoli', 51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 
'donut', 55: 'cake', 56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining 
table', 61: 'toilet', 62: 'tv', 63: 'laptop', 64: 'mouse', 65: 'remote', 66: 'keyboard',67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink', 72: 
'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors', 77: 'teddy bear', 78:'hair drier', 79: 'toothbrush'}检测到 2 个对象
对象 1: chair (置信度: 0.968)
对象 2: chair (置信度: 0.946)
正在绘制检测结果...
结果已保存到: detection_result10.jpg

python脚本、模型文件、图片文件在一个目录中

参考官网内容:https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93923.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93923.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93923.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matplotlib数据可视化实战:Matplotlib子图布局与管理入门

Matplotlib多子图布局实战 学习目标 通过本课程的学习&#xff0c;学员将掌握如何在Matplotlib中创建和管理多个子图&#xff0c;了解子图布局的基本原理和调整方法&#xff0c;能够有效地展示多个数据集&#xff0c;提升数据可视化的效果。 相关知识点 Matplotlib子图 学习内容…

【python实用小脚本-194】Python一键给PDF加水印:输入文字秒出防伪文件——再也不用开Photoshop

Python一键给PDF加水印&#xff1a;输入文字秒出防伪文件——再也不用开Photoshop PDF加水印, 本地脚本, 零会员费, 防伪标记, 瑞士军刀 故事开场&#xff1a;一把瑞士军刀救了投标的你 周五下午&#xff0c;你把 100 页标书 PDF 发给客户&#xff0c;却担心被同行盗用。 想加水…

开源 C++ QT Widget 开发(四)文件--二进制文件查看编辑

文章的目的为了记录使用C 进行QT Widget 开发学习的经历。临时学习&#xff0c;完成app的开发。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 相关链接&#xff1a; 开源 C QT Widget 开发&#xff08;一&#xff09;工程文件结构-CSDN博客 开源 C…

【密码学实战】X86、ARM、RISC-V 全量指令集与密码加速技术全景解析

前言 CPU 指令集是硬件与软件交互的核心桥梁&#xff0c;其设计直接决定计算系统的性能边界与应用场景。在数字化时代&#xff0c;信息安全依赖密码算法的高效实现&#xff0c;而指令集扩展则成为密码加速的 “隐形引擎”—— 从服务器端的高吞吐量加密&#xff0c;到移动端的…

2025-08-21 Python进阶2——数据结构

文章目录1 列表&#xff08;List&#xff09;1.1 列表常用方法1.2 列表的特殊用途1.2.1 实现堆栈&#xff08;后进先出&#xff09;1.2.2 实现队列&#xff08;先进先出&#xff09;1.3 列表推导式1.4 嵌套列表推导式2 del 语句3 元组&#xff08;Tuple&#xff09;4 集合&…

告别手工编写测试脚本!Claude+Playwright MCP快速生成自动化测试脚本

在进行自动化测试时&#xff0c;前端页面因为频繁迭代UI 结构常有变动&#xff0c;这往往使得自动化测试的脚本往往“写得快、废得也快”&#xff0c;维护成本极高。在大模型之前大家往往都会使用录制类工具&#xff0c;但录制类工具生成的代码灵活性较差、定位方式不太合理只能…

一款更适合 SpringBoot 的API文档新选择(Spring Boot 应用 API 文档)

SpringDoc&#xff1a;Spring Boot 应用 API 文档生成的现代化解决方案 概述 SpringDoc 是一个专为 Spring Boot 应用设计的开源库&#xff0c;能够自动生成符合 OpenAPI 3 规范的 API 文档。它通过扫描项目中的控制器、方法注解及相关配置&#xff0c;动态生成 JSON/YAML/HTML…

文献阅读 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 来自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React学习(九)

目录&#xff1a;1.react-进阶-antd-新增2.react-进阶-antd-删除选中1.react-进阶-antd-新增新增代码&#xff0c;跟需改的代码类似&#xff0c;直接copy修改组件代码进行修改userEffect可以先带着&#xff0c;没啥用A6组件用到的函数跟修改的也类似&#xff1a;这个useEffect函…

零基础从头教学Linux(Day 17)

三层交换机一、三层交换机的配置1.关于如何配置三层交换机&#xff0c;首先我们应该先创建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任务十四 推荐页面接口开发

一、接口准备 在对接qq音乐接口之前,首先要将之前的项目,一定要记得备份一份; 备份完成之后,首先要在vscode终端安装axios,这个是请求后端的工具,和之前的ajax一样,都是请求后端的工具。只不过axios更专业化,跟强大 至于qq音乐接口怎么获取,一般有两个途径,第一个是…

医疗AI与医院数据仓库的智能化升级:异构采集、精准评估与高效交互的融合方向(下)

核心功能创新详解: 统一门户与角色化工作台: 统一入口: 用户通过单一URL登录,系统根据其角色和权限自动呈现专属工作台。 角色化工作台: 临床医生工作台: 首屏展示常用患者查询入口、快速统计(如“我的患者检验异常趋势”)、相关临床文献推荐、待处理任务(如报告审核)…

数据库面试常见问题

数据库 Delete Truncate Drop 区别 答:这三个操作都是针对数据库的表进行操作,都有删除表的功能,其中的区别在于: Delete:只将表中的数据进行删除,不删除定义不释放空间,是dml语句,需要提交事务,如果不想删除可以回滚。delete每次删除一行,并在事务日志中为所删除…

用nohup setsid绕过超时断连,稳定反弹Shell

在We渗透过程中&#xff0c;我们常常会利用目标系统的远程代码执行&#xff08;RCE&#xff09;漏洞进行反弹Shell。然而&#xff0c;由于Web服务器&#xff08;如PHP、Python后端&#xff09;的执行环境通常存在超时限制&#xff08;如max_execution_time或进程管理策略&#…

Java设计模式-模板方法模式

Java设计模式-模板方法模式 模式概述 模板方法模式简介 核心思想&#xff1a;定义一个操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;将算法中某些步骤的具体实现延迟到子类中完成。子类可以在不改变算法整体结构的前提下&#xff0c;重定义这些步骤的行为&…

Centos7物理安装 Redis8.2.0

Centos7物理安装 Redis8.2.0一、准备依赖环境首先安装编译 Redis 所需的依赖&#xff1a;# CentOS/RHEL系统 yum install -y gcc gcc-c make wget 二、下载并编译 Redis 8.2.0# 1. 下载Redis 8.2.0源码包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解压…

牛津大学xDeepMind 自然语言处理(3)

条件语言模型无条件语言模型 概率计算&#xff1a;通过链式法则分解为预测下一词概率&#xff08;将语言建模问题简化为建模给定前面词语历史的下一个词的概率&#xff09;基于循环神经网络的无条件语言模型&#xff1a;根据历史词语预测下一个词的概率条件语言模型 定义&#…

Vue2.x核心技术与实战(一)

目录 一、Vue2.x:快速上手+插值表达式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 创建实例 1.1.3 插值表达式 { { }} 1.1.4 响应式特性 1.1.5 开发者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU学习笔记 - 自科三面前端方向实战演示

本来是准备写完二面直接开始写算法三面的&#xff0c;maimai那个封面图我都做好了。但是可恶的出题人说要等我出完解析再针对性避开出题&#xff0c;所以swan决定把那个先搁置&#xff0c;本文我们先以2023年的自科三面前端方向题为例带各位快速入门前端三件套&#xff08;因为…

前后端联合实现文件上传,实现 SQL Server image 类型文件上传

1、前端 Vue3QualityFileInfoDialog.vue<script setup lang"ts" name"QualityFile"> ...... // 上传&#xff0c;防抖 const onUploadClick debounce(() > {// 模拟点击元素if (fileInputRef.value) {// 重置以允许重复选择相同文件fileInputRef…