2020/07/26 Updated by
2020/07/22 Updated by

OpenPose TensorFlow版

Mac上でデモを動かしてみる(正常動作確認済み)


[Up] Japanese English

環境


tf-openpose を動かす

  1. OpenPose の TensorFlow 版が tf pose estimation として公開されている
  2. https://github.com/ildoonet/tf-pose-estimation
  3. anaconda で python3をインストールする。
  4. 仮想環境 pose を作成する。
  5.     Termnial上で
        conda create -n pose python=3.6 jupyter
    
  6. 作成したpython環境に切り換える
  7.     (pose) % conda activate pose
    
  8. python仮想環境 pose がactivate/deactivate された時に、PATH変数が変更されるようにshell scriptを作成する。 [重要]この環境ではpythonコマンドで3.6が参照されるようになる。
  9. 仮想環境の中にディレクトリ ./env/conda/{,de}activate.d/を作成する。 これらのディレクトリ内のスクリプトは conda activate/deactivate のときにそれぞれ実行される。
      (pose) % cd ${CONDA_PREFIX}
      (pose) % mkdir -p ./etc/conda/{,de}activate.d
      (pose) % touch ./etc/conda/*/{,de}activate.d/env_path.sh
    
    ${CONDA_PREFIX}/etc/conda/activate/env_path.sh
    #!/bin/zsh
    export PATH_BACK=$PATH
    export PATH=${CONDA_PREFIX}/bin:$PATH
    
    ${CONDA_PREFIX}/etc/conda/deactivate/env_path.sh
    #!/bin/zsh
    if [ -z "$PATH_BACK" ]; then
    else
        export PATH=$PATH_BACK
    fi
    
  10. python仮想環境pose を一旦 deactivate して、再び activate する。
  11.     (pose) % conda deactivate
        (base) % conda activate pose
        (pose) %
    
    上記の deactivate.d/env_path.sh は環境変数PATH_BACKが定義されていない場合も正しく動作するはずである。しかし、設定を間違えた場合は環境変数PATHがおかしくなるので、その場合は一旦shellも終了してから新しいshellを起動し、仮想環境poseに切り換えること。
        (pose) % conda deactivate
        (base) % exit    ← shellを終了する(PATH変数がおかしくなっているので)
    [新しいターミナルで]
        (base) % conda activate pose
        (pose) %
    
    ちなみに私の手元のMacではPath変数は次のように変化する。
    (base) % conda activate pose2
    (pose2) % echo $path
    /Users/nitta/anaconda3/envs/pose2/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /Library/TeX/texbin /Library/Apple/usr/bin /Library/Frameworks/Mono.framework/Versions/Current/Commands /Users/nitta/anaconda3/envs/pose2/bin /opt/anaconda3/condabin /Users/nitta/bin
    (pose2) % conda deactivate  
    (base) % echo $path
    /usr/local/bin /usr/bin /bin /usr/sbin /sbin /Library/TeX/texbin /Library/Apple/usr/bin /Library/Frameworks/Mono.framework/Versions/Current/Commands /Users/nitta/anaconda3/envs/pose2/bin /opt/anaconda3/condabin /Users/nitta/bin
    
  12. tensorflowをバージョンを指定してインストールする
  13.     (pose) % pip install tensorflow==1.5
    
  14. README.md を読んでインストールする。
  15.     (pose) % git clone https://www.github.com/ildoonet/tf-pose-estimation
        (pose) % cd tf-pose-estimation
        (pose) % pip install -r requirements.txt
    
  16. modelをダウンロードする
  17.     (pose) % cd models/graph/cmu
        (pose) % bash download.sh
        (pose) % cd ../../..
    
  18. post processing として c++ library をビルドする。
  19. https://github.com/ildoonet/tf-pose-estimation/tree/master/tf_pose/pafprocess
        (pose) % brew install swig
        (pose) % cd tf_pose/pafprocess
        (pose) % swig -python -c++ pafprocess.i && python setup.py build_ext --inplace
        (pose) % cd ../..
    

    _pafprocess.cpython-36m-darwin.so が作成された。

    [注意]もしも上記の path 再設定の定義をしていないと python3.8用ができて、あとでimportに失敗する。 もしかしたら、下記で python3の部分を pytho3.6 としておけばpython3.6用が生成されたかもしれないが、 上記の設定が正しいと思うのでこれ以上追求しない。

        (pose) % brew install swig
        (pose) % cd tf_pose/pafprocess
        (pose) % swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace
        (pose) % cd ../..
    
    tf_pose/pafprocess/_pafprocess.cpython-38-darwin.so ができる。この38はpythonのバージョンではないか?それならばまずい。 python → 2.7.16 python3 → 3.8.5 python3.6 &raa; 3.6.10 conda でpythonの仮想環境を指定したときに、どれも 3.6 が見えるようになってもらいたい。
  20. opencvのバージョンアップ
  21.     (pose) % pip install opencv-python==3.4.0.14
    

    [注意] opencvは現在version 4.x だが、version 3.x である必要があるのでバージョンを指定してインストールする。インストールできるバージョンのチェック方法は以下の通り。

      [インストール済みのパージョンを調べる]
      pip list | grep opencv-python
      pip show opencv-python
    
      [インストール可能なパージョンを調べる]
      pip install opencv-python==
    
  22. run.pyを実行したときに、tensorflow.contrib.tensorrtがないというエラーが起きる
  23.   [エラーへの対処方法]
      pip uninstall tensorflow
      pip install tensorflow==1.14
    
  24. 「tensorrtがない」というエラーへの対処
  25. tf_pose/estimator.py で以下をコメントアウトする。
        14行目 import 文
        315-328行目 if文
    
    diff -c estimator.org.py estimator.py
    授業で配布するプリントを参照して下さい。
    
  26. 画像ファイルに対して実行する
  27.     (pose) % python run.py --model=mobilenet_thin --resize=432x368 --image=images/p1.jpg
    
    python3.6でうごいていることに注意。 正常に動作した。


  28. デモ画像
  29. tf-pose-estimation.mp4