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

官方V8模型下载

需要准备两个东西

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

ScreenCapture屏幕图像类

import cv2
import mss
import numpy as np


class ScreenCapture:
    """
    parameters
    ----------
      screen_resolution : Tuple[int, int]
        屏幕宽高,分别为x,y
      capture_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=True
        self.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_name
        self.exit_code = exit_code
        self.img = None

    def 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)
        # 遍历结果,detection
        for result in results:
            # detection
            if 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:  # 默认:ESC
            cv2.destroyAllWindows()
            os._exit(0)
if __name__ == '__main__':
    sc = ScreenCapture(capture_region=(1, 1))
    run(sc)

效果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量化的综合性知识体系。特别是,信息可视化技术手段和方法的运用,可直观的展示主题的研究发展历程、研究现状、研究…

2023年Q2京东小家电市场数据分析(京东数据运营)

伴随人们对生活品质追求的提高,以及拥有新兴消费理念的年轻人逐渐成为消费主力,功能新潮、外观精致的小家电经常在电商平台销售榜单里“榜上有名”。本期我们便一起来分析Q2京东小家电市场中,一些较为热门的精致生活小电的行业大盘变动情况。…

使用node内置test runner,和 Jest say 拜拜

参考 https://nodejs.org/dist/latest-v20.x/docs/api/test.html#test-runner 在之前,我们写单元测试,必须安装第三方依赖包,而从node 20.0.0 版本之后,可以告别繁琐的第三方依赖包啦,可直接使用node的内置test runner…

js实现窗口的左右及上下拖拽

<template><div class"Drag2"><div class"box" ref"box"><div class"left"><!--左侧div内容--></div><div class"resize" title"左右侧边栏" draggable"true" …

Jupyter 安装、简单操作及工作路径更换

一、Jupyter下载安装 pip install jupyterAnaconda是Python另一个非常流行的发行版&#xff0c;它之后有着自己的叫做“conda”的安装工具。用户可以使用它来安装很多第三方包。然而&#xff0c;Anaconda会预装很多包&#xff0c;包括了Jupyter Notebook,所以若已经安装了Anac…

QT项目打包成软件进行发布的三种方式

目录 一、打包成绿色便携版 二、打包成单文件版 三、打包成可安装版本 本教程对应的IDE是Qt Creater。 保证绿色便携版能正常运行才能够打包成单文件版本和可安装版本。 一、打包成绿色便携版 特点&#xff1a;给别人发送的时候需要先制作成一个压缩包文件&#xff0c;解…

低代码未来的发展方向

&#x1f482; 个人网站:【办公神器】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 大的未来都是AI &#x…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

Ceph版本

每个Ceph的版本都有一个英文的名称和一个数字形式的版本编号 第一个 Ceph 版本编号是 0.1&#xff0c;发布于2008 年 1月。之后是0.2,0.3....多年来&#xff0c;版本号方案一直没变。 2015年 4月0.94.1 (Hammer 的第一个修正版) 发布后&#xff0c;为了避免 0.99 (以及 0.100…

vue预览和下载txt、PDF、execl等在线文件

因为浏览器默认能直接打开TXT、PDF等文件索引默认就是点击链接打开文件。但是浏览器却又不能在线打开execl、world等文件。 现在我们可以统一的实现文件的预览以及下载。 下载文件 downloadfile方法 downloadfile(url,fileName){const newUrl url;const x new XMLHttpRequ…

解决报错:Can‘t connect to HTTPS URL because the SSL module is not available.

本人今天准备打开安装一个label-studio包&#xff0c;试了很多次&#xff0c;接连报如下错误&#xff0c;因此我就去找了一些解决方案&#xff0c;现在总结如下&#xff1a; 1、报错信息如下 2、解决方案如下&#xff1a; github上有对应的解决方案&#xff0c;链接&#xff…

干货分享 | TSMaster图形模块功能详解(一)—— 以CAN信号为例

“ 本文目录&#xff1a; 1、信号的导入与删除 1.1 CAN信号的导入 1.2 添加系统变量 1.3 自定义信号 1.4 信号的删除 1.5 清除信号数据 2、图形分栏 2.1 添加分栏 2.2 平均分配分栏高度 2.3 分栏上移与下移 2.4 删除分栏 3、暂停与启动和禁止图形 4、高亮信号相关操…

day39-Password Strength Background(密码强度背景)

50 天学习 50 个项目 - HTMLCSS and JavaScript day39-Password Strength Background&#xff08;密码强度背景&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&quo…

【yolov7】训练自己的数据集-实践笔记

【yolov7】训练自己的数据集-实践笔记 使用yolov7训练自己的数据集&#xff0c;以RSOD数据集为例&#xff0c;图像数量976&#xff0c;一共四类。 yolov7源码&#xff1a;https://github.com/WongKinYiu/yolov7 同时在该网址下载好预训练文件&#xff0c;直接放到yolov7-main…

一份关于windows server服务器的安全漏洞处理建议(来自绿盟安全评估)

文章目录 前言一、服务器主机存在漏洞应该怎么修复&#xff1f; 二、报告中的高危漏洞&#xff08;部分展示&#xff09;1.Microsoft Windows CredSSP 远程执行代码漏洞(CVE-2018-0886)2.SSL/TLS协议信息泄露漏洞(CVE-2016-2183)3.SSL/TLS RC4 信息泄露漏洞(CVE-2013-2566)4.SS…

opencv-21 alpha 通道详解(应用于 图像增强,合成,蒙版,特效 等)

什么是alpha 通道&#xff1f; Alpha通道是计算机图形学中用于表示图像透明度的一种通道。在一个图像中&#xff0c;通常会有三个颜色通道&#xff1a;红色&#xff08;R&#xff09;、绿色&#xff08;G&#xff09;、蓝色&#xff08;B&#xff09;&#xff0c;它们合在一起…

CSDN周赛65期简要题解

最近几期周赛里&#xff0c;貌似 Python 又变成 C 站的亲儿子了。输入形式是列表还不过瘾&#xff0c;现在输出形式也要求是列表&#xff0c;而且是连一个逗号、空格、中括号都不能少的 Python 标准列表形式。虽然对 Python 来说是信手拈来&#xff0c;但总要考虑一下其他编程语…

基于vue实现权限控制,动态渲染菜单栏

Vue菜单权限动态路由 实现原理&#xff1a;用户登录&#xff0c;服务端返回相关权限&#xff0c;进行持久化存储&#xff0c;筛选动态路由&#xff0c;同时菜单栏也需动态渲染 静态路由 静态路由&#xff0c;也叫常量路由&#xff0c;即所有角色都可以访问到的路由界面。如:…

chrome解决http自动跳转https问题

1.地址栏输入&#xff1a; chrome://net-internals/#hsts 2.找到底部Delete domain security policies一栏&#xff0c;输入想处理的域名&#xff0c;点击delete。 3.再次访问http域名不再自动跳转https了。

使用的华为云RDS数据库不小心把数据删了

目录 前言恢复qp文件帮助文档表级时间点恢复删除数据的时候要注意 前言 华为云查数据的时候前面是有个序号的&#xff0c;删除数据的时候不小心把序号看成id了&#xff0c;导致误删数据。 注&#xff1a;图片如果看不清楚可以点击放大观看&#xff01; 恢复qp文件 华为云每天…