【Qiita記事無作為試用①】Google Colaboratoryで簡単な顔認識に挑戦

・膨大な素晴らしきプログラムの集積地であるQiitaの中から、無作為に試してみて、惜しげもなく我が物顔を炸裂する記事第一弾。
・興味のあるものは何の躊躇も恥もなく無心で模倣してきた「自己解決反対運動」の信者のため、思う存分発揮していこう。
・初回として、[顔認識処理が簡単に扱える記事](https://qiita.com/FrozenVoice/items/d1dc5f3d780f5097bfab)を発見したので、これを試してみよう。
## 概要
- [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)という、[Jupyter Notebook](https://jupyter.org/)環境を構築不要ですぐに試せるサービスを使って、指定画像を顔認識処理にかけて、返してくれる。  
※Jupyter Notebookとは、実行記録型のデータ分析ツールである。主にPython実行環境として使用されていたが、現在は様々な言語に対応している。

## 結果
＜指定画像、処理前＞
![group.jpg](https://qiita-image-store.s3.amazonaws.com/0/336499/26d6326e-c9a2-18af-bc99-224327177b6a.jpeg)
＜指定画像、処理後＞
![a.PNG](https://qiita-image-store.s3.amazonaws.com/0/336499/0dfc4c5f-b64c-3bc2-f126-58dda078dc04.png)

## 使用環境・技術
- 1. [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)
- 2. Python
- 3. [OpenCV](https://opencv.org/)（解析ライブラリ）

## 手順
### 使用画像の用意
- 今回顔認識処理に用いる好きな画像を用意する。（※公開等なければ、著作権はあまり気にしない。）
- 画像決定すれば、名前をつけて保存。その際の保存名はメモしておく。  
※今回の保存名は「test.jpg」で、使用画像は下記。
![test.jpg](https://qiita-image-store.s3.amazonaws.com/0/336499/88ef1294-de3b-4964-9dfe-d87eb8cd1fb4.jpeg)

### 解析ライブラリの設定
- 画像の顔認識処理のために、解析ライブラリである[OpenCVの公式GitHub](https://github.com/opencv/opencv)から下記のファイルを自分のパソコンにダウンロードする。  
「ファイル名」・・・haarcascade_frontalface_default.xml  
「取得リンク」・・・[ここ](https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml)

### Google Colaboratoryの設定
-  GoogleドライブからColaboratoryプロジェクト作成。  
※Googleアカウントを持っていない人は、作成する。
    - Googleドライブを起動
    - 「新規」→　「その他」→「アプリを追加」の順にクリック。  
    - アプリ検索欄に「colab」と入力して検索。  
    - 検索結果に「Colaboratory」が表示されるので、そこの「接続」ボタンをクリック
    - 改めて「新規」→ 「その他」の順にクリックしていくと、「Colaboratory」が表示されているので、クリック。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/d12a8f06-bbd7-474c-fe19-f595217a1ed6.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/47345c08-431a-31e0-e9ba-389fc70021a3.png)

- 起動したプロジェクトに名前をつける  
※プロジェクト名が反映されるわけではないが、自分がわかる名前をつける。  
- GPU割り当てのため、プロジェクト上部メニューの「ランタイム」から「ランタイムのタイプを変更」をクリック。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/11b3c9ab-0752-9395-d4d0-4665b45d0d4b.png)
- ノートブックの設定を下記のように設定。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/6bec7593-7a82-656e-bfe0-2649ae3a2e8e.png)

- ノートブック設定後、プロジェクトに下記のコードを入力後、左の三角ボタンで実行する。

```python
from google.colab import files
f = files.upload()
```
![as.PNG](https://qiita-image-store.s3.amazonaws.com/0/336499/225b12be-8393-df87-d218-b1a01bc6abe2.png)

- ファイル選択ボタンが表示されるので、先程保存した下記の2つのファイルをアップロードする。  
※アップロードは1つずつ行う。  
①使用画像ファイル・・・今回は「test.jpg」  
②解析ライブラリファイル・・・「haarcascade_frontalface_default.xml 」

- アップロード後、下記のコードを入力して、実行する。

```python
import cv2
from matplotlib import pyplot as plt
# 画像読み込み
img=cv2.imread("./test.jpg")
# 画像のRGB形式への変換
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 解析ライブラリの使用
cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
# 検出処理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
# 検出領域のデザイン処理
for (x, y, w, h) in face:
  cv2.rectangle(img, (x, y), (x + w, y + h), (200,0,0), 3)
# 標準軸の非表示処理
plt.grid(False)
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
plt.imshow(img)
```
※好きな画像を使用している場合は、「test.jpg」の部分を自分用に変える。

- 実行後、下記のようになれば完了。  
![a.PNG](https://qiita-image-store.s3.amazonaws.com/0/336499/4057901d-1bbc-345d-ba2e-454502744d80.png)

## まとめ
- 初回は顔認識処理ということで、「賢人の方々の知の結晶のおかげで、こんなにも恩恵を受けているのだな」と、水分の跡も見られないまぶたをぬぐいながら、記事を書く。
- とはいえこの模倣学習は、GoogleやQiitaや作成者等の多くの方々の偉大な功績によるものなので、毎回の礼拝作業は欠かさない。
- 「今後も、自己満足促進のための素晴らしきプログラム探しに精進しよう」と、堂々他人依存決断。

## 参考
- https://qiita.com/FrozenVoice/items/d1dc5f3d780f5097bfab  
→こちらの記事を参考にしました。大変お世話になりました。