M1 MacでPython+OpenCVプログラミングできる環境を整える

# はじめに
環境を一から作る機会があったので，せっかくだから整理します．少しでもお役に立てば．この記事は主に初学者向けなので，PythonおよびOpenCVは基本的に標準的に入るバージョンのものを使います．

:::note
M1 Macを取り巻く環境は日々更新されています．私はさまざまな記事を参考にさせていただいてインストール作業を行いましたが，参照記事ではうまくいかなかったと書かれていた事も，現時点ではスムーズに進んだりしました．先人の努力に感謝します．
:::

## 使用環境
- MacBook Pro (14インチ, 2021) Apple M1 Maxプロセッサ
- macOS Monterey 12.0.1

## この記事をフォローすると使えるようになる環境
- Visual Studio Code
- Homebrew経由でインストールされるPython3
- pip経由でインストールされるOpenCV

## この記事でやらないこと
- pyenvでのPythonのバージョン管理

:::note
この記事を読んでPythonの環境を構築する人にはまだ不要でしょう．pyenvの話が混ざると混乱を招く恐れがあるので，今回は使わないことにします．
:::

# 手順

## Homebrewをインストールする

まず，[HomebrewのWebサイト](https://brew.sh/index_ja)の「インストール」の項にあるコードを，macOSのターミナルに貼り付けて実行します．下記は記事執筆時点での最新のコードの例ですが，Webサイトから入手する方が良いでしょう．

```
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

最初の方で_インストールを続けるにはRETURNキーを，中止するにはそのほかのキーを押してください_という指示が出るので従います．

しばらく待つと，最後の方で```===> Next steps: ```としてPATHを通すように指示されます．そこに書かれている2行のコードをターミナルで順に実行します．

```
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/[ユーザ名]/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
```

ターミナルでヘルプを表示させてみて，無事にコマンドが動作すれば完了です．

```
$ brew help
```

## PythonをHomebrew経由でインストールする

割と何も考えず，最新のPythonをインストールします．

```
$ brew install python3
```

記事執筆時点では，バージョンを確認すると3.9.8がインストールされていました．いい感じです．

```
$ python3 -V
Python 3.9.8
```

いちおうHomebrew由来のものであることを確かめてみます．

```
$ which python3
/opt/homebrew/bin/python3
```

## Visual Studio CodeをHomebrew経由でインストールする

brew cask経由でVisual Studio Codeをインストールできるか探してみます．

```
$ brew search visual studio code
==> Casks
visual-studio-code ✔
homebrew/cask-versions/visual-studio-code-insiders
```

あるのでインストールします．

```
$ brew install visual-studio-code
```

ちなみに筆者の環境では，上記の操作によりApple Silicon版がインストールされました．

## Visual Studio Codeをセットアップする

Visual Studio Codeを使用する際には，Microsoftのアカウントでサインインしておくと環境の共有などが可能で便利です．拡張機能は下記のものを導入しました．

- Japanese Language Pack for Visual Studio Code
- Python
- OpenCV Snippets
- OpenCV-intellisense

Visual Studio CodeでPythonを使用する際には，どのPythonを利用するか? を聞かれます．Mac標準のPythonではなく，Homebrew経由でインストールしたPythonを選択します．先ほど

```
$ which python3
/opt/homebrew/bin/python3
```

で見たパスのPythonを指定してください．

## venvで仮想環境を作り，OpenCVなどを導入する
venvはPython3.3以降に標準搭載されている仮想環境の構築ツールです．作成した仮想環境ごとにライブラリのインストールなどが可能です．

今回は```~/codes```というパスがあった時に```Python_OpenCV_Test```というフォルダを作り，その環境内でOpenCVのコードを動かすことを想定します．操作を明確に書くとこういうことです．

```
$ cd ~/codes
$ mkdir Python_OpenCV_Test
$ cd Python_OpenCV_Test
```

実際に仮想環境を作成するには，このように書きます．

```
Python_OpenCV_Test $ python3 -m venv (name_of_venv)
```

```(name_of_venv)``` は好きなように決められますが，```.venv``` とすることが多いようです．つまり典型的には下記のようになります．

```
Python_OpenCV_Test $ python3 -m venv .venv
```

仮想環境を有効化するには，下記のコマンドを使います．

```
Python_OpenCV_Test $ source (name_of_venv)/bin/activate
```

つまり，名前を```.venv```にした場合は下記のとおりです．

```
Python_OpenCV_Test $ source .venv/bin/activate
```

仮想環境が有効であるときには，ターミナルの行の先頭に仮想環境の名前が書かれます．

```
(.venv) $
```
:::note warn
ちなみに，仮想環境を無効化するにはdeactivateとします．
:::

仮想環境が有効化されている状態で，必要なものをpipを使ってインストールします．今回はこれくらいにします．

```
(.venv) $ pip install numpy
(.venv) $ pip install opencv-python
```

これで環境は整いました．あとは動かすのみです．

## Visual Studio CodeでHello Worldを書く

まず，Visual Studio Codeで「フォルダーを開く」を選択し，先ほどのフォルダを開きます．

![VSCode File Menu](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1942789/3f3e0149-6ce3-ee43-58f5-16c7b7b82f6b.png)

次に，「新しいファイル」を選択し，適当な名前 (例えばhello.py) でファイルを作成します．
このとき，ついでに先ほどのフォルダに適当な画像ファイル (例えばtest.jpg) を置いておきます．

```python:hello.py
### インポート
import numpy as np #numpy
import cv2 #OpenCV

### メインプログラム
img = cv2.imread("test.jpg")

# 画像の表示
cv2.imshow("Hello World", img)
cv2.waitKey(0)

# 全てのウインドウをキル
cv2.destroyAllWindows()
```

このプログラムを実行します．右上にある再生ボタンを押すのが分かりやすいですね．
test.jpgが別ウインドウで表示されれば，OpenCVは正しく使えるようになりました．