落胆がらくた街

Dr.Rootはサポート終了製品です。

tf-openposeで実際に遊んで見る

  • がいよう
  • デフォルトでの動作
  • run_webcamを改造する
  • run_webcam2.pyの全貌

がいよう

前回の記事↓で動かすところまで書いたtf-openposeで実際に遊んでみる。
tf-openposeをWindowsで動かす - 落胆がらくた街
動作確認はWindows 8.1(64bit)、GPUはGTX750Tiで行ったが、このグラボメモリが2GBしか無くはっきり言ってギリッギリだ。
今からハードウェアを調達するなら最低でもメモリが4GB乗ってるGTX1050Tiあたりがいいだろう(欲しい)。

以下、具体的に試してみたtf-openposeの改造について書く。出来上がったソースコードも記事末尾に纏めて載せてあるぞ。

デフォルトでの動作

tf-openposeのディレクトリにrun_webcam.pyというファイルがあるので、改造する事を見越してこいつを複製しrun_webcam2.pyとする。
次に起動用のバッチファイルを作成しrun.batとする。内容は下記の通り。

@echo off
SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;%PATH%
SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\CUPTI\libx64;%PATH%
py -u run_webcam2.py --model=mobilenet_thin --resize=256x192 --resize-out-ratio=4.0
pause

頭の2行は環境変数の設定で、CuDnnのインストールされたCUDAへのパスを通している(前回記事参照)。
3行目が実際にopenposeを叩いている部分で、コマンドライン引数の意味は下記の通り。

--model=mobilenet_thin…動作モデルをmobilenet_thinに設定する。デフォルトでインストールされているモデルで、デフォルトのcmu(追加でモデルのDLが必要)と比べ高速で動作する。
--resize=256x192...入力された画像のリサイズを行う。各値は16の倍数にする必要がある。デフォルトでは432x384。
--resize-out-ratio=4.0...デフォルトで4.0だが一応明記している。ヒートマップ生成の細かさを表す。大きいほど遅いが高精度。ただし大きすぎてもオーバーフィットする為要調整。
この他に、接続されているカメラを指定する--camera=0やより細かいデバッグ情報を出す--show-process=Falseがある。

追記:pythonコマンドに渡している「-u」は標準出力を別アプリにパイプする際バッファしないようする命令。

run_webcamを改造する

デフォルトでこれを動作させても、元映像に検出された人の骨格が上書きされて表示されるだけなので、各座標の出力をコンソールに吐くよう改造する。
ついでに他にも幾つか改造する。

1. 標準エラー出力に出力されるデバッグ情報を削除する(見た目がさっぱりするので)
2. 標準出力に検出された座標の数値を出力する
3. ウィンドウに表示される画像を黒塗り+骨格にする(自分の顔を見たくない為)
4. GPUのメモリを必要な分だけ確保するようにする(デフォルトだとGPUの空きメモリ全部食う)
5. 動作速度を制限し、FPSをざっくり均一にする

すると最終的にこのように動作する。
f:id:suzumodoki:20190211210207j:plain
コンソールの標準出力に値がどかーっと吐き出されるので、他のアプリケーションでも標準出力をリダイレクトすればデータを引っこ抜けるぞ。
例えばC#アプリでプロセス介して実行すればUnityに取り込んだりもできる。
ちなみにパーツの部位番号に関してはtf_pose/common.pyの13行目を観るとわかるぞ。

run_webcam2.pyの全貌

続きを読む

tf-openposeをWindowsで動かす

お品書き

Vtuberとかがやってるあのアレ、人の動きをコンピュータに流し込むやつ。
KinectやHTC Viveに加えて、ディープラーニングで画像から姿勢推定という選択肢がでてきた。
というわけで、実際にGPUアリで動かすまでの手順でハマったところをメモっとく。
tf-openposeのざっくりとした導入手順は下記参照。
GPU無しで画像のみから人間のボーン推定が出来るtf-openposeを導入する - Qiita

準備

tf-pose-estimation本体。git cloneなりZIPで落とすなりしてローカルに保存する。
GitHub - ildoonet/tf-pose-estimation: Deep Pose Estimation implemented using Tensorflow with Custom Architectures for fast inference.

git。git自体も要るし、付属のgit bashも使う。便利だからいいから入れとけ的なやつ。
Git

3.6系Python。自分の環境では3.6.6。3.7系以降はTFが動かないので死ぬ。
Download Python | Python.org

9.0のCUDA。9.2とか10を入れるとやっぱりTF動かないので死。
CUDA Toolkit 9.0 Downloads | NVIDIA Developer

tensorflow-gpu。通称TF。pythonを入れたらpipで入れる(管理者コマンドで下記叩くだけ)。ググるとanaconda使ってる例が多いけど無くてももちろんOK。

pip install tensorflow-gpu

Cuda9.0用のCuDnn。アカウント取らないと落とせないファック仕様。バージョンは違うが下記ページ参考。Win8ユーザはWin7用入れればOK。
Windows で NVIDIA cuDNN 7.1.4のインストール

作業内容

1. 標準のコマンドプロンプトだと途中コケるので、gitについてくるgit bash管理者権限で開く。
多分git入れた時スタートメニューかなんかに入り込んでると思う。

2. 落としてきたtf-pose-estimationのフォルダに移動する。

3. コマンドを叩く。成功するよう祈る。失敗したらエラーの内容と睨めっこする。

pip3 install -r requirements.txt

4. tensorflowとtensorflow-gpuが両方入ってると競合するので、下記コマンドでtensorflowを消す*1

pip uninstall tensorflow

5. CUDAのディレクトリにPATHを通す。Windows環境でこいつをやらないと実行時にTF呼べなくてコケる。
実行時のバッチで下記を叩いてもいいし、環境変数に追加しても良い。(この手順は無くてもうまくいく場合があるっぽい。)

SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;%PATH%
SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\CUPTI\libx64;%PATH%

6. とりあえず下記コマンドで実行出来れば成功(実行時に動的にパス通す場合)。

py run.py --model=mobilenet_thin

渡せるコマンドと改造について

は次回の記事にかく。

*1:tensorflow-gpuが入っていれば勝手にそっちを呼んでくれるが、どっちも入ってるとノーマルのTFが呼ばれるらしい

DLSiteでブラウザにダウンロードしたファイルの場所(FireFox)

f:id:suzumodoki:20190125154901p:plain
DLSiteで購入したファイルの一部だけ欲しいって時、オフラインに一時保存ってのやると落とせはするんだけど肝心のファイルがローカル上のどこにあるんだって話。
C:\Users\ゆーざ名\AppData\Roaming\Mozilla\Firefox\Profiles\xxxxxxxx.default\storage\default\https+++play.dlsite.com\idb\yyyyyyyyyyyyyyyyyyyyy.files
以下に拡張子無しのファイルがずらーっと配置される。音声作品とかなら容量と更新日時からファイル特定して拡張子変えればそのまま視聴できる。

視聴ページのソース見るとわかるんだけどIndexedDBって仕組みを使ってるので、Chromeでも知らんけど似たようなキャッシュのフォルダ見つければ同じように保存されてると思う。

OpenPoseでCuda云々がOut of Memoryで死ぬ

error == cudaSuccess (2 vs. 0) out of memory
でエラー死する問題。特にカメラ内に人が写った瞬間死んだりするケース。

結論:GPUのメモリ不足。実行時に使う学習モデルのオプション「--model_pose」は標準でBODY_25だが、これをCOCOとかにするとちょっと減る。

ようはGPU使えるけどメモリが足りねーわって時にちゃんと例外をキャッチできずクラッシュするって話。今後のバージョンアップに期待。

ファンタム式アクティブDIを作った

パナ改をギターに応用し、ギターとA/Iを直でつないで録音できる機材を作成した。
f:id:suzumodoki:20180612082209j:plain:w300
ファンタム電源を搭載したインターフェースであれば、廉価に高音質な録音ができる。
回路はパナ改同様コネクタの中にしまいこんだので、取り回しも楽勝だ。
オーディオインターフェースにはハイインピーダンスな楽器を繋ぐためのHi-Z入力が用意されているが、何分そいつの出来が宜しくないときなんかに活躍するぞ。

続きを読む

もっと真面目にパナ改を作った

suzublog.hatenablog.com

 元ネタの「パナ改」に若干の改良が加えられており、ここにきてようやく自分でも回路の動作原理が理解できたので部品選定しつつまた作った。
1804 :「ファンタム式パナ改マイク fetⅡ」誕生8年記念。進化した回路を発表 | ShinさんのPA工作室

結論としてはホワイトノイズの低減に成功しつつ、コストと作りやすさが向上するという満足行く結果が出た。
テスト結果は以下のように。

↓あたらしいの


↓ふるいの

詳細は以下より。

続きを読む