Aidemy 2020/12/13
#はじめに
こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
今回は、FaceAPIの投稿になります。どうぞよろしくお願いします。
*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。
今回学ぶこと
・FaceAPIについて
#FaceAPIについて
##FaceAPIとは
・__FaceAPI__とは、__顔検出や感情認識、顔認証__などが行えるAPIである。
・__顔検出__は画像の中のどこに顔があるかを検出し、年齢や性別に基づいた顔の特徴の予測値を含む__顔属性__を取得することができる。
・__感情認識__は、顔の表情を分析し、怒りや悲しみなどの感情を__信頼度__という形で取得する。
・__顔認証__は2つの顔が同一人物のものである確率を検証するものである。この確率を__信頼度スコア__という形で習得できる。
・このAPIを使うために、Chapter1の時と同様に__開発者登録__を公式のページにアカウント登録をすることで、__FaceAPI__に登録できるようになる。
・具体的な流れは以下を参照。
##感情認識
・このChapterでは、前項の3つのうち、__感情認識__を取り扱う。APIのレスポンスはそれぞれの感情の度合いが以下のような数値で表される。形式は__json__である。
##FaceAPIを使ってみる
・流れは以下の通り。
・HTTP通信__を定義。(connection)
・画像データの__送信__のため「"POST"」__を指定。
・レスポンスを__受信__し、json形式で読み込む。
・上記3つの流れが終了後、感情分析を行うことができるようになる。
・HTTP通信__の定義については、データベースに接続する時のように、「conn」という変数に、http.clientモジュールの「HTTPSConnection()」を格納することで定義できる。引数は以下のコードを参照。
・「"POST"」の指定は「conn.request()」の中で行う。第2引数にはparamsで取得できるリクエストデータを以下のように指定し、第3引数にファイル名をopen関数で指定する。
・レスポンスの受信は「conn.getresponse()」__で行い、これをread()で読み込み、json.loads()に指定することでjson形式で読み込むことができる。
・また、__エラーが出た時の処理__として、try-except文のexcept部分にエラーメッセージを記述している。
##感情認識を行う
・前項でデータをjson形式にしたので、これを__DataFrameに変換__し、これをもとに感情のスコアのリストを取得する。このスコアの最大値を抽出することで、これを感情として出力する。
・これを実際にコードで記述する。jsonデータを受け取り、各感情をリストにして返す関数__「ReadJson()」と、この感情のリストを受け取って最大値を抽出し、感情を出力する関数「Recognize()」__を作成する。
・__ReadJson()__の方は、emoに、__分析する感情__をリスト形式で格納する。このemoについて、渡されたデータのそれぞれから__感情の情報(感情値)__を抜き出し、emotionというリストに格納し、これを返す。
・__Recognize()__の方は、このemotionを受け取り、その__最大値のインデックス__をnumに格納し、これをpredとして返す。
・これらの関数は前項で記述したtry文の中で、jsonファイルを読み込んだタイミング使用する。コードは以下の通りである。
今回は以上です。最後まで読んでいただき、ありがとうございました。