Python+Yolov8框选位置目标识别人数统计计数

程序示例精选
Python+Yolov8框选位置目标识别人数统计计数
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《Python+Yolov8框选位置目标识别人数统计计数》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2019, Qt
       2. C++

二、使用步骤

代码如下(示例):
import cv2
from yolov8 import YOLOv8
from deep_sort_pytorch.deep_sort import DeepSort
from deep_sort_pytorch.utils.parser import get_config
from collections import deque
def init_tracker():print("init_tracker")global deepsortcfg_deep = get_config()cfg_deep.merge_from_file("deep_sort_pytorch/configs/deep_sort.yaml")deepsort= DeepSort(cfg_deep.DEEPSORT.REID_CKPT,max_dist=cfg_deep.DEEPSORT.MAX_DIST, min_confidence=cfg_deep.DEEPSORT.MIN_CONFIDENCE,nms_max_overlap=cfg_deep.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg_deep.DEEPSORT.MAX_IOU_DISTANCE,max_age=cfg_deep.DEEPSORT.MAX_AGE, n_init=cfg_deep.DEEPSORT.N_INIT, nn_budget=cfg_deep.DEEPSORT.NN_BUDGET,use_cuda=True)
##########################################################################################
def xyxy_to_xywh(*xyxy):"""" Calculates the relative bounding box from absolute pixel values. """bbox_left = min([xyxy[0].item(), xyxy[2].item()])bbox_top = min([xyxy[1].item(), xyxy[3].item()])bbox_w = abs(xyxy[0].item() - xyxy[2].item())bbox_h = abs(xyxy[1].item() - xyxy[3].item())x_c = (bbox_left + bbox_w / 2)y_c = (bbox_top + bbox_h / 2)w = bbox_wh = bbox_hreturn x_c, y_c, w, hdef xyxy_to_tlwh(bbox_xyxy):tlwh_bboxs = []for i, box in enumerate(bbox_xyxy):x1, y1, x2, y2 = [int(i) for i in box]top = x1left = y1w = int(x2 - x1)h = int(y2 - y1)tlwh_obj = [top, left, w, h]tlwh_bboxs.append(tlwh_obj)return tlwh_bboxsdef compute_color_for_labels(label):"""Simple function that adds fixed color depending on the class"""if label == 0: #personcolor = (85,45,255)elif label == 2: # Carcolor = (222,82,175)elif label == 3:  # Motobikecolor = (0, 204, 255)elif label == 5:  # Buscolor = (0, 149, 255)else:color = [int((p * (label ** 2 - label + 1)) % 255) for p in palette]return tuple(color)def draw_border(img, pt1, pt2, color, thickness, r, d):x1,y1 = pt1x2,y2 = pt2# Top leftcv2.line(img, (x1 + r, y1), (x1 + r + d, y1), color, thickness)cv2.line(img, (x1, y1 + r), (x1, y1 + r + d), color, thickness)cv2.ellipse(img, (x1 + r, y1 + r), (r, r), 180, 0, 90, color, thickness)# Top rightcv2.line(img, (x2 - r, y1), (x2 - r - d, y1), color, thickness)cv2.line(img, (x2, y1 + r), (x2, y1 + r + d), color, thickness)cv2.ellipse(img, (x2 - r, y1 + r), (r, r), 270, 0, 90, color, thickness)# Bottom leftcv2.line(img, (x1 + r, y2), (x1 + r + d, y2), color, thickness)cv2.line(img, (x1, y2 - r), (x1, y2 - r - d), color, thickness)cv2.ellipse(img, (x1 + r, y2 - r), (r, r), 90, 0, 90, color, thickness)# Bottom rightcv2.line(img, (x2 - r, y2), (x2 - r - d, y2), color, thickness)cv2.line(img, (x2, y2 - r), (x2, y2 - r - d), color, thickness)cv2.ellipse(img, (x2 - r, y2 - r), (r, r), 0, 0, 90, color, thickness)cv2.rectangle(img, (x1 + r, y1), (x2 - r, y2), color, -1, cv2.LINE_AA)cv2.rectangle(img, (x1, y1 + r), (x2, y2 - r - d), color, -1, cv2.LINE_AA)cv2.circle(img, (x1 +r, y1+r), 2, color, 12)cv2.circle(img, (x2 -r, y1+r), 2, color, 12)cv2.circle(img, (x1 +r, y2-r), 2, color, 12)cv2.circle(img, (x2 -r, y2-r), 2, color, 12)return imgdef UI_box(x, img, color=None, label=None, line_thickness=None):# Plots one bounding box on image imgtl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1  # line/font thicknesscolor = color or [random.randint(0, 255) for _ in range(3)]c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3]))def intersect(A,B,C,D):return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D)def ccw(A,B,C):return (C[1]-A[1]) * (B[0]-A[0]) > (B[1]-A[1]) * (C[0]-A[0])def get_direction(point1, point2):direction_str = ""def draw_boxes(img, bbox, names,object_id, identities=None, offset=(0, 0)):cv2.line(img, line[0], line[1], (0,0,255), 3)height, width, _ = img.shape# remove tracked point from buffer if object is lostfor key in list(data_deque):if key not in identities:data_deque.pop(key)for i, box in enumerate(bbox):x1, y1, x2, y2 = [int(i) for i in box]x1 += offset[0]x2 += offset[0]y1 += offset[1]y2 += offset[1]# code to find center of bottom edgecenter = (int((x2+x1)/ 2), int((y2+y2)/2))# get ID of objectid = int(identities[i]) if identities is not None else 0# create new buffer for new objectif id not in data_deque:  data_deque[id] = deque(maxlen= 64)color = compute_color_for_labels(object_id[i])obj_name = names[object_id[i]]label = '{}{:d}'.format("", id) + ":"+ '%s' % (obj_name)# add center to bufferdata_deque[id].appendleft(center)if len(data_deque[id]) >= 2:direction = get_direction(data_deque[id][0], data_deque[id][1])if intersect(data_deque[id][0], data_deque[id][1], line[0], line[1]):cv2.line(img, line[0], line[1], (255, 255, 255), 3)if "South" in direction:if obj_name not in object_counter:object_counter[obj_name] = 1else:object_counter[obj_name] += 1if "North" in direction:if obj_name not in object_counter1:object_counter1[obj_name] = 1else:object_counter1[obj_name] += 1UI_box(box, img, label=label, color=color, 
运行结果


在这里插入图片描述

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

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

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

相关文章

测开——基础理论面试题整理

1. 测试流程 需求了解分析需求评审制定测试计划【包括测试人员、时间、每人负责的模块、测试的风险项以及预防】编写自动化测试用例 —— 测试评审【尽量丰富测试点】编写测试框架和脚本(若是功能测试 可省去这步骤)执行测试提交缺陷报告测试分析与评审…

Coursera上托福专项课程02:TOEFL Speaking and Writing Sections Skills Mastery 学习笔记

TOEFL Speaking and Writing Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-speaking-writing-sections-skills-mastery 这门课的学习笔记,如有侵权,请联系删除。 文章目录 TOEFL Speaking and Writing…

docker-ce部署

目录 1. 更新软件包列表 2. 安装必要的软件包,以允许 apt 使用 HTTPS 3. 添加 Docker 的官方 GPG 密钥 4. 设置 Docker CE 的稳定存储库 5. 再次更新包索引以及安装 Docker CE 6. 验证 Docker CE 是否正确安装 7. 将当前用户添加到 docker 用户组,…

Linux之shell脚本编辑工具awk

华子目录 概念工作流程工作图流程(按行处理) awk程序执行方式1.通过命令行执行awk程序实例 2.awk命令调用脚本执行实例 3.直接使用awk脚本文件调用实例 awk命令的基本语法格式BEGIN模式与END模式实例awk的输出 记录和域(记录表示数据行&#…

【陈老板赠书活动 - 25期】- 《Effective Java》

陈老老老板🧙‍♂️ 👮‍♂️本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 🤴本文简述:活就像海洋,只有意志坚强的人,才能到达彼岸。 👳‍♂️上一篇文章&#xff…

行人重识别项目 | 基于Pytorch实现ReID行人重识别算法

项目应用场景 面向行人重识别场景,项目具有轻量化 (训练的时候也只需要 2GB 的显存占用)、性能好 (只使用 softmax 损失就能够达到 Rank188.24%, mAP70.68%),另外提供友好的上手项目流程教程 项目效果: 项目流程 > 具体参见项目内README.…

利用Flutter混淆工具提高应用的反编译难度

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…

第十四届蓝桥杯大赛软件赛省赛

第十四届蓝桥杯大赛软件赛省赛 2.日期统计 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 …

【Linux】Linux C 编程

在 Windows 下编程首先就是安装对应的 IDE ,然后在 IDE 里面进行代码编写和编译,但是在 Linux 下,这两个部分是分开的,比如我们可以使用 vim 编辑器编写代码,然后用 gcc 编译器编译代码。Ubuntu 下有一些可以进行编程的…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式,它提供了一种封装对象创建过程的机制,将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中,工厂设计模式主要有三种形式:简单工厂…

2023-01-05(星期四)-恶意垃圾邮件导致agenttesla变体感染,可能是originlogger

前言 参考1 参考2 OriginLogger是一个开源的日志记录器,用于在应用程序中记录和管理日志信息。它提供了一种简单而灵活的方式来记录各种级别的日志,包括调试信息、警告和错误消息等。 AgentTesla病毒主要通过钓鱼邮件进行传播,钓鱼邮件内容多…

C语言解决汉诺塔问题

背景 首先带大家了解一下汉诺塔问题 汉诺塔是一个典型的函数递归问题,汉诺塔描述了这样的场景,有三个柱子,A,B,C,A柱为起始柱,在A柱上面有若干大小不同的盘子,最下面的最大,最上面的最小&#x…

Spring Cloud介绍

一、SpringCloud总体概述 Cloud Foundry Service Broker:通用service集成进入Cloud Foundry Cluster:服务集群 Consul:注册中心 Security:安全认证 Stream:消息队列 Stream App Starters:Spring Cloud Stre…

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据(重点!)4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…

开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测

参考文献: [1]Tian Z, Gai M. Football team training algorithm: A novel sport-inspired meta-heuristic optimization algorithm for global optimization[J]. Expert Systems with Applications, 2024, 245: 123088. 1.算法基本原理 足球队训练算法&#xff0…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法? 缓存穿透和缓存击穿的区别? 缓存雪崩 雪崩解决办法? 如何确保缓存和数据库数据的一致性? 常见的缓存更新策略? 缓存穿透 定义:缓存穿透说…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解&#xff…

阿里巴巴蔡崇信:中国AI追赶神速,制造业霸主地位无可撼动!

快科技4月5日讯,阿里巴巴集团创始人兼董事长蔡崇信近日就AI技术领域及全球制造业形势发表看法。他认为,尽管中国在AI技术方面与美国有一定差距,但中国的追赶速度非常快。 AI-321 | 专注于AI工具分享的网站 AI工具集 | 人工智能工具箱 | 全球…

金三银四面试题(十五):Java基础问题(6)

这部分面试题多用于面试的热身运动,对很多找实习和准备毕业找工作的小伙伴至关重要。 HashMap与ConcurrentHashMap 都是key-value 形式的存储数据; HashMap 是线程不安全的,ConcurrentHashMap 是JUC 下的线程安全的; HashMap 底层…

【单片机】PMS5003,PM2.5传感器数据读取处理

文章目录 传感器介绍数据处理解析pm2.5的代码帮助、问询 传感器介绍 PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集 并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而 换算成为质量浓度,并以通用数字接口形式输出。本传感器可…