Pythonで顔認識を爆速で自分のPCで実験してみる

#Anacondaをインストール
https://www.anaconda.com/download/#macos
今回は、Python 3.7 version を使用しています。

ダウンロードして開くと、下の画面が出てくると思うので、Jupyterを選択しましょう。そうすると、ターミナルが起動してブラウザでPythonのコードが書けるようになると思います。
<img width="1280" alt="スクリーンショット 2018-12-15 15.51.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/926c2da0-2664-e23a-4725-2162482dc058.png">
<img width="570" alt="スクリーンショット 2018-12-15 16.04.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/3059e89e-47bf-ece5-dd0e-6c1651a3fa10.png">
##pythonのファイルを新規作成
画面右上のNewというボタンから、Pythonのファイルを作りましょう。
<img width="278" alt="スクリーンショット 2018-12-15 16.07.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/005d385f-351d-c127-f702-9a603a077407.png">
すると、下の画面が開くと思います。この状態で、新規にファイルが作られています。
<img width="1196" alt="スクリーンショット 2018-12-15 16.08.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/d2182f09-6855-f24b-1cc9-038abc146d06.png">
名前を、faceRecognitionとしておきましょう。
<img width="1200" alt="スクリーンショット 2018-12-15 16.13.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/6cb27bfe-d9e5-d95e-6e7e-4411432bd142.png">
##いよいよ実装！顔認識！
まずは、opencvをインストールしましょう。
IN [ ]:の中にpythonのコードを書いて、実行しましょう。（Shiftを押しながらEnter）

```faceRecognition.ipynb
!pip install opencv-python
```

周りの枠が緑ではなく、青の状態でキーボードのbを押すと、新しくコードが打てる四角が出てきます。
<img width="1128" alt="スクリーンショット 2018-12-16 4.01.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/b2af991b-8116-01f1-4d82-cdd00d09bcf9.png">
そしたら、wgetコマンドでgitに上がっているxmlファイルを取ってきましょう。（有難や）

```faceRecognition.ipynb
!wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_alt.xml
```

!wgetコマンドが使えない！って人は、
ターミナルでコマンドをインストールしましょう。

```terminal
$ brew install wget
```
brewコマンドが使えない！って人は、(macの人は)
コマンドライン・デベロッパーツールをインストール
ターミナルでコマンドをインストールしましょう。

```terminal
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
!wgetでダウンロードできたら、xmlファイルが同じディレクトリの階層にあると思います。
<img width="1187" alt="スクリーンショット 2018-12-15 16.14.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/7588f104-5d98-aa1b-81b1-c815b5f98d96.png">
新しく、また緑から青の四角の状態に戻してキーボードのbを押して新しい四角を出して、変数に入れて確認してみましょう。

```faceRecognition.ipynb
cascade_path = "haarcascade_frontalface_alt.xml"
```

無事に動いていたら、エラーなどが出てこないので動いていると思います。
では、最後に新しくコードを書ける四角をまた出して、コードを書いていきます。

```faceRecognition.ipynb
import cv2
cap = cv2.VideoCapture(0)

while True:
    ret, im = cap.read()
    
    # ここからのコードを変えながら、微調整するとオリジナルになると思います。
    img_gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
    cascade = cv2.CascadeClassifier(cascade_path)
    faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=2, minSize=(80, 80)) # minNeighborsは人数
    print(faces)

    if len(faces) > 0:
        for (x, y, w, h) in faces:
            cv2.rectangle(im, (x,y), (x+w, y+h), (255, 0, 0), 2)

    import matplotlib.pyplot as plt
    % matplotlib inline

    img = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)

    plt.imshow(img)

    blur = cv2.GaussianBlur(im, (0, 0), 1)
    cv2.imshow('camera capture', blur)
    key = cv2.waitKey(10)
    # カメラはESCキーで終了できるように。
    if key == 27:
        break

# 一旦画像削除の命令
cap.release()
# カメラが立ち上がっているので、全てのウィンドウを閉じる
cv2.destroyAllWindows()
```

うまく動けば、以下のように顔認識できているはずです。
<img width="409" alt="スクリーンショット 2018-12-16 3.36.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/216701/118e4272-79f8-9558-0644-9eb698efe33d.png">