【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息
跑過很多次openposeDemo了,不管是video、Webcam還是Images,都是運行結(jié)果一閃而過,然而我們所要的肯定不是只看一下運行結(jié)果就完事的,很多情況下,我們都希望能夠把運行結(jié)果的圖像、關(guān)節(jié)點坐標(biāo)信息、人數(shù)統(tǒng)計等數(shù)據(jù)信息全部保存下來,以便于我們對openpose進行更加深入的分析和應(yīng)用,那么這篇博客的作用就是告訴大家如何把這些運行結(jié)果保存下來。
openposeDemo的程序運行結(jié)果的保存,其實有兩種方式,一種便是直接使用官方Github的openpose demo的1.0.1的發(fā)布版本的命令行操作,另一種就是修改openposeDemo的源代碼的方式,使得編譯發(fā)布版本的程序直接可以保存運行結(jié)果。下面,筆者就兩種方式做詳細(xì)介紹。
一、命令行模式
根據(jù)官方Github quick-start文檔,Windows上運行openposeDemo 1.0.1版本的程序如下,
根據(jù)以上命令,如果需要保存運行圖片結(jié)果,亦或是保存關(guān)節(jié)點(特征點)的坐標(biāo)信息,亦或是保存人數(shù)統(tǒng)計的信息內(nèi)容,可運行如下命令
【PS】下述命令僅提供Images的命令,其他Video和Webcam的保存方式與Images的一致。
在examples/文件夾下創(chuàng)建與media文件夾并列的文件夾media_out,然后運行如下程序
保存圖像
bin/OpenPose.exe --image_dir examples/media/ --write_images examples/media_out/write_images:源代碼給出的解釋為”Directory to write rendered frames in write_images_format image format.examples”,即為存儲運行結(jié)果圖像的路徑設(shè)置,其格式為 write_images_format ,默認(rèn)為png格式。上面的命令默認(rèn)將添加了骨骼的圖像保存到 media_out文件夾下。
保存json文件
bin/OpenPose.exe --image_dir examples/media/ --write_keypoint_json examples/media_out/write_keypoint_json:源代碼給出的解釋為”Directory to write the people body pose keypoint data. Set format with write_keypoint_format“,即為人體骨骼姿態(tài)的關(guān)節(jié)點數(shù)據(jù)文件,文件格式為 write_keypoint_format,默認(rèn)為 json格式。上面的命令默認(rèn)將添加了骨骼的圖像保存到 media_out文件夾下。
下圖表示一張人體骨骼關(guān)鍵點的json文件,筆者沒有運行face和hand模型,因而只顯示了pose關(guān)節(jié)點的數(shù)據(jù)信息。
“pose_keypoints”即為當(dāng)前圖像中人體18個關(guān)節(jié)點的數(shù)據(jù)信息,其具體的含義還有待深入的了解,這里筆者就不做深究了,至于如何看出是18個關(guān)節(jié)點,其實我們隨便看一遍這個數(shù)據(jù)集,馬上就能看出大概3個數(shù)據(jù)為一組,即表示一個關(guān)節(jié)點,剛好有18組信息。
【2017/8/6】看過官方Github提供的文檔output.md才知道,原來一個關(guān)節(jié)點信息包括(x,y,score)三個信息,x和y即為圖像中的坐標(biāo)信息,取值范圍為(0,image.size),而score則表示預(yù)測評分,做了歸一化處理,取值范圍(0,1),越接近1值表示預(yù)測的越準(zhǔn)確,其關(guān)節(jié)點的還原度就越高,同時姿態(tài)的還原度也就越高。
以上關(guān)節(jié)點的坐標(biāo)信息可以參考官方文檔給出的模型,如下,進行研究
【PS】該模型提供的是COCO 18個關(guān)節(jié)點的骨骼模型。
保存yml文件
bin/OpenPose.exe --image_dir examples/media/ --write_keypoint examples/media_out/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”,即為人體骨骼姿態(tài)的關(guān)節(jié)點數(shù)據(jù)文件,文件格式為 write_keypoint,默認(rèn)為 yml格式。上面的命令默認(rèn)將添加了骨骼的圖像保存到 media_out文件夾下。
【PS】注意Opencv低于3.0版本的,不支持json格式的文本輸出,當(dāng)然,官方提供的Opencv是高于3.0的,大家一開始學(xué)習(xí)為了避免問題,盡可能使用官配版本。
下圖表示一張人體骨骼關(guān)鍵點的yml文件,筆者沒有運行face和hand模型,因而只顯示了pose關(guān)節(jié)點的數(shù)據(jù)信息。
使用同樣的辦法可以生成xml文件,至于yml文件中具體的含義,這里筆者也不再詳細(xì)介紹,因為筆者暫時也還沒弄明白,歡迎已經(jīng)弄清楚的小伙伴給筆者留言。
【2017/8/6】
關(guān)于yml文件
“%YAML:1.0”表示當(dāng)前yaml使用版本為1.0;
“pose_0”表示當(dāng)前處理圖像的全部姿態(tài)信息,包括單人情況和多人情況;
“sizes”表示當(dāng)前”data”為大小是1*18*3的矩陣,其中,”1”表示統(tǒng)計到人的數(shù)量,”18”表示使用的model應(yīng)該檢測到的關(guān)節(jié)點的數(shù)量,筆者使用的是COCO,故而是18,3表示一個關(guān)節(jié)點的坐標(biāo)和score信息。
“dt”這個東東筆者還沒弄清楚,懷疑是數(shù)據(jù)的格式為float,還有待驗證。
“data”中具體數(shù)據(jù)的含義暫時還沒搞懂。
二、源碼修改編譯發(fā)布模式
源碼修改更是方便,現(xiàn)在讓我們來看看openposeDemo的源代碼內(nèi)容,
其中有這樣一段,這里我看明確的看到注釋的“//Result Saving”信息,以上9個值字段便是為運行結(jié)果進行保存所準(zhǔn)備的,具體的含義,筆者在這里就不再胡亂的翻譯了,大家可以看右側(cè)的字段解釋,修改自己想要保存的結(jié)果以及保存結(jié)果的路徑后,就可以執(zhí)行openposeDemo的程序,生成可執(zhí)行文件啦,其生成的內(nèi)容參見命令行模式方案。
三、題外話—關(guān)于Ubuntu
筆者在幫助網(wǎng)友在Ubuntu上保存運行結(jié)果的過程中發(fā)現(xiàn),其實Ubuntu和Windows上的命令是一致的,只要吧可執(zhí)行的命令換成Ubuntu的,如下所示
./build/examples/openpose/openpose.bin --image_dir examples/media/ --write_images examples/media_out/其他命令可以類比來進行修改。
【PS】以上內(nèi)容為筆者探索openpose過程中的淺見,歡迎各位openpose愛好者指出問題和技術(shù)交流,如有不當(dāng)之處,請留言給筆者。
總結(jié)
以上是生活随笔為你收集整理的【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 造车新势力第一!广汽埃安1月交付1020
- 下一篇: 专家:年轻人工资低是因为能力不够 很少有