注:B站有相应视频,点击此链接即可跳转观看https://www.bilibili.com/video/BV1hb4y117mu/

第4节:运行和参数

4.1 webcam_demo.py

alphapose可以运行图片、视频、实时画面,他们的原理是一样的,只不过参数设置有些不同,我们以实时画面为例为大家进行讲解,运行实时画面部分主要包含在webcam_demo.py中,人体检测和姿态估计的函数,如代码清单4.1-1所示。

代码清单4.1-1

#导入各种依赖项
import torch
from torch.autograd import Variable
import torch.nn.functional as F
import torchvision.transforms as transforms import torch.nn as nn
import torch.utils.data
import numpy as np
from opt import optfrom dataloader_webcam import WebcamLoader, DetectionLoader, DetectionProcessor, DataWriter, crop_from_dets, Mscoco
from yolo.darknet import Darknet
from yolo.util import write_results, dynamic_write_results
from SPPE.src.main_fast_inference import *from SPPE.src.utils.img import im_to_torch
import os
import sys
from tqdm import tqdm
import time
from fn import getTime
import cv2from pPose_nms import write_jsonargs = opt
args.dataset = 'coco'#数据集是coco#循环操作
def loop():n = 0while True:yield nn += 1if __name__ == "__main__":webcam = args.webcam#调用摄像头
mode = args.mode#选择检测模式,有快速、正常、精确三个模式,默认是正常模式#如果不存在输出路径,就新建一个输出路径,默认输出路径为"examples/res/"if not os.path.exists(args.outputpath):os.mkdir(args.outputpath)#加载输入的视频data_loader = WebcamLoader(webcam).start()#调用摄像头,获取输入图像信息。(fourcc,fps,frameSize) = data_loader.videoinfo()#输出摄像头捕捉到的信息#加载检测器print('Loading YOLO model..')
sys.stdout.flush()
#调用目标检测器,检测图像中的人体det_loader = DetectionLoader(data_loader, batchSize=args.detbatch).start()det_processor = DetectionProcessor(det_loader).start()#进行人体姿态估计#加载人体姿态估计模型pose_dataset = Mscoco()#生成人体姿态估计模型if args.fast_inference:#选择模型模式pose_model = InferenNet_fast(4 * 1 + 1, pose_dataset)else:pose_model = InferenNet(4 * 1 + 1, pose_dataset)pose_model.cuda()pose_model.eval()#保存数据save_path = os.path.join(args.outputpath, 'AlphaPose_webcam'+webcam+'.avi')#生成保存视频的路径writer = DataWriter(args.save_video, save_path, cv2.VideoWriter_fourcc(*'XVID'), fps, frameSize).start()#保存检测结果runtime_profile = {#记录检测时间'dt': [],'pt': [],'pn': []}print('Starting webcam demo, press Ctrl + C to terminate...')sys.stdout.flush()im_names_desc =  tqdm(loop())#通过进度条将处理情况进行可视化展示batchSize = args.posebatch#姿态估计最大批量,默认80。for i in im_names_desc:try:start_time = getTime()with torch.no_grad():#只进行前向计算,不进行求导(inps, orig_img, im_name, boxes, scores, pt1, pt2) = det_processor.read()#读取下一帧信息if boxes is None or boxes.nelement() == 0:#如果图中不存在人体,进行下面的输出writer.save(None, None, None, None, None, orig_img, im_name.split('/')[-1])continueckpt_time, det_time = getTime(start_time)#获取开始时间runtime_profile['dt'].append(det_time)#检测时间#进行人体姿态估计datalen = inps.size(0)leftover = 0if (datalen) % batchSize:leftover = 1num_batches = datalen // batchSize + leftoverhm = []for j in range(num_batches):inps_j = inps[j*batchSize:min((j +  1)*batchSize, datalen)].cuda()hm_j = pose_model(inps_j)#进行人体姿态估计hm.append(hm_j)hm = torch.cat(hm)ckpt_time, pose_time = getTime(ckpt_time)#获取ckpt_time时间runtime_profile['pt'].append(pose_time)#人体姿态估计的时间hm = hm.cpu().datawriter.save(boxes, scores, hm, pt1, pt2, orig_img, im_name.split('/')[-1])#保存信息ckpt_time, post_time = getTime(ckpt_time)runtime_profile['pn'].append(post_time)#后处理的时间if args.profile:#在屏幕输出处添加速度分析im_names_desc.set_description('det time: {dt:.3f} | pose time: {pt:.2f} | post processing: {pn:.4f}'.format(dt=np.mean(runtime_profile['dt']), pt=np.mean(runtime_profile['pt']), pn=np.mean(runtime_profile['pn'])))except KeyboardInterrupt:#按ctrl+c退出程序breakprint(' ')print('===========================> Finish Model Running.')if (args.save_img or args.save_video) and not args.vis_fast:print('===========================> Rendering remaining images in the queue...')print('===========================> If this step takes too long, you can enable the --vis_fast flag to use fast rendering (real-time).')while(writer.running()):passwriter.stop()#停止final_result = writer.results()
write_json(final_result, args.outputpath)

4.1.1 运行流程

用pycharm打开alphapose文件,进入webcam_demo.py文件中。
1.右键单击run开始运行,如图4.1.1-1,第一次运行时间较长,耐心等待。

图4.1.1- 1

2.我们观察到,下面数据在运行但是我们看不到画面,这是因为我们并没有指定电脑摄像头,点击右上角的红色按钮,停止运行,如图4.1.1-2。

图4.1.1- 2

3.打开redme,我们找到webcam_demo.py的运行参数,复制,如图4.1.1-3。
图4.1.1- 3

4.打开edit configuration,粘贴到parameters。点击apply,点击ok,如图4.1.1-4,4.1.1-5。
图4.1.1- 4

图4.1.1- 5

5.回到webcam_demo.py再次运行,等待一会,我们发现运行结果报错,暂停运行,我们分析出错原因,发现是因为参数数值设置错误,如图4.1.1-6。
图4.1.1- 6

7.我们点击错误定位连接,将参数直接修改为0.5,如图4.1.1-7。

图4.1.1- 7
再次运行,我们发现还是刚刚的错误,还是将此函数的两个参数修改为0.5,如图4.1.1-8。

图4.1.1- 8

9.修改完成后,重新运行,这时我们可以看到webcam_demo.py可以正常运行了,打开下面的可视化窗口,当摄像头区域中出现人体时,可以检测出人体的姿态,我们可以在摄像头范围内移动,观察检测效果。

4.2 参数设置

4.2.1 参数

–indir 输入图像所在位置的路径。将处理路径目录中的所有图像。
–list 输入图像的文本文件列表
–video 读取视频并逐帧处理视频
–outdir 存储姿势估计结果位置的路径
–vis 对输入图像进行可视化
–save_img 将输出图像保存到outdir/vis文件夹中
–save_video 保存输出视频
–vis_fast 使用加速模式。默认不加速
–format 输出结果的格式。默认COCO格式。可选择“cmu”(CMU-Pose格式 )和“open”(OpenPose格式)
–conf 置信度阈值。降低该值可以提高精度,但会降低速度。默认值为0.1
–nms 非极大值抑制阈值。增大该值可以提高精度,但会降低速度。默认值为0.6。
–detbatch 目标检测的批量大小
–posebatch 姿态估计的批量大小。如果遇到OOM问题,请减小此值
–sp 单进程运行。Windows用户需要使用
–inp_dim 目标检测输入图像的大小,应该是32的倍数。默认值为608

4.2.2 运行代码

对目录所有图片进性alphapose估计,将运行结果用CMU-Pose格式保存并保存图片
python3 demo.py --indir examples/demo/ --outdir examples/results/ --save_img --format cmu
对一个视频进行估计,保存视频并且使用加速模式
python3 video_demo.py --video examples/input.mp4 --outdir examples/results/ --save_video --vis_fast
对一个视频进行估计,通过增加置信度和减小NMS阈值来加速
python3 video_demo.py --video examples/input.mp4 --outdir examples/results/ --conf 0.5 --nms 0.45

第4节:alphapose项目运行和参数相关推荐

  1. 探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍

    探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍 文章目录 探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍 2.项目介绍 2.1.项目背景 2.2.市场分析 2.3.目标用户 ...

  2. scrapy没有运行结果_关于Scrapy爬虫项目运行和调试的小技巧(下篇)

    前几天给大家分享了关于Scrapy爬虫项目运行和调试的小技巧上篇,没来得及上车的小伙伴可以戳超链接看一下.今天小编继续沿着上篇的思路往下延伸,给大家分享更为实用的Scrapy项目调试技巧. 三.设置网 ...

  3. 怎么让前端项目运行起来_如何立即使您的前端项目看起来更好

    怎么让前端项目运行起来 We've all been there. You've been learning the basics of front end Web development, and ...

  4. tomcat php centeros,linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目运行环境...

    一.安装JDK 1.卸载旧版本或者系统自带的JDK (1)列出所有已安装的JDK rpm -qa | grep jdk (2)卸载不需要的JDK yum -y remove 安装包名称 2.下载并解压 ...

  5. uniapp项目运行到小米平板调试

    uniapp项目运行到小米平板调试 第一步:打开平板的[开发者模式] 找到[设置]-----[我的设备]-----[全部参数]-----[MIUI版本] 连续点击[MIUI版本]8次,即可打开开发者模 ...

  6. IDEA中导入项目运行失败提示Illeagle Arguement,访问404解决方法(Idea的Modules设置)

    文章目录 IDEA中导入项目运行失败提示Illeagle Arguement,访问404解决方法(Idea的Modules设置) 起因 尝试1:设置resources文件 尝试2:啃代码 尝试3:完全 ...

  7. vue.js项目实战运用篇之抖音视频APP-第二节:项目基础架构搭建

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  8. vue.js项目实战运用篇之抖音视频APP-第一节:项目环境搭建

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  9. 【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结

    项目简介 **项目地址:**https://github.com/newbee-ltd/newbee-mall **项目介绍:**newbee-mall 项目是一套电商系统,包括 newbee-mal ...

  10. Xamarin Android项目运行失败

    Xamarin Android项目运行失败 错误信息:Build Failed: MonoDroid does not support running the previous version.  P ...

最新文章

  1. 手机APP新“战场” 手机银行APP成了银行业的定时炸弹?
  2. mysql保留2位小数字段如何设置 浮点数
  3. ASP.NET Core 集成测试中模拟登录用户的一种姿势
  4. 飞鸽传书 的内置的计算机处理
  5. 浏览器 UC 自动添加关键字 去掉关键字
  6. 东财网络学校计算机统考真题,东北财经大学网络教育学院高中起点计算机基础入学测试模拟题(一)...
  7. 个人学习进度条------第二周
  8. 18. 四数之和(四指针,快排)
  9. mysql8.0.19初始密码输入错误_MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子)...
  10. python模块介绍-Tornado:Tornado中文文档-概述
  11. SQL UNION 和 UNION ALL 操作符
  12. Flutter实战之FlutterPlugin插件入门指南
  13. linux内存管理之分段分页机制
  14. SEP客户端部署方式及故障处理手册____借鉴文档的思路方法
  15. 条件概率,乘法公式——概率论与数理统计(宋浩)
  16. shell脚本的逻辑判断
  17. 计算机图片照片查看器为何打不开,电脑看相片时照片查看器打不开怎么办
  18. ubuntu设置软件安装源为阿里云
  19. Android-实现邮箱格式的验证
  20. 少儿编程会培养什么能力

热门文章

  1. python transforms_pytorch中的transforms模块实例详解
  2. 360如何查看计算机配置文件,win7中怎么查看路由器配置文件config.bin
  3. 爬虫初识(爬取dytt电影列表及下载地址)
  4. 个人成长语录——我愿永远做一个上进的少年,一个敢于拼搏的人
  5. L1-087 机工士姆斯塔迪奥-PAT 团体程序设计天梯赛 GPLT
  6. ioi 赛制_杨骏昭IOI2019参赛总结
  7. 【mud】xyj450里的toy下的buwawa脚本问题
  8. Iphone版同步推闪退问题
  9. 【Python网络蜘蛛 · 8】:moviepy模块实现音频+视频的合成
  10. calipso是什么意思_porridge是什么意思_porridge的翻译_音标_读音_用法_例句_爱词霸在线词典...