【深度学习之YOLO8】视频流推断

官方V8模型下载

需要准备两个东西

  • simsun.ttc字体包
  • YOLOv8官方模型成品

ScreenCapture屏幕图像类

import cv2
import mss
import numpy as npclass ScreenCapture:"""parameters----------screen_resolution : Tuple[int, int]屏幕宽高,分别为x,ycapture_region : Tuple[float, float]实际截图范围,分别为x,y,(1.0, 1.0)表示全屏检测,越低检测范围越小(始终保持屏幕中心为中心)window_name : str显示窗口名exit_code : int结束窗口的退出键值,为键盘各键对应的ASCII码值,默认是ESC键"""def __init__(self, screen_resolution=(1920, 1080), capture_region=(0.5, 0.5), window_name='test', exit_code=0x1B):self.screen_capture = mss.mss()  # 实例化mss,并使用高效模式 mon=-1, optimize=Trueself.screen_width = screen_resolution[0]  # 屏幕的宽self.screen_height = screen_resolution[1]  # 屏幕的高self.capture_region = capture_region  # 捕获区域self.screen_center_x, self.screen_center_y = self.screen_width // 2, self.screen_height // 2  # 屏幕中心点坐标# 截图区域self.capture_width, self.capture_height = int(self.screen_width * self.capture_region[0]), int(self.screen_height * self.capture_region[1])  # 宽高self.capture_left, self.capture_top = int(0 + self.screen_width // 2 * (1. - self.capture_region[0])), int(0 + self.screen_height // 2 * (1. - self.capture_region[1]))  # 原点self.display_window_width, self.display_window_height = self.screen_width // 3, self.screen_height // 3  # 显示窗口大小self.monitor_settings = {'left': self.capture_left,'top': self.capture_top,'width': self.capture_width,'height': self.capture_height}self.window_name = window_nameself.exit_code = exit_codeself.img = Nonedef grab_screen_mss(self, monitor=None):if monitor is None:monitor = self.monitor_settings# cap.grab截取图片,np.array将图片转为数组,cvtColor将BRGA转为BRG,去掉了透明通道return cv2.cvtColor(np.array(self.screen_capture.grab(monitor)), cv2.COLOR_BGRA2BGR)

YOLO模型根据图片的数组推断

import cv2
import os
import numpy as np
from ultralytics import YOLO
from PIL import Image, ImageDraw, ImageFont
from ScreenCapture import ScreenCapture
def run(sc):# 实例化 YOLO 模型model = YOLO(r'D:\GitProjects\ultralytics\runs\models\yolov8l.pt' )# 设置字体fontStyle = ImageFont.truetype(r'D:\GitProjects\ultralytics\runs\SIMSUN.ttf' , 48, encoding=' utf-8' )  # 中文字体文件# 循环体while True:# 截屏img = Image.fromarray(np.uint8(sc.grab_screen_mss()))# 实例化一个图像绘制对象draw = ImageDraw.Draw(img)# 利用模型进行图像预测results = model.predict(source=img, conf=0.75, iou=0.75)# 遍历结果,detectionfor result in results:# detectionif len(result.boxes.xyxy) > 0:boxes_conf = np.array(result.boxes.conf.tolist())# 确定检测结果的数量boxes_conf_n = len(boxes_conf)if boxes_conf_n > 0:boxes_xyxy = result.boxes.xyxy.tolist()boxes_cls = result.boxes.cls.tolist()boxes_xy_center = []for i, box_xyxy in enumerate(boxes_xyxy):draw.rectangle(box_xyxy, outline=(0, 0, 255), width=5)draw.text((int(box_xyxy[0]), int(box_xyxy[1]) - 20), str(int(boxes_cls[i])), (0, 0, 255),font=fontStyle)boxes_xy_center.append((((box_xyxy[0] + box_xyxy[2]) / 2) + sc.capture_left,((box_xyxy[1] + box_xyxy[3]) / 2) + sc.capture_top))cv2.namedWindow(sc.window_name, cv2.WINDOW_NORMAL)  # cv2.WINDOW_NORMAL 根据窗口大小设置图片大小cv2.resizeWindow(sc.window_name, sc.display_window_width, sc.display_window_height)cv2.imshow(sc.window_name, np.array(img))if cv2.waitKey(1) & 0XFF == sc.exit_code:  # 默认:ESCcv2.destroyAllWindows()os._exit(0)
if __name__ == '__main__':sc = ScreenCapture(capture_region=(1, 1))run(sc)

效果

在这里插入图片描述

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

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

相关文章

【文献分享】比目前最先进的模型轻30%!高效多机器人SLAM蒸馏描述符!

论文题目:Descriptor Distillation for Efficient Multi-Robot SLAM 中文题目:高效多机器人SLAM蒸馏描述符 作者:Xiyue Guo, Junjie Hu, Hujun Bao and Guofeng Zhang 作者机构:浙江大学CAD&CG国家重点实验室 香港中文大学…

Vue系列第四篇:Vue2 + Element开发登录页面

Vue开发中Element是一个比较受欢迎的界面库,实际开发中Vue2搭配Element UI开发,Vue3搭配Element plus开发,今天就用Vue2 Element来开发登录页面。 目录 1.Element UI介绍 1.1官网 1.2element-ui安装 2.开发环境准备 2.1core-js安装 2…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

xxljob

调度中心: 下载调度中心的代码 下载sql,执行sql 更改配置 启动项目 输入地址即可访问界面 执行器: 新建springboot的项目,导入相关依赖 添加和执行器的配置 上面的就是读取配置文件的信息 把从配置文件获取的值set到对…

家政服务小程序制作攻略揭秘

想要打造一个家政服务小程序,但是又不懂编程和设计?不用担心!下面将为你详细介绍如何利用第三方平台,从零开始打造一个家政服务小程序。 首先,你需要找到一个适合的第三方平台,例如乔拓云网。在乔拓云网的【…

Rman配置参数详解

using target database control file instead of recovery catalog指的是使用目标数据库控制文件代替恢复目录 1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 设置rman备份过期条件:是用来决定那些备份不再需要了,它一共有三种可选项&…

进销存+小程序商城一体化,多门店管理解决方案-免费试用|亿发

为了适应市场变化和增强管理效率,越来越多的连锁,门店开始转向进销存小程序商城一体化,将进销存与订货商城结合,以实现更便捷、有效的经营模式,让企业迈向数字化时代。让我们一起来看看进销存小程序商城一体化系统相比…

MySQL索引失效原因及解决方案

MySQL索引失效原因及解决方案 在使用MySQL数据库时,索引是一种重要的性能优化工具。然而,有时候我们可能会遇到索引失效的情况。本文将介绍几种常见的MySQL索引失效原因以及相应的解决方案,并提供SQL语句的错误示例和正确示例。 1. 字符串字…

文本预处理——文本数据分析

目录 文本数据分析中文酒店评价语料获得训练集和验证集的标签数量分布获取训练集和验证集的句子长度分布获取训练集和验证集的正负样本长度散点分布获得训练集和验证集不同词汇总数统计获得训练集上正负的样本的高频形容词词云获得验证集上正负的样本的形容词词云 文本数据分析…

如何在APP开发中实现多平台兼容?

随着移动互联网的发展,各大 APP平台也如雨后春笋般崛起,现在市面上主流的 APP平台基本都已经支持 IOS、 Android、 WP等多个平台的开发,但对于一些只想专注于做一款 APP的企业来说,往往只能选择在一个平台开发一个 APP&#xff0c…

Kubernetes ConfigMap - Secret - 使用ConfigMap来配置 Redis

目录 ConfigMap : 参考文档:k8s -- ConfigMap - 简书 (jianshu.com) K8S ConfigMap使用 - 知乎 (zhihu.com) ConfigMap的作用类型: 可以作为卷的数据来源:使用 ConfigMap 来配置 Redis | Kubernetes 可以基于文件创建 Conf…

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递,到达L1-2路由器时,L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递; 因此L2区域的设备可以学习到L1区域的明细路由,进行访问;…

linux的一些基本指令第二期

rm rm -r 你要删除的目录名 加了-r 之后表示递归删除你要删除的目录 使用这个命名之后,他会一边递归到叶子节点,一边询问你是否要删除,然后会递归回来,在回来的途中删除: rm -rf 你要删除的目录名 强制执行删除操作…

c++类和对象(拷贝构造、运算符重载、初始化列表、静态成员、友元等)

一、拷贝构造 拷贝构造函数的特征: 1、拷贝构造函数是构造函数的一个重载形式; 2、拷贝构造函数的参数只有一个且必须是同类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。 在c中自定义类型传值传参的时…

微信批量删除好友怎么删除

微信好友太多想要批量删除不知道怎么删除,相信这个问题也困扰了不少人。那么怎样才能批量的删除微信好友?其实不难,可以通过新建标签删除的方式来实现批量删除好友。 怎么批量删除 微信批量删除好友的具体步骤如下: 1、新建标签 首…

CC1310F128系列 超低功耗低于1GHz射频 微控制器芯片

CC1310F128 是一款经济高效型超低功耗低于1GHz射频器件,凭借极低的有源射频和MCU电流消耗以及灵活的低功耗模式,CC1310F128可确保卓越的电池寿命,并能够在小型纽扣电池供电的情况下以及在能量采集应用中实现远距离工作。 改芯片有三个后缀&am…

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

第2章 逻辑分页、AutoFac注入、工作单元与仓储

1 CoreCms.Net.Model.ViewModels.Basics.IPageList<T> namespace CoreCms.Net.Model.ViewModels.Basics { ///<typeparam name"T">泛型类型实例(1个指定实体的类型实例)。</typeparam> /// <summary> /// 【逻辑分页列表--接口】 /// <…

阿里云部署 ChatGLM2-6B 与 langchain+ChatGLM

1.ChatGLM2-6B 部署 更新系统 apt-get update 安装git apt-get install git-lfs git init git lfs install 克隆 ChatGLM2-6B 源码 git clone https://github.com/THUDM/ChatGLM2-6B.git 克隆 chatglm2-6b 模型 #进入目录 cd ChatGLM2-6B #创建目录 mkdir model #进入目录 cd m…

python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

线性回归所解决的问题是把数据集的特征传入到模型中&#xff0c;预测一个值使得误差最小&#xff0c;预测值无限接近于真实值。比如把房子的其他特征传入到模型中&#xff0c;预测出房价&#xff0c; 房价是一系列连续的数值&#xff0c;线性回归解决的是有监督的学习。有很多场…