はじめに
mediapipeのhandtrackingを試そうとしていたところ、
以前は上手く行ったのに、自分の環境をイジったせいなのか、
バージョンが変わったせいなのか分からないけど、
こんな感じのエラーが出てきて、全然進まなくなっていた。
(2020/09/22現在)
ERROR: Analysis of target '//mediapipe/examples/desktop/hello_world:hello_world'
failed; build aborted: Either the path attribute of android_sdk_repository or the ANDROID_HOME environment variable must be set.
INFO: Elapsed time: 7.720s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (8 packages loaded, 11 targets con\
FAILED: Build did NOT complete successfully (8 packages loaded, 11 targets con\
figured)
currently loading: @rules_foreign_cc//tools/build_defs/shell_toolchain/too\
lchains ... (2 packages)
Fetching @local_config_cc_toolchains; Restarting.
Fetching @local_execution_config_python; fetching
Fetching @commands_overloads; Restarting.
これについて色々試したことを残しておく。
目次
開発環境
MacBook Air 2017
macOS Catalina 10.15.16
標準: zsh(bashではない)。
Windows、Ubuntuのことは分かりません。
pipenvで試したけど失敗(使ってない人は飛ばして良い)
まずは仮想環境の準備。
今回作業するのはhandというディレクトリなので、そこに移動。
% cd hand
このディレクトリが空であることを確認して、以下を実行。
% pipenv install
handディレクトリ内に作った仮想環境を起動。
% pipenv shell
%の左側に(hand)が表示され、仮想環境の起動に成功。
(hand) %
基本的には、以下の
Installing on macOS
と同じ手順で実行した。
ところが、
手順5. Make sure that Python 3 and the Python “six” library are installed.
が実行できなかった。
(hand) % pip3 install --user six
これを実行して出てきたエラーは以下の通り。
(hand) % ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
調べてみると、
pyenvで制作した仮想環境でpip --userがエラーを返す時の対処法
を見つけ、同じような手順でファイルを編集してもエラーは解消されなかった。
そのため、pipenvの仮想環境は一旦諦めることに...。
python -m venv venvで作ったらhandtrackingできた
さっき作ったディレクトリは削除して、新たにhandディレクトリを作成し、移動。
% cd hand
ここにvenvという仮想環境を作成。
% python -m venv venv
起動には以下を実行。
% . venv/bin/activate
handtrackingの導入手順はさっきの
Installing on macOS
を参照。
sixのインストールはできた。
順調に手順6.Run the Hello World desktop example.
を実行していく。
(venv) % export GLOG_logtostderr=1
ここまでは大丈夫。
問題は次。
(venv) % bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/hello_world:hello_world
新たなエラーは以下の通り。
(venv) % ERROR: Analysis of target '//mediapipe/examples/desktop/hello_world:hello_world' failed; build aborted: Either the path attribute of android_sdk_repository or the ANDROID_HOME environment variable must be set.
INFO: Elapsed time: 0.285s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets conf\
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets conf\
igured)
currently loading: @rules_foreign_cc//tools/build_defs/shell_toolchain/too\
lchains
Fetching @local_config_cc_toolchains; fetching
ハマりポイントはこいつでした。
(venv) % ERROR: Analysis of target '//mediapipe/examples/desktop/hello_world:hello_world' failed; build aborted: Either the path attribute of android_sdk_repository or the ANDROID_HOME environment variable must be set.
よく分からないけど、
ANDROID_HOME environment variable must be set.
が怪しかったのでググってみると、
[MediaPipeのビルドエラー]
(https://teratail.com/questions/290671?rss=all)
が見つかり、同じように試したが、
エラーのまま。
同じページ内に、
参考ページがあったので、見てみました。
[Google MediaPipeのサンプルアプリをビルドしてAndroidにインストールする手順]
(https://qiita.com/d_forest/items/1b40fba54d7d896acfe6#アプリビルドでエラー)
どうやら、
プロジェクトルートにあるWORKSPACEファイルにandroid_ndk_repositoryとandroid_sdk_repositoryがすでにあるので、そこにpath =の行を追記します。
path以下を変更すれば良いみたいなので、
You may run setup_android.sh to install Android SDK and NDK.
android_ndk_repository(
name = "androidndk",
path = "/Users/keita/Library/Android/sdk/ndk-bundle",
)
android_sdk_repository(
name = "androidsdk",
path = "/Users/keita/Library/Android/sdk",
)
[DOWNLOAD ANDROID STUDIO](https://developer.android.com/studio)
から、アンドロイドスタジオをダウンロードし(使わないのに...)、
(venv) % path = "/Users/自分のpath/Library/Android/sdk/ndk-bundle"
と
(venv) % path = "/Users/自分のpath/Library/Android/sdk/"
を変更し、
もう一度以下を実行する。
(venv) % export GLOG_logtostderr=1
% bazel run --define MEDIAPIPE_DISABLE_GPU=1
mediapipe/examples/desktop/hello_world:hello_world
今度はうまくいき、Hello World!が10回表示された。
これで、handtrackingの準備完了。
補足:
途中で、numpyがないと怒られるかもしれないが、pipでインストールしよう。
<a id="#hand"></a>
# ついにhandtracking
上記の環境設定ができていればあとは簡単。
順番に実行してくだけ(初回の待ち時間30分くらい...)。
(venv) % bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu
--calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt
(venv) % export GLOG_logtostderr=1
(venv) % bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu
--calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt
これでラートと手の接触を可視化したい...。
<a id="#reference"></a>
# 参考文献
- [Installing on macOS](https://google.github.io/mediapipe/getting_started/install#installing-on-macos)
- [pyenvで制作した仮想環境でpip --userがエラーを返す時の対処法](https://qiita.com/junseinagao/items/e38d225e450c83b1800e)
- [MediaPipeのビルドエラー]
(https://teratail.com/questions/290671?rss=all)
- [Google MediaPipeのサンプルアプリをビルドしてAndroidにインストールする手順]
(https://qiita.com/d_forest/items/1b40fba54d7d896acfe6#アプリビルドでエラー)
- [mediapipe hand trackingお試し](https://qiita.com/3attoC/items/b5bad7b2d54fa0bf013a)