yolov8使用opencv2实时检测,两种物品,左上角显示信息

效果为:
左上角显示
帧率:FPS
序列号:SN
两种物品的检测数量和总数

可以应用于工业检测

在这里插入图片描述

import cv2
from ultralytics import YOLO
from cv2 import getTickCount, getTickFrequency
# 加载 YOLOv8 模型
model = YOLO("weights/yolov8s.pt")
SN = '123'
male_dic = ['123','124','125']
female_dic = ['223','224','225']
# 获取摄像头内容,参数 0 表示使用默认的摄像头
cap = cv2.VideoCapture(0)


def showFPS(frame,FPS):
    # 在图像左上角添加FPS文本
    fps_text = f"FPS: {FPS:.2f}"
    font = cv2.FONT_HERSHEY_SIMPLEX
    font_scale = 1
    font_thickness = 2
    text_color = (0, 0, 255)  # 红色
    text_position = (10, 30)  # 左上角位置

    cv2.putText(frame, fps_text, text_position, font, font_scale, text_color, font_thickness)
    
    return frame
def showSN(frame,SN):

    # 在图像左上角添加FPS文本
    SN_text = 'SN: '+SN
    font = cv2.FONT_HERSHEY_SIMPLEX
    font_scale = 1
    font_thickness = 2
    text_color = (0, 0, 255)  # 红色
    text_position = (10, 60)  # 左上角位置

    cv2.putText(frame, SN_text, text_position, font, font_scale, text_color, font_thickness)
    
    return frame
def showOKNG(frame,OKNG):
    # 在图像左上角添加FPS文本
    OKNG_text = 'result: '+OKNG
    font = cv2.FONT_HERSHEY_SIMPLEX
    font_scale = 1
    font_thickness = 2
    text_color = (0, 0, 255)  # 红色
    text_position = (10, 120)  # 左上角位置

    cv2.putText(frame, OKNG_text, text_position, font, font_scale, text_color, font_thickness)
    return frame
def showClassNum(frame,results):
    #公的数量,母的数量,一共检测到多少个东西
    male_num = 0
    female_num = 0
    total_dets = len(results[0].boxes)
    for i in range(total_dets):
        det_cls = results[0].boxes[i].cls
        print("一轮for i")
        print("results[0].boxes[i].cls=",results[0].boxes[i].cls)
        if int(det_cls)==0:
            male_num +=1
        if int(det_cls) ==41:
            female_num +=1 
        

    # 在图像左上角添加FPS文本
    ClassNum_text = 'male:'+str(male_num)+'|female:"'+str(female_num)+'|total:'+str(total_dets)
    font = cv2.FONT_HERSHEY_SIMPLEX
    font_scale = 1
    font_thickness = 2
    text_color = (0, 0, 255)  # 红色
    text_position = (10, 90)  # 左上角位置

    cv2.putText(frame, ClassNum_text, text_position, font, font_scale, text_color, font_thickness)

    return frame,male_num,female_num
def isOKorNG(male_num,female_num,SN):
    OK_or_NG = False
    if SN in male_dic:
        if male_num>0 and female_num<1:
            OK_or_NG = True
    elif SN in female_dic:
        if female_num>0 and male_num<1:
            OK_or_NG = True

    return OK_or_NG

          


while cap.isOpened():
    loop_start = getTickCount()
    success, frame = cap.read()  # 读取摄像头的一帧图像

    if success:
        results = model.predict(source=frame) # 对当前帧进行目标检测并显示结果
    annotated_frame = results[0].plot()

    # 计算FPS
    loop_time = getTickCount() - loop_start
    total_time = loop_time / (getTickFrequency())
    FPS = int(1 / total_time)
    frame = showFPS(annotated_frame,FPS)
    #显示序列号
    frame = showSN(frame,SN)
    #显示总检测数量:
    frame,male_num,female_num = showClassNum(frame,results)
    #显示返回状态:
    state = isOKorNG(male_num,female_num,SN)
    frame = showOKNG(frame,str(state))
    cv2.imshow('img', frame)

    # 通过按下 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()  # 释放摄像头资源
cv2.destroyAllWindows()  # 关闭OpenCV窗口


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

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

相关文章

微信小程序云开发 微信支付功能 逻辑+踩坑

前置条件 首先开通微信支付商户号 然后小程序后台里关联商户号 然后在开发者工具里申请api权限 云开发》设置》其他设置》微信支付配置 申请一下权限和绑定 显示已通过即可。 逻辑 首先用户点击支付按钮&#xff0c;就会触发unlock() 在unlock函数中创建新订单&#xff…

iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS

文章目录 一、前言二、VMwareMacOS镜像2.1、先下载vmware-workstation2.2、再下载macOS Big Sur(11.6) 三、图解安装过程3.1、双击VMware-WorkStation Pro图标 四、总结 一、前言 为什么会有虚拟机这种东西&#xff1f;它存在的意义是什么[能解决什么问题]&#xff1f;哈哈~你以…

解锁数据分析的神器:ChatGPT引领人工智能革命

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今数字化时代&#xff0c;数据分析成为决策…

数据结构(7-2广度~~7-15)所有代码

7-2 迷宫-广度策略 一个陷入迷宫的老鼠如何找到出口的问题。老鼠希望系统性地尝试所有的路径之后走出迷宫。如果它到达一个死胡同&#xff0c;将原路返回到上一个位置&#xff0c;尝试新的路径。在每个位置上老鼠可以向八个方向运动&#xff0c;顺序是从正东开始按照顺时针进行…

【设计模式】结构型设计模式

结构型设计模式 文章目录 结构型设计模式一、概述二、适配器模式&#xff08;Adapter Pattern&#xff09;2.1 类适配器模式2.2 对象适配器模式2.3 接口适配器模式2.4 小结 三、桥接模式&#xff08;Bridge Pattern&#xff09;四、装饰器模式&#xff08;Decorator Pattern&am…

《微信小程序开发从入门到实战》学习二十一

3.3 开发创建投票页面 3.3.9 使用picker选择器组件 使用picker选择器组件增加一个设置截止时间的功能。picker是一个从底部弹出的滚动选择器组件。picker通用属性如下&#xff1a; mode 选择器类型(selector、multiSelector、time、date、region) disabled …

USB转CAN的使用说明

前言 USB转CAN是将 TTL 信号转换为 CAN 信号的模块。采用串口作为嵌入式系统的接口&#xff0c;数据传输简单&#xff0c;无需要学习 CAN 协议&#xff0c;缩短开发周期&#xff0c;降低开发成本。模块兼容 3.3V、5V 电源&#xff0c;搭载一个 32 位的 STM32 处理芯片和一个 C…

buildadmin+tp8表格操作(7.1)表格的事件监听(el-table中的事件)

因为buildAdmin是封装的 el-table的组件&#xff0c;所以el-table中的事件&#xff0c; 也是可以使用的&#xff0c; 两者有几个事件是有共同的&#xff08;比如 双击事件&#xff09;&#xff0c; 这时可以根据自己的需要自行选择 以下代码是 buildadmin 使用 el-table中的事…

键盘映射笔记

dumpkeys命令用于显示当前系统中定义的键盘映射表。它可以帮助用户查看和理解系统中的键盘布局和键盘映射规则。 当用户执行dumpkeys命令时&#xff0c;它会读取系统中的键盘映射表文件&#xff08;通常是/etc/keymaps或/etc/console/boottime.kmap.gz&#xff09;&#xff0c;…

麒麟KYLINOS2303系统上禁用新功能介绍页面

原文链接&#xff1a;麒麟KYLINOS2303系统上禁用新功能介绍页面 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇在麒麟KYLINOS2303系统上禁用新功能介绍页面的文章&#xff0c;在我们安装完系统登录后&#xff0c;会发现有新功能介绍这个界面&#xff0c;我们可以通…

buildadmin+tp8表格操作(8) 表格下方添加 合计行

表格的下方可以自定义添加一个合计行&#xff0c;如果有其它的需求&#xff0c; 我们可以添加我们自已需要的行&#xff0c; 并不局限于合计行 以上就可以给表格的最下方添加一个合计行了 完整代码如下 <template><div class"default-main ba-table-box"&…

Blender烘焙AO操作及对应的python代码

&#xff08;一&#xff09;Blender软件操作 1. 导入模型&#xff08;这里省略&#xff09; 2. 材质设置 模型使用的所有材质都需要删除Surface Shader&#xff0c;没有其他多余的计算&#xff0c;可以大量缩短烘焙时间。删除之后的只留下一个材质输出节点&#xff0c;如图所…

Vatee万腾携手Wiki EXPO 2023悉尼峰会 共谱辉煌未来

悉尼&#xff0c;这座充满活力和创新的城市&#xff0c;即将成为全球商业的焦点。2023年11月16日&#xff0c;由WikiEXPO主办的Wiki Finance Expo Sydney 2023在悉尼马丁广场1号富丽敦酒店隆重开幕&#xff0c;这场金融博览会是澳大利亚今年规模最宏大、备受期待的金融科技盛会…

网上被吹爆的Spring Event事件订阅有缺陷,不要用

Spring Event事件订阅框架&#xff0c;被网上一些人快吹上天了&#xff0c;然而我们在新项目中引入后发现&#xff0c;这个框架缺陷很多&#xff0c;玩玩可以&#xff0c;千万不要再公司项目中使用。还不如自己手写一个监听者设计模式&#xff0c;那样更稳定、可靠。 之前我已…

电磁场与电磁波part5--均匀平面波在无界空间的传播

目录 1、相位速度 2、波阻抗 3、理想介质中均匀平面波的传播特点 4、色散现象 5、导电媒质中均匀平面波的传播特点 6、趋肤效应 7、电磁波的极化 1、相位速度 电磁波的等相位面在空间中的移动速度&#xff08;相速&#xff09; 在自由空间&#xff08;自由空间的光速&a…

UE5 - ArchvizExplorer - 数字孪生城市模板 - 功能修改

数字孪生项目&#xff0c;大多是双屏互动&#xff0c;而非下方菜单点击&#xff0c;所以要做一番改造 参考&#xff1a;https://blog.csdn.net/qq_17523181/article/details/133853099 1. 去掉提示框 打开BP_MasterMenu_Widget&#xff0c;进入EventGraph&#xff0c;断开Open…

仅需1分钟,搭建一个你自己的工具站

{alert type"info"} 站长工具在工作中应该会有很多人使用&#xff0c;比如说 JSON格式化&#xff0c;UUID生成器&#xff0c;密码生成、URL编码等 今天给大家分享一个英文版的IT-TOOL的搭建教程。 是个开源的项目&#xff0c;地址&#xff1a;https://github.com/Cor…

JZM-D30室温探针台技术参数

概况&#xff1a; JZM-D30室温探针台的诸多设计都是专用的&#xff0c;探针台的配置主要是根据用户的需求进行选配及设计。例如&#xff0c;要求的磁场型号&#xff0c;电源型号&#xff0c;磁场值&#xff0c;样品台的尺寸等&#xff0c;除此之外&#xff0c;该探针台和我司自…

el-tree结合el-switch实现状态切换

<template><div><el-col :span"24"><el-card class"tree-card"><div class"sketch_content selectFile"><span class"span_title">组织列表 </span><div style"display: flex; jus…

【文末送书】计算机网络 | IO多路转接技术 | poll/epoll详解

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…