標籤:如何 注意 targe tar ubuntu dash and 直接 官方文檔
跑過很多次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/
write_images:原始碼給出的解釋為”Directory to write rendered frames in write_images_format
image format.examples”,即為儲存運行結果映像的路徑設定,其格式為 write_images_format
,預設為png
格式。上面的命令預設將添加了骨骼的映像儲存到 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
“,即為人體骨骼姿態的關節點資料檔案,檔案格式為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/
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/
其他命令可以類比來進行修改。
【PS】以上內容為筆者探索openpose過程中的淺見,歡迎各位openpose愛好者指出問題和技術交流,如有不當之處,請留言給筆者。
【OpenPose-Windows】運行OpenposeDemo.exe 如何儲存映像運行結果及關節點資訊