机器视觉实用工具集NO.18——使用YOLO8实时检测物体,性能爆棚

news2024/12/23 8:14:57

目录

  • 前言
  • 安装YOLO8
  • 安装YOLO8的模型
  • 程序源代码
  • 总结

前言

安装了pytorch框架以后,就可以玩一些开源的深度学习框架了,比如YOLO8,是基于pytorch框架的,关于如何安装pytorch框架,可以参考上篇文章链接《pytorch深度学习框架CUDA版本环境安装记录》
经过一番改造,用YOLO8做了一个实时在线视频物体检测的程序,结果显示,yolo8的实时性非常不错,可以用于机器人等实时的场景。
在这里插入图片描述

安装YOLO8

这个网上有很多了,安装非常简单,安装好pytorch框架后,可以直接用:
pip install ultralytics指令安装就可以
详细见作者github地址
安装的时候,可能最后会报一些安装依赖错误:
如numpy版本不对之类的,我没有理会,好像对运行不太有影响

安装YOLO8的模型

可以直接从网上下载,有很多渠道,
模型下载地址链接,本示例用的是yolov8n.pt,把模型下载到本地文件夹。
在这里插入图片描述

程序源代码

之前做过一篇yolo3的工具代码,基本差不多,用一个python的UI框架,PySimpleGUI,非常好用,关于这个UI的介绍,可以参考博文《python机器人视觉编程——入门篇(下)》。然后是opencv库。程序的所有代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 27 10:11:05 2023

@author: JAMES FEI <https://blog.csdn.net/kanbide>
Copyright (C) 2021 FEI PANFENG, All rights reserved.
THIS SOFTEWARE, INCLUDING DOCUMENTATION,IS PROTECTED BY COPYRIGHT CONTROLLED 
BY FEI PANFENG ALL RIGHTS ARE RESERVED.
"""

from ultralytics import YOLO
import cv2
import time
import PySimpleGUI as sg
import numpy as np

# Load a model
model = YOLO("yolov8n.pt")  # load an official model

#cap=cv2.imread("test.png")
cap=cv2.VideoCapture(0)
# Predict with the model and initail
results = model("test.png")  # predict on an image
#标签
lables=results[0].names
def resizeoutput(output,maxw=600,maxh=500):
    H=output.shape[0]    
    W=output.shape[1]
    ratio=None
    if W>=H:
        if W>maxw:
            gsizew=maxw
            gsizeh=int(H/W*maxw)
            ratio=maxw/W
        else:
            gsizew=W
            gsizeh=H
            ratio=1
    else:
        if H>maxh:
            gsizeh=maxh
            gsizew=int(W/H*maxh)
            ratio=maxh/H
        else:
            gsizew=W
            gsizeh=H
            ratio=1
    pic = cv2.resize(output, (gsizew, gsizeh), interpolation=cv2.INTER_LINEAR)
    return pic,ratio 

def getboxs(yoloresult,lables=lables):
    #获取识别框信息
    BOXS=[]
    outputs=yoloresult[0].boxes    
    class_IDs=outputs.cls.tolist()
    layables=[]
    for i in class_IDs:
        layables.append(lables[int(i)])
        
    confidences=outputs.conf.tolist()
    boxes=outputs.xyxy.tolist()
    if len(boxes):
        BOXS=[boxes,layables,confidences]    
    
    return BOXS
def drawbox(img,box,filte=0.5):    
    if type(box)==type([]):    
        if len(box)>0:
            for i in range(len(box[0])):        
                x,y,x1,y1=box[0][i]
                x=int(x)
                y=int(y)
                x1=int(x1)
                y1=int(y1)
                name=box[1][i]
                confi=box[2][i]
                if confi>=filte:
                    text = "{}: {:.4f}".format(name, confi)
                    cv2.putText(img, text, (x, y - 5), cv2.FONT_ITALIC, 0.5, [0, 255, 0], 2)
                    cv2.rectangle(img, (x, y), (x1, y1), (255,255,0), 2)

def video_viewer(cap,model=model):
    """
    视频显示器
    """
    layout= [   [sg.Text(size=(15,1),  key='-OUTPUT-')],
                [sg.Image(filename='', key='-IMAGE-')],
                [sg.Button('Exit')]
                ]
    win = sg.Window('YOLO视频检测', layout)
         
    while True:
        event, values = win.read(timeout=100)
        ret, frame = cap.read()
        if ret:
            frame,ra=resizeoutput(frame,maxh=400)
            results = model(frame) 
            boxs=getboxs(results)         
            drawbox(frame,boxs)
        imgbytes = cv2.imencode('.png', frame)[1].tobytes()
        win['-IMAGE-'].update(data=imgbytes)
        #win['-OUTPUT-'].update("video window:"+str(task0.is_alive()))
        if event is None or event == 'Exit':
            win.active  = False
            win.close()
            del win
            cap.release()
            break  
video_viewer(cap)

在这里插入图片描述

总结

后续可以用YOLO8开发一些好玩的东西了,尽请期待!关注!

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

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

相关文章

我看看哪个靓仔还没把Github Copilot用起来?

本人经常分享有价值的生产力工具、技术、好物与书籍&#xff0c;可关注同名公众&#x1f42d;并设为&#x1f31f;星标&#xff0c;第一时间获得更新 Github Copilot 是一个AI编程助手&#xff0c;其使用 OpenAI CodeX 在你的编辑器中实时建议代码或给你实现整个功能。 视频版介…

C++基础 类的自动转换和强制类型转换

参考 C Primer Plus (第6版) 类自动转换 接受一个参数的构造函数允许使用赋值语法将对象初始化一个值 Classname object value; 等价于 ClassName object(value); 等价于 ClassName object ClassName(value); 只有接受一个参数的构造函数才能作为转换构造函数(某类型->…

windows下开发ffmpeg(亲测可用)下载FFmpeg的源码、库、链接文件(二)

1,首先安装opencv在clion下的使用 参见我的另外一篇文章Windows上使用CLion配置OpenCV环境,亲测可用的方法 2,亲测可以用,建议使用迅雷下载ffmpeg(全部的包都有) Windows10 下 CLion 配置 FFmpeg 开发环境 3,参考文章,碰到系统提示缺少.dll库,问题解决 参考文章1:…

HCIA-RS实验-STP和RSTP(1)

这篇文章开始前&#xff0c;先简单说下这2个协议&#xff1b; 本文介绍了STP和RSTP的基本原理、优缺点以及应用场景。STP和RSTP都是生成树协议&#xff0c;主要作用于避免网络中的环路&#xff0c;保证数据包能够正常转发。在实际应用中&#xff0c;需要根据实际情况选择合适的…

6.MapReduce(1)

本章节将分为InputFormat,split,OutputFormat三个小章节来介绍框架原理 1.InputFormat 1.1 切片: 将输入数据分成几份,每份交给一个MapTask去处理(getSplit方法) 对于MapRedcue,切片发生在客户端,任务提交的时候 机制:MapTask并行度决定机制 切了多少片,就开启多少个M…

颠覆世界的“数字孪生”到底是什么?这篇文章带你搞懂全部内涵!

在春节很火的电影《流浪地球2》中&#xff0c;已经去世的小女孩图丫丫&#xff0c;被她的父亲重新将其个人的信息模型导入最强大的计算机而“复活”了。屏幕中的丫丫就是一个数字孪生体。我们可以看到她的一颦一笑&#xff0c;听到她跟你的对话&#xff0c;看到她做出反应。这就…

【细读Spring Boot源码】启动步骤

前言 版本&#xff1a;spring-boot-2.7.3 | spring-context-5.3.22 main函数 直接使用静态函数启动 public static void main(String[] args) {SpringApplication.run(SettlleApplication.class, args); }静态帮助程序&#xff0c;可用于使用默认设置从指定源运行SpringAppli…

港联证券|人民币大消息!美科技股涨嗨,微软一夜暴增超万亿!

当地时间26日&#xff0c;美股三大股指收盘涨跌纷歧。到收盘&#xff0c;道指报33301.87点&#xff0c;下跌0.68%&#xff1b;标普500指数报4055.99点&#xff0c;下跌0.38%&#xff1b;纳指报11854.35点&#xff0c;上涨0.47%。 榜首共和银行大跌29.75%&#xff0c;该股昨天大…

SuperMap iClient3D for Cesium 构建隧道

背景 前段时间看到一篇构建隧道的文章&#xff08;https://blog.csdn.net/supermapsupport/article/details/128453116&#xff09;&#xff0c;突然想到一个使用场景&#xff1a;隧道通常是建在山体下面&#xff0c;是否可以通过这种方式构建出一条贯穿山体的隧道&#xff0c…

mysql如何加行锁

一、概述 InnoDB 引擎是支持行级锁的&#xff0c;而 MyISAM 引擎并不支持行级锁&#xff0c;所以后面的内容都是基于 InnoDB 引擎的。当我们使用delete、update进行数据库删除、更新的时候&#xff0c;数据库会自动加上行锁。但是&#xff0c;行锁有时也会失效。 数据库版本&a…

正则表达式 - 边界

目录 一、零宽断言 二、行的开始和结束 1 . ^ 与 $ 2. dotall 模式 三、单词边界和非单词边界 1. 统计某个单词出现的次数 2. 统计单词个数 四、主题词的起始与结束位置 五、使用元字符的字面值 六、在段首加标签 一、零宽断言 断言&#xff08;assertions&#xff0…

颜色选择器vue3-colorpicker

其他选择器&#xff1a;一款支持vue3 的颜色选择器 | ColorPickerV3基于vue3的颜色选择器支持颜色透明度与rgba、hexhttps://colorpickerv3.wcrane.cn/guide/#%E7%89%B9%E7%82%B9 这个选择器也挺好看的&#xff0c; 只是貌似不能外部打开选择器面板 官网&#xff1a;Webpack Ap…

第五章:多表查询

一、笛卡尔积的多表查询 1.案例 查询员工名为’Abel’的员工在哪个城市工作? 2.出现笛卡尔积&#xff08;交叉连接&#xff09;的错误 select employee_id, department_name from employees,departments为什么出现2889条记录&#xff1f; Employees 107 Departments 27 …

Python 一元线性回归模型预测实验完整版

一元线性回归预测模型 实验目的 通过一元线性回归预测模型&#xff0c;掌握预测模型的建立和应用方法&#xff0c;了解线性回归模型的基本原理 实验内容 一元线性回归预测模型 实验步骤和过程 (1)第一步&#xff1a;学习一元线性回归预测模型相关知识。 线性回归模型属于…

如何高质量的提问题让chatgpt更明白我们的意图

如何更好地向 ChatGPT 提问 ChatGPT是一款基于深度学习的人工智能语言模型&#xff0c;用户可以通过文本输入向其提问并获得自然语言回答。以下是如何更好地向ChatGPT提问的几个建议&#xff1a; 确定问题类型。ChatGPT的训练数据源广泛&#xff0c;支持各种类型的问题&#x…

[INFOCOM 2019] NeuralWalk:使用神经网络的在线社交网络中的信任评估

NeuralWalk: Trust Assessment in Online Social Networks with Neural Networks | IEEE Conference Publication | IEEE Xplore 摘要&#xff1a; 评估信任社交网络&#xff08;TSN&#xff09;中用户之间的信任是许多应用中的关键问题&#xff0c;例如电影推荐&#xff0c;…

buuctf5

目录 [极客大挑战 2019]BabySQL [极客大挑战 2019]PHP 神秘龙卷风 假如给我三天光明 后门查杀 webshell后门 [极客大挑战 2019]BabySQL 1. 发现存在sql注入 2.使用bp用fuzz字典爆破一下哪些词被过滤了&#xff0c;发现or&#xff0c;select等都被过滤了 尝试双写注入 3.…

Vue.js 框架能力的官方认证

这两天Vue官方推出了Vue.js 认证计划。 即框架能力官方认证&#xff0c;即 Vue.js 框架能力证书。该认证由 Vue School 与 Vue.js 团队合作提供支持。官网&#xff1a;Vue.js - Official Certification Program 官方介绍此次的试题集和代码挑战由 Vue.js 核心团队审核&#xff…

docker 安装 datax和datax-web 之 datax-web登录时提示账号或密码错误

docker 安装docker 安装 datax和datax-web 安装教程地址&#xff1a; https://www.cnblogs.com/leihongnu/p/16612273.html 根据该博客的教程安装成功后&#xff0c;登录页面能打开&#xff0c;但是所提供的账户密码一直报错&#xff0c;这个就需要根据日志一步步去寻找原因了…

《编程思维与实践》1037.一元多项式乘法

《编程思维与实践》1037.一元多项式乘法 题目 思路 比较容易想到将步骤分为三步: 1.读取多项式每项的系数(coefficient)和对应的指数(dim); 2.进行多项式乘法; 3.输出进行多项式乘法后的非零项系数. 其中多项式乘法可以通过循环来处理,输出可以用if来判断系数是否为0,需要考虑…