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.というエラーについて

# はじめに
<!-- 発端や概要を記載 -->
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.
```
これについて色々試したことを残しておく。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [開発環境](#開発環境)
1. [pipenvで試したけど失敗（使ってない人は飛ばして良い）](#pipenvで試したけど失敗使ってない人は飛ばして良い)
1. [python -m venv venvで作ったらhandtrackingできた](#python--m-venv-venvで作ったらhandtrackingできた)
1. [ついにhandtracking](#ついにhandtracking)
1. [参考文献](#参考文献)

<!-- 各チャプター -->
<a id="#開発環境"></a>
# 開発環境
MacBook Air 2017
macOS Catalina 10.15.16
標準： zsh(bashではない)。

Windows、Ubuntuのことは分かりません。

<a id="#pipenv"></a>
# pipenvで試したけど失敗（使ってない人は飛ばして良い）

まずは仮想環境の準備。
今回作業するのはhandというディレクトリなので、そこに移動。

```
% cd hand
```

このディレクトリが空であることを確認して、以下を実行。

```
% pipenv install
```

handディレクトリ内に作った仮想環境を起動。

```
% pipenv shell
```

%の左側に(hand)が表示され、仮想環境の起動に成功。

```
(hand) % 
```

基本的には、以下の
[Installing on macOS](https://google.github.io/mediapipe/getting_started/install#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がエラーを返す時の対処法](https://qiita.com/junseinagao/items/e38d225e450c83b1800e)
を見つけ、同じような手順でファイルを編集してもエラーは解消されなかった。

そのため、pipenvの仮想環境は一旦諦めることに...。



<a id="#venv"></a>
# python -m venv venvで作ったらhandtrackingできた

さっき作ったディレクトリは削除して、新たにhandディレクトリを作成し、移動。

```
% cd hand
```

ここにvenvという仮想環境を作成。

```
% python -m venv venv
```

起動には以下を実行。

```
% . venv/bin/activate
```

handtrackingの導入手順はさっきの
[Installing on macOS](https://google.github.io/mediapipe/getting_started/install#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)