初学者でも画像解析が行える Face を使って年齢を当てよう！！Microsoft 認定資格 AI-900 を取得したい方必見！


## 本記事について
本記事では、**Azure Cognitive Services の Face で何ができるのか**、簡単な実装を交えてご紹介します。
次のような方をターゲットに厳密性よりわかりやすさを重視して書いています。

- Azure Cognitive Services を触ってみたい方
- AI に触れてみたい方
- AI-900 の資格取得を考えている方

上記に該当されるような方々を対象としております。

また見ていただいた方が Microsoft AI-900 の資格試験に合格できるよう、今後シリーズ化して他の Cognitive Services についてもまとめていきます。

## AI-900 について
AI-900 とは、下記の３つが主に問われる Microsoft の認定資格です。

- Microsoft の AI に関する戦略、理念
- 機械学習に関する基礎知識
- Azure の機械学習サービス

詳細は公式ページで確認することができます。
https://docs.microsoft.com/ja-jp/learn/certifications/exams/ai-900

この資格を取得することで **Azure での機械学習に関する基礎知識を擁する人材であることを証明できます。**
今後、 AI 関係の仕事に就きたい方には有利な資格と言えるでしょう。
テスト難易度としてはあまり高くありませんが、日本語での情報が少ないためテスト対策が少し難しいです。

本記事では Azure の機械学習サービスの中の Cognitive Services についてみていきます。

## Azure Cognitive Services と Face
Azure Cognitive Services とは、機械学習の専門知識がなくても**「見る、聞く、話す、検索する、理解する」**
といった機能を持った AI モデルを簡単に使用することのできる画期的なサービスです。
今回は**「見る」**に特化したサービスの１つである Face を確認します。

Face とは、**人の顔の写った画像から感情などの情報を抽出**してくれるサービスです。
具体的には以下のような情報を読み取ることができます。

- 年齢: 年齢
- ぼかし: 顔がどの程度ぼやけているか  
 (顔が画像でどの程度のメイン フォーカスになっているかを示します)
- 感情: 感情
- 顔ひげ: 顔ひげがあるかどうか
- 眼鏡: 人物が眼鏡をかけているかどうか
- 髪: 髪の種類と髪の色
- 化粧: 画像内の顔がメイクされているかどうか
- 笑顔: 画像内の人が笑っているかどうか

また、Face に関しては無料のデモが用意されているので**本記事で行う内容はすべて無料**で試すことができます。
それでは早速 Face を使用していきましょう！

## Face の使用方法
### Azure Portal 上での設定
まずは Azure Portal へサインインをする必要があります。
https://azure.microsoft.com/ja-jp/features/azure-portal/
まだアカウントを作成したことのない方は無料で作成できます。

サインインができましたら、リソースの作成をクリックしてください。
![ホーム_-_Microsoft_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/8b0b3bac-a138-97e8-3912-70528aed454d.png)
その後、検索窓で Face と検索すると下記のような画面になります。


![Face_-_Microsoft_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/1b144f1d-568e-acd3-84c8-d9872ef793f3.png)


Face から作成をクリックします。

続けて、下記に従って詳細な設定を行います。
その際に**価格レベルを F0** としていただくことで無料で試すことができます。

![Face_の作成_-_Microsoft_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/a9940042-120c-e526-f228-3f10d5b2474a.png)




画像のように入力できたら残りの設定項目はデフォルトのままで先に進み、作成をします。


Face は API コンソール、 C#、 Python を使用して実装を行う事ができます。
今回は Python 形式で顔の情報を取得します。
その際に必要な情報は下記の矢印をクリックすると出てくる**キー**と**エンドポイント**の情報です。
![koike-face_-_Microsoft_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/969f0013-86a8-8423-d6bd-b647ffb4cab1.png)




キーとエンドポイントの情報は下記のように表示されます。
四角で囲ってある部分をこれから使用するためコピーをしておきましょう。
![koike-face_-_Microsoft_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/ba8fa1d9-8c51-5fe6-4ee3-85101d7ab550.png)




### Google Colaboratory で実装

今回は無料で使用できる Google Colaboratory を実行環境として使用します。
Python で Face を使用する際には下記パッケージをインストールすることで簡単に実装することができます。
パッケージの詳細は[こちら](https://docs.microsoft.com/ja-jp/python/api/azure-cognitiveservices-vision-face/azure.cognitiveservices.vision.face?view=azure-python)からご確認ください。

```python:Faceのインストール
pip install --upgrade azure-cognitiveservices-vision-face
```
続けて今回の実装に必要なパッケージをインポートします。

```python:必要なパッケージのインポート
import io
import os
import requests
from io import BytesIO
from PIL import Image, ImageDraw
from azure.cognitiveservices.vision.face import FaceClient
from msrest.authentication import CognitiveServicesCredentials
```

#### ノートブックから Face へ接続
まずはノートブックと Face の接続を行いましょう。
その際に先程コピーしたキーとエンドポイントを使用します。

```python:キーとエンドポイントを変数に格納

KEY = 'ご自身のキー'

ENDPOINT = 'ご自身のエンドポイント'
```

クライアント認証を行い、このサービスを使えるようにしましょう。

```python:クライアント認証
face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))
```

#### 顔の検出
それでは準備が整いましたので Face を使用して顔を検出します。
今回使用するサンプル画像は商用フリーのストックフォトサイトである Unsplash から取得します。
https://unsplash.com

```python:画像の取得

single_face_image_url = 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1950&q=80'
single_image_name = os.path.basename(single_face_image_url)
response = requests.get(single_face_image_url)
img = Image.open(BytesIO(response.content))
```
Face で用意されている事前学習済みモデルを使用します。

```python:学習済みモデルを指定
detected_faces = face_client.face.detect_with_url(url=single_face_image_url, detection_model='detection_03')
if not detected_faces:
    raise Exception('No face detected from image {}'.format(single_image_name))
```
推論結果としては、顔を囲む長方形の頂点の座標が出力されます。
それを画像で表示するために下記のように表示方法の指定を行います。

```python:矩形の表示設定
def getRectangle(faceDictionary):
    rect = faceDictionary.face_rectangle
    left = rect.left
    top = rect.top
    right = left + rect.width
    bottom = top + rect.height
    
    return ((left, top), (right, bottom))
```

推論し結果を可視化しましょう。

```python:顔を検出
draw = ImageDraw.Draw(img)
for face in detected_faces:
    draw.rectangle(getRectangle(face), outline='red')
img
```

![Face_APIの実装_ipynb_-_Colaboratory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/9b9be75a-de92-6c61-d840-a54df61c7766.png)

このように正しく検出ができていることがわかります。
皆さんは画像の少女が何歳に見えますでしょうか？
Face に聞いてみましょう！
#### 検出した顔から情報を取得
まずは画像からどのような情報を取得したいか指定します。
今回は年齢、性別、感情を取得しましょう。

```python:取得する要素の指定
return_face_attributes = ['age', 'gender', 'emotion']
```
取得したい要素を `face_client.face.detect_with_url` に画像と一緒に渡します。

```python:顔の情報の検出
response = face_client.face.detect_with_url(single_image_url, return_face_attributes=return_face_attributes)
```
結果を表示してみましょう。

```python:結果の表示
response[0].as_dict()
```

![Face_APIの実装_ipynb_-_Colaboratory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021129/3bcc6cab-23ec-e01f-7615-35d450163e2d.png)


結果を見ると `age:18 ` ` gender:female` であることがわかります。
`emotion` は今回は `neutral` が一番高いようです。

簡単に写真から顔と顔の詳細な情報を検出することができることがわかっていただけたのではないでしょうか？
Face には様々な機能があり、**顔認証システムなども簡単に開発することができます。**

AI-900 の受験を考えている方は Face を使用する事によって何ができるのかをしっかり抑えましょう。
最後まで読んでいただき、ありがとうございました！

## 参考サイト
[AI-900 試験概要](https://docs.microsoft.com/ja-jp/learn/certifications/exams/ai-900)
[Face 公式チュートリアル](https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/quickstarts/client-libraries?pivots=programming-language-python&tabs=visual-studio)
[Face 公式リファレンス](https://docs.microsoft.com/ja-jp/python/api/azure-cognitiveservices-vision-face/azure.cognitiveservices.vision.face.operations.faceoperations?view=azure-python)

## お知らせ
[![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_130181_36206be5-499a-66df-a401-a28a66f2b3d2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/ae15a062-1ce3-d038-f4e3-dda17f498b9d.jpeg)](https://www.kikagaku.ai/)
動画を通じて、ディープラーニングが一から学習できる大人気コースの脱ブラックボックスが無料になりました。
**手書きの数学とハンズオン形式のプログラミング**によって、初学者でも安心して一から学習できます。
機械学習やディープラーニングを基礎から実践を学びたい方は、ぜひ教材の１つとしてご利用ください！
[▶︎ 脱ブラックボックスコースを無料で学び始めたい方はこちら！](https://www.kikagaku.ai/)