1. 程式人生 > >【OpenPose-Windows】運行OpenposeDemo.exe 如何保存圖像運行結果及關節點信息

【OpenPose-Windows】運行OpenposeDemo.exe 如何保存圖像運行結果及關節點信息

out ubunt 操作 dash alt 特征 lac 來看 可執行文件

跑過很多次openposeDemo了,不管是video、Webcam還是Images,都是運行結果一閃而過,然而我們所要的肯定不是只看一下運行結果就完事的,很多情況下,我們都希望能夠把運行結果的圖像、關節點坐標信息、人數統計等數據信息全部保存下來,以便於我們對openpose進行更加深入的分析和應用,那麽這篇博客的作用就是告訴大家如何把這些運行結果保存下來。
openposeDemo的程序運行結果的保存,其實有兩種方式,一種便是直接使用官方Github的openpose 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愛好者指出問題和技術交流,如有不當之處,請留言給筆者。

【OpenPose-Windows】運行OpenposeDemo.exe 如何保存圖像運行結果及關節點信息