【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息

跑过很多次openposeDemo了,不管是video、Webcam还是Images,都是运行结果一闪而过,然而我们所要的肯定不是只看一下运行结果就完事的,很多情况下,我们都希望能够把运行结果的图像、关节点坐标信息、人数统计等数据信息全部保存下来,以便于我们对openpose进行更加深入的分析和应用,那么这篇博客的作用就是告诉大家如何把这些运行结果保存下来。 
openposeDemo的程序运行结果的保存,其实有两种方式,一种便是直接使用官方Githubopenpose demo的1.0.1的发布版本的命令行操作,另一种就是修改openposeDemo的源代码的方式,使得编译发布版本的程序直接可以保存运行结果。下面,笔者就两种方式做详细介绍。

一、命令行模式

根据官方Github quick-start文档,Windows上运行openposeDemo 1.0.1版本的程序如下, 


根据以上命令,如果需要保存运行图片结果,亦或是保存关节点(特征点)的坐标信息,亦或是保存人数统计的信息内容,可运行如下命令 
【PS】下述命令仅提供Images的命令,其他Video和Webcam的保存方式与Images的一致。

在examples/文件夹下创建与media文件夹并列的文件夹media_out,然后运行如下程序

保存图像

bin/OpenPose.exe --image_dir examples/media/ --write_images examples/media_out/
  • 1
  • 1

write_images:源代码给出的解释为”Directory to write rendered frames in write_images_formatimage format.examples”,即为存储运行结果图像的路径设置,其格式为 write_images_format ,默认为png格式。上面的命令默认将添加了骨骼的图像保存到 media_out文件夹下。

保存json文件

bin/OpenPose.exe --image_dir examples/media/ --write_keypoint_json examples/media_out/
  • 1
  • 1

write_keypoint_json:源代码给出的解释为”Directory to write the people body pose keypoint data. Set format with write_keypoint_format“,即为人体骨骼姿态的关节点数据文件,文件格式为write_keypoint_format,默认为 json格式。上面的命令默认将添加了骨骼的图像保存到 media_out文件夹下。 
下图表示一张人体骨骼关键点的json文件,笔者没有运行face和hand模型,因而只显示了pose关节点的数据信息。 

“pose_keypoints”即为当前图像中人体18个关节点的数据信息,其具体的含义还有待深入的了解,这里笔者就不做深究了,至于如何看出是18个关节点,其实我们随便看一遍这个数据集,马上就能看出大概3个数据为一组,即表示一个关节点,刚好有18组信息。 
【2017/8/6】看过官方Github提供的文档output.md才知道,原来一个关节点信息包括(x,y,score)三个信息,x和y即为图像中的坐标信息,取值范围为(0,image.size),而score则表示预测评分,做了归一化处理,取值范围(0,1),越接近1值表示预测的越准确,其关节点的还原度就越高,同时姿态的还原度也就越高。 
以上关节点的坐标信息可以参考官方文档给出的模型,如下,进行研究 
 
【PS】该模型提供的是COCO 18个关节点的骨骼模型。

保存yml文件

bin/OpenPose.exe --image_dir examples/media/ --write_keypoint examples/media_out/
  • 1
  • 1

write_keypoint:源代码给出的解释为”File extension and format for write_keypoint: json, xml, yaml & yml. Json not available for OpenCV < 3.0, use write_keypoint_json instead”,即为人体骨骼姿态的关节点数据文件,文件格式为 write_keypoint,默认为 yml格式。上面的命令默认将添加了骨骼的图像保存到 media_out文件夹下。 
【PS】注意opencv低于3.0版本的,不支持json格式的文本输出,当然,官方提供的Opencv是高于3.0的,大家一开始学习为了避免问题,尽可能使用官配版本。 
下图表示一张人体骨骼关键点的yml文件,笔者没有运行face和hand模型,因而只显示了pose关节点的数据信息。 

使用同样的办法可以生成xml文件,至于yml文件中具体的含义,这里笔者也不再详细介绍,因为笔者暂时也还没弄明白,欢迎已经弄清楚的小伙伴给笔者留言。 
【2017/8/6】 
关于yml文件 
“%YAML:1.0”表示当前yaml使用版本为1.0; 
“pose_0”表示当前处理图像的全部姿态信息,包括单人情况和多人情况; 
“sizes”表示当前”data”为大小是1*18*3的矩阵,其中,”1”表示统计到人的数量,”18”表示使用的model应该检测到的关节点的数量,笔者使用的是COCO,故而是18,3表示一个关节点的坐标和score信息。 
“dt”这个东东笔者还没弄清楚,怀疑是数据的格式为float,还有待验证。 
“data”中具体数据的含义暂时还没搞懂。

二、源码修改编译发布模式

源码修改更是方便,现在让我们来看看openposeDemo的源代码内容, 

其中有这样一段,这里我看明确的看到注释的“//Result Saving”信息,以上9个值字段便是为运行结果进行保存所准备的,具体的含义,笔者在这里就不再胡乱的翻译了,大家可以看右侧的字段解释,修改自己想要保存的结果以及保存结果的路径后,就可以执行openposeDemo的程序,生成可执行文件啦,其生成的内容参见命令行模式方案。

三、题外话—关于Ubuntu

笔者在帮助网友在Ubuntu上保存运行结果的过程中发现,其实Ubuntu和Windows上的命令是一致的,只要吧可执行的命令换成Ubuntu的,如下所示

./build/examples/openpose/openpose.bin --image_dir examples/media/ --write_images examples/media_out/
  • 1
  • 1

其他命令可以类比来进行修改。

【PS】以上内容为笔者探索openpose过程中的浅见,欢迎各位openpose爱好者指出问题和技术交流,如有不当之处,请留言给笔者。

时间: 2024-12-29 23:20:14

【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息的相关文章

Windows Phone截取当前屏幕保存图像的代码

导入命名空间 using System.Windows.Media.Imaging; using System.IO; using Microsoft.Xna.Framework.Media; 代码: public void CaptureScreen(object sender, EventArgs e) { WriteableBitmap bmp = new WriteableBitmap(480, 800); bmp.Render(App.Current.RootVisual, null)

[Winform]只允许运行一个exe,如果已运行则将窗口置前

摘要 接着介绍项目中用到的一些方法,在winform中,打好包,有时并不允许运行多个客户端,要保证只有一个客户端运行.如果已经运行了,则弹出已运行的窗口,使其展示. 方法 判断是否有相同的进程 /// <summary> /// 获取当前是否具有相同进程. /// </summary> /// <returns></returns> public static Process GetRunningInstance() { Process current =

解决Windows下安装MySQL 5.5,运行MySQLInstanceConfig.exe没有响应的方法

我在Windows Server 2003虚拟机上安装MySQL5.5(社区版).这个虚拟机之前被别人安装过MySQL5.5和MySQL5.0,但是忘了root密码,所以重装.不出意外的遇到了配置MySQL Instance时MySQLInstanceConfig.exe没有响应的问题.(我记得以前遇到这个问题,就果断换了MySQL5.0,绕开却并未解决) 试了很多方法,有说需要以Administrator身份运行(据说WIN7上安装会是这个问题,而我用的是Windows Server 2003

windows下postgresql安装失败解决方法:无法运行getlocales.exe

今天要安装postgresql但是安装的时候出现错误 Unknown error while running C:\Users\jinjin\AppData\Local\Temp\postgresql_installerxxxxxxx\getlocales.exe 网上百度对这个问题搜了一下只有3个链接,谷歌了一下后尝试解决这个方法. 主要原因应该是VC2010没有安装,但是我安装了之后还是依然报错.然后发现是我在安装安装版之前尝试使用过免安装的二进制版,在运行initdb的时候提示报错缺少一个

当您在 64 位 Windows 上运行 Regsvr32.exe 时出现错误信息

尝试运行 Regsvr32.exe 注册在 64 位版本的 Windows 32 位动态链接库 (DLL) 时您会收到以下错误消息: 若要解决此问题,从 %SystemRoot%\Syswow64 文件夹中运行 Regsvr32.exe.请键入以下命令以注册 DLL: cd \windows\syswow64regsvr32 c:\filename.dll

python+appium 【已解决】真机运行appium报错“WebDriverException: Message: A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c.......详见内文

问题报错提示: selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c "D:\AutoTest\adt-bundle-windows-x86-20140702\sdk\platform-tools\adb.exe -s GWY0216A

Windows下将nginx安装为服务运行

今天看到nginx这个小服务器软件正式版更新到了1.4.2,想玩下它.这个服务器软件虽小,但功能强大,是开源软件,有着良好的性能,被很多个人.企业,甚至大型企业所使用! 由于是在Windows下,所以只能双击运行,然后通过以下命令来管理:  Nginx/Win32是运行在一个控制台程序,而非windows服务方式的.服务器方式目前还是开发尝试中,Nginx/Win32可以使用以下开关来管理它: Nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务.(快速退出)

错误提示 - WeChatWeb.exe - 损坏的图像(OPENGL32.dll)

用户运行微信电脑版时候出现如下错误提示: WeChatWeb.exe - 损坏的图像应用程序或 DLL C:\WINDOWS\system32\OPENGL32.dll 为无效的 Windows 映像.请再检测一遍您的安装盘.应用程序或 DLL C:\WINDOWS\system32\GLU32.dll 为无效的 Windows 映像.请再检测一遍您的安装盘. 程序其实还能运行,只是部分内容无法显示(比如公众号的图文文章). 用户电脑为XP系统,以为OPENGL32.dll文件坏了,准备相应文件

C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以让一个exe即能直接运行也行安装为windows服务 首先我们创建一个Windows应用程序,(我创建的是控制台程序,WinForm也一样) 接下来在项目中添加一个Windows服务类 然后双击"MainService.cs",在上面点右键"打开代码" 这里面写服务的具