実装したもの
openposeのpython APIを利用して、server化してみる
画像を投げると、骨格推定の情報が埋め込まれた画像が返ってくるという簡単なもの
試した環境
- Ubuntu 16.04.4
- python 3.5.2
- openpose revision: f49e18421da832ae441f75477035786126357401
ソース
実行
-
openposeをpythonライブラリを利用するモードでインストール
本repositoryをクローン
$ git clone https://github.com/komorin0521/openpose_python_server.git
config修正
モデルファイルのパスとホストやポートなど、必要に応じて修正server起動
$ ./run_server.sh
-
POSTして確認
openpose公式のgitからダウンロードした時に含まれる画像で試す場合
$ (time) curl -XPOST -F file=@(path_to_openpose)/examples/media/COCO_val2014_000000000328.jpg http://localhost:3001/get_predict_image > pred.jpg
苦労した点
最初、openposeのインスタンスをmainファンクションで作成して、
その後、OpenPoseServer
のメンバ変数で定義してみたが、
下記のエラーが発生
The CPU/GPU pointer data cannot be accessed from a different thread.
なんとなく頭でデバッグはできたので、(=説明はできない)、
OpenPose
インスタンスをget_predict_image
関数内で作成するようにしたら、案の定うまくいった。
レスポンスまでの時間も1秒程度だったから速度的には(個人的には)許容範囲かな。
メモリの観点では、250MBくらいメモリリークが発生するけど、
数回試したところ、それ以上は増えなかったので、これもまあ許容範囲かな