传知代码-多行人姿态检测系统

代码以及视频讲解

本文所涉及所有资源均在传知代码平台可获取

概述

本项目创新在于采用多级网络串联工作来进行目标的行为分析,并使用在视频监控领域,可部署在任何有需要的人员流动密集场所(如医院,机场,养老院等)或者用于空巢老人陪伴看护,有极强的社会实用价值。项目基于PaddlePaddle平台,通过多任务网络级联的方式实现了多目标跟踪以及姿态检测的系统,通过实时反馈监控人员的信息,结合场景提供相应的需求帮助。区别于市场上的已有产品,本项目提出的系统的应用场景比较清晰,通过多任务级联的方式,提取出了视频中人流的人员位置信息、人员ID信息以及人员行为信息,针对异常行为实时发出警报,在节省人力的同时最大限度地保障人员权益和安全

作品的市场价值及推广性

本系统使用简单,能够自动实时地对老人、儿童、残障人士等实现看护,因而容易在这一目标用户进行推广。
当今处于老龄化的社会,老年人数量基数大,同时由于独生子女政策和社会压力的剧增,导致子女很难抽出时间去照顾老人和儿童,而本产品能够在保障被看护人员安全的前提下最大限度地减少看护人员的精力投入,易于被年轻人所接受。
养老院、医院数量的增多、交通的日益发达,这些应用场景均可作为本产品的受众对象,能够帮助其解决人员优化调度的问题。
在这里插入图片描述

技术方案

该项目的AI技术方向为多目标跟踪以及人体姿态估计算法方面,本作品涉及到目标检测,目标跟踪,关键点检测以及人体姿态分类等一系列算法技术,对这些算法的应用融合,实时对目标人员进行确认、跟踪、检测和异常行为识别和处理等。选用的是飞桨PaddlePaddle2.0作为框架,可以部署到Jetson AGX Xavier平台上。

人体姿态关键点检测

# PoseEstimateLoader姿态估计
class SPPE_FastPose(object):          #sppe单人姿态估计def __init__(self,backbone,input_height=320,input_width=256,device='cuda'):assert backbone in ['resnet50', 'resnet101'], '{} backbone is not support yet!'.format(backbone)self.inp_h = input_heightself.inp_w = input_widthself.device = deviceself.model = InferenNet_fastRes50()self.model.eval()def predict(self, image, bboxs, bboxs_scores):inps, pt1, pt2 = crop_dets(image, bboxs, self.inp_h, self.inp_w)pose_hm = self.model(inps)# Cut eyes and ears.pose_hm = paddle.concat([pose_hm[:, :1, :, :], pose_hm[:, 5:, :, :]], axis=1)xy_hm, xy_img, scores = getPrediction(pose_hm, pt1, pt2, self.inp_h, self.inp_w,pose_hm.shape[-2], pose_hm.shape[-1])result = pose_nms(bboxs, bboxs_scores, xy_img, scores)return result

跌倒分类

采用姿态检测的结果,考虑到跌倒的过程是一个时序的过程,很难通过单张图片来区分行人是否摔倒,因而采用时空图卷积网络(Spatial Temporal Graph Convolution Network, ST-GCN)来进行跌倒的识别。人体姿态流程如图所示。
在这里插入图片描述

class TSSTG(object):def __init__(self,weight_file="./Models/TSSTG/tsstg-model.pdparams",device='cuda'):self.graph_args = {'strategy': 'spatial'}self.class_names = ['Standing', 'Walking', 'Sitting', 'Lying Down','Stand up', 'Sit down', 'Fall Down']self.num_class = len(self.class_names)self.device = deviceself.model.eval()def predict(self, pts, image_size):pts[:, :, :2] = normalize_points_with_size(pts[:, :, :2], image_size[0], image_size[1])pts[:, :, :2] = scale_pose(pts[:, :, :2])pts = np.concatenate((pts, np.expand_dims((pts[:, 1, :] + pts[:, 2, :]) / 2, 1)), axis=1)pts = paddle.to_tensor(pts, dtype='float32')pts = pts.transpose((2, 0, 1)).unsqueeze(0)mot = pts[:, :2, 1:, :] - pts[:, :2, :-1, :]out = self.model((pts, mot))return out.detach().numpy()

完整项目运行代码

环境搭建

百度飞桨2.1.2版本安装

#根据自己的cuda环境选择安装对应PaddlePaddle版本
# CPU only
python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 
# CUDA 10.1
python -m pip install paddlepaddle-gpu==2.1.3.post101 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
# CUDA 10.2
python -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
# CUDA 11.0
python -m pip install paddlepaddle-gpu==2.1.3.post110 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
# CUDA 11.2
python -m pip install paddlepaddle-gpu==2.1.3.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

安装完成后即可运行我们的项目啦!

代码运行推理

! python main.py -h
  • 模型输入可以直接为摄像头作为视频源或者用下载好的视频作为视频源,通过 -C 进行配置。
  • 输出的渲染视频保存在save_out的路径下。
  • 如果在非服务器端可以通过设置在窗口进行实时画面的显示。

视频推理

在main.py文件中找到source并添加所需推理的视频路径,如果需要使用本机的摄像头则将sourced设置为0,最后命令行运行下列代码
在这里插入图片描述

! python main.py -C  --save_out infer_output/tkk.mp4

视频显示

# video display
import imageio
import cv2
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from IPython.display import HTML# 定义一个展示视频的函数
def display(driving, fps, size=(8, 6)):fig = plt.figure(figsize=size)ims = []for i in range(len(driving)):cols = []cols.append(driving[i])im = plt.imshow(np.concatenate(cols, axis=1), animated=True)plt.axis('off')ims.append([im])video = animation.ArtistAnimation(fig, ims, interval=1000.0/fps, repeat_delay=1000)plt.close()return video
video_path = './infer_output/test2-1.mp4'  # 相对路径
video_frames = imageio.mimread(video_path, memtest=False)# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)HTML(display(video_frames, fps).to_html5_video())

部署方式

源码及部署详情请看附件
权重下载

在这里插入图片描述
源码下载

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

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

相关文章

springboot三层架构详细讲解

目录 springBoot三层架构0.简介1.各层架构1.1 Controller层1.2 Service层1.3 ServiceImpl1.4 Mapper1.5 Entity1.6 Mapper.xml 2.各层之间的联系2.1 Controller 与 Service2.2 Service 与 ServiceImpl2.3 Service 与 Mapper2.4 Mapper 与 Mapper.xml2.5 Service 与 Entity2.6 C…

Java语言程序设计——篇三(1)

选择结构 概述选择单分支if语句例题讲解 双分支if-else语句例题讲解 条件运算符多分支的if-else语句例题讲解 嵌套的if语句例题讲解 switch语句结构例题讲解代码演示运行结果 概述 Java中的控制结构,包括: 1、选择结构( if、if-else、switch ) 2、循环结…

最佳 iPhone 解锁软件工具,可免费下载用于电脑操作的

业内专业人士表示,如果您拥有 iPhone,您一定知道忘记锁屏密码会多么令人沮丧。由于 Apple 的安全功能强大,几乎不可能在没有密码或 Apple ID 的情况下访问锁定的 iPhone。 “当我忘记密码时,如何在没有密码的情况下解锁iPhone&am…

Docker 部署 ShardingSphere-Proxy 数据库中间件

文章目录 Github官网文档ShardingSphere-Proxymysql-connector-java 驱动下载conf 配置global.yamldatabase-sharding.yamldockerdocker-compose.yml Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数…

Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)

条形码和二维码是现代信息交换和数据存储的重要工具,它们将信息以图形的形式编码,便于机器识别和数据处理,被广泛应用于物流、零售、医疗、教育等各领域。 本文将介绍如何使用Python快速生成各种常见的条形码如Code 128、EAN-13,…

20240711 每日AI必读资讯

🎨Runway Gen-3 Alpha 详细使用教程以及提示词指南大全 - 7月9日,著名生成式AI平台Runway在官网公布了,最新发布的文生视频模型Gen-3 Alpha的文本提示教程。 - 从技术层面来说,输入的文本提示会被转换成“向量”,这些…

滑动变阻器在实际应用中需要注意哪些安全事项?

滑动变阻器在实际应用中,为了确保其正常运作及保护电路安全,需要注意以下安全事项: 一、了解并遵守规格参数 最大电阻值和允许通过的最大电流值:使用前,必须清楚滑动变阻器的最大电阻值和允许通过的最大电流值&#x…

基于SAM的零样本相似性评价方法

文章目录 介绍方法SAM编码器相似性指标代码复现介绍 图像转换具有广泛的应用,如风格转换和模态转换,通常是生成具有高度真实和忠实的图像。这些问题仍然很困难,特别是在保存语义结构很重要的时候。传统的图像级相似性度量的用途有限,因为图像的语义是高级的,并且不受对原…

什么样的开放式耳机好用舒服?南卡、倍思、Oladance高人气质量绝佳产品力荐!

​开放式耳机在如今社会中已经迅速成为大家购买耳机的新趋势,深受喜欢听歌和热爱运动的人群欢迎。当大家谈到佩戴的稳固性时,开放式耳机都会收到一致好评。对于热爱运动的人士而言,高品质的开放式耳机无疑是理想之选。特别是在近年来的一些骑…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

内容协商源码解析与自定义 MessageConverter

目录 内容协商 1、引入xml依赖 2、postman分别测试返回json和xml 3、开启浏览器参数方式内容协商功能 4、内容协商原理 5、自定义 MessageConverter 综上 内容协商 根据客户端接收能力不同,返回不同媒体类型的数据。 若客户端无法解析服务端返回的内容&#…

Vatee万腾平台:创新科技,驱动未来

在科技日新月异的今天,每一个创新的火花都可能成为推动社会进步的重要力量。Vatee万腾平台,作为科技创新领域的佼佼者,正以其卓越的技术实力、前瞻性的战略眼光和不懈的探索精神,驱动着未来的车轮滚滚向前。 Vatee万腾平台深知&am…

剖析自闭症孩子玩手的独特之处

自闭症孩子玩手的行为常常具有一些较为独特的特点。 重复性是一个显著的特征。他们可能会以一种几乎相同的方式、节奏和频率反复地摆弄自己的手,例如不停地握拳、张开,或者持续地旋转手腕。 动作的单调性也是常见的。玩手的方式可能较为单一,…

【正点原子i.MX93开发板试用连载体验】简单的音频分类

本文最早发表于电子发烧友论坛: 今天测试的内容是进行简单的音频分类。我们要想进行语音控制,就需要构建和训练一个基本的自动语音识别 (ASR) 模型来识别不同的单词。如果想了解这方面的知识可以参考TensorFlow的官方文档:简单的音频识别&…

矢量绘图设计Sketch中文 Sketch直装安装包

Sketch是一款专为UI设计师和UX专家打造的矢量图形设计软件,以其简洁的界面、强大的功能和高效的协作能力而闻名。Sketch支持快速创建高质量的UI界面、图标、图形和插画,其矢量绘图工具让设计细节更加精准。同时,Sketch内置丰富的插件和组件库…

1-认识网络爬虫

1.什么是网络爬虫 ​ 网络爬虫(Web Crawler)又称网络蜘蛛、网络机器人,它是一种按照一定规则,自动浏览万维网的程序或脚本。通俗地讲,网络爬虫就是一个模拟真人浏览万维网行为的程序,这个程序可以代替真人…

【xinference】(15):在compshare上,使用docker-compose运行xinference和chatgpt-web项目,配置成功!!!

视频演示 【xinference】(15):在compshare上,使用docker-compose运行xinference和chatgpt-web项目,配置成功!!! 1,安装docker方法: #!/bin/shdistribution$(…

深入了解代理IP常见协议:区别与选择

代理服务器在网络使用中扮演着重要的角色,是您设备和互联网之间的中间层。它不仅可以增强网络访问的安全性和隐私保护,还可以提供许多灵活的应用。使用代理时,不同的协议类型对数据交换具有不同的规则和特征。常见的代理协议包括HTTP代理、HT…

通过Umijs从0到1搭建一个React项目

有一阵时间没写react了,今天通过umi搭建一个demo项目复习一下react;umi是一个可扩展的企业级前端应用框架,在react市场中还是比较火的一个框架。 Umi官方文档:Umi 介绍 (umijs.org) 一、构建项目。 1、安装包管理工具。 官方推…

七人共赢拼团模式的深度剖析与互助精神重塑

在当今电商的浩瀚星海中,七人共赢拼团模式以其创新的合作框架与激励体系,正引领着消费与商业的新潮流。这一模式不仅优化了购物体验,更深刻诠释了互助共赢的核心理念。以下,我们将从直推奖励、自动补齐机制及团队荣耀奖三个方面&a…