顔認識AIを使ってアイドル博士を作ってみた

  • このエントリーをはてなブックマークに追加

こんにちは。テンダのAI推進委員会のメンバーGです。

はじめに

世間的にはAIブームも一段落した感じで、下の記事のようなニュースも出ています。

AIブーム終焉の意味するところ

とはいえ、ソースコードを書いてリリースしたり、DBを構築するような感覚でAIを利用できるクラウドサービスが各社から出ている昨今、これらを使って何か面白いネタアプリができないかと思い「アイドル博士」なるものを作ってみました。

元々は、社内の勉強会で「これなら自分でも作れそう」と興味を持ってもらうのが開発のねらいでした。

アイドル博士の概要

アイドル博士は、LINEの公式アカウントをUIとしており、このアカウントに対して顔写真の画像のURLを送信すると、その人に似たアイドルを教えてくれるAIアプリケーションです。

識別可能なアイドルグループは某アイドルグループの姉妹グループ 3つです。

学習用のデータいずれもオフィシャルサイトのメンバー一覧から収集しました。顔の類似度判定には Microsoft Azure Cognitive Services Face (以降、Face と呼びます) を使用しました。下の画像は実行例で、自分の娘の画像を適当な場所にアップロードし、画像URLをアイドル博士に送った結果です。

この例ではとあるアイドルと類似度38%と判定されてプロフィールのURLが返ってきました。

アイドル博士の構成と動作の流れは次の通りです。

まず Google Colaboratory というサービスを使って各アイドルグループのオフィシャルサイトからメンバー全員の顔画像のURLを取得します (図中の1)。

いわゆるスクレイピングという手法です。

収集したURLは氏名などの情報と合わせてCSVファイルに保存します。これを学習データとして Face に登録し、学習させます (図中の2)。これでアイドルグループのメンバーを識別するAIが完成します。

次にLINEビジネスID を作成して公式アカウントを開設します。

そしてこの公式アカウントに対するメッセージ (顔画像のURL) をLINE Messaging API を使用して Google Apps Script へ送信します。

Google Apps Script では Face へ顔認識の依頼とその応答メッセージの生成、送信を行います (図中の3)。

いくつかのサービスを組み合わせているので手間がかかるように見えますが、ひとつひとつの手順で作成したコードはさほど複雑ではありません。

 

アイドルの顔画像(学習データ)の収集と学習

ここからはアイドル博士のコアとなる「アイドルの誰に似ているか」を判定するAIの構築について説明します。

まず、認識するアイドル達の顔画像を収集します。いわゆるスクレイピングと呼ばれるものを行うのですが、対象は某有名アイドルグループの姉妹グループとして全国に存在する中から 3つを選びました(注1)。

スクレイピングはそれぞれのグループのサイトからメンバーの顔画像のURLと氏名をCSVとして取得しますが、今回は Google Colaboratory というサービスを使用しました。これは Google ドライブ上で作成した python コードがオンラインで実行できてしまうツールで、ちょっとしたコードを実行するのに非常に便利です。

スクレイピングの作業はお昼休みや業務後のスキマ時間で済ませたかったので、このような方法になりました。

スクレイピングコードの一例を下記に示します。

たったこれだけです。

これを実行すると次のようなデータが出力されます。

あとは出力データをコピペしてCSVファイルとして保存。エディタで置換して次のように整形しました。

本来ならCSVファイルへの出力やデータの整形もコードにしたいところですが、そこまで時間をかけられないので手で済ませました(注2)。まず動くものを作ることを優先します。

この要領で3グループのメンバー情報をスクレイピングしてCSVを作り、全データを idleList.csv として保存します。

(注1) 本丸のA〇〇48とか坂道系がお馴染みかもしれないのですが、社内の事情通の影響によりこの3グループを採用しました。

(注2) 共働きかつ子育て真っ最中、という身分ですし、オッサンなので夜ふかしすると次の日が辛いということで、自己研鑽もスキマ時間にスピード勝負でやります。

アイドル博士の構築

学習データが集まったので、これを Face へアップロードして学習させ、認識できるようにします。

まずはAzureのダッシュボードから “Cognitive Services” を追加します。次にAPIコンソールにアクセスしてパーソングループを idle で作成します。

パーソングループは顔画像を管理、認識をさせるための入れ物(コンテナ)のようなものだと思ってください。パーソングループを作成するAPIは次の通りです。

Ocp-Apim-Subscription-Key は Cognitive Services のリソースの設定画面から “キーとエンドポイント” の項目で確認することができますので、これを使用します。

APIコンソールから PersonGroup -> Create と辿ってリージョンをクリックすると次のような画面が表示されるので、 personGroupId と Ocp-Apim-Subscription-Key を設定して Send ボタンをクリックするとパーソングループが作成されます。

次に個人情報の追加と顔画像のアップロードを収集したアイドル全員分実行します。これは python コードを使って次のふたつのAPIを繰り返し実行します。

  • [1] PersonGroup Person – Create : ひとりの顔データを管理する Face ID を発行する
  • [2] PersonGroup Person – Add Face : Face ID に対して顔データを追加する

以下、[1] と [2] のAPIを実行するコードを説明してその次に [1] と [2] を繰り返すコードを説明します。

[1] PersonGroup Person – Create のコード

PersonGroup Person – Create のAPIを実行するコードが上記となります。
引数の name と profile には idleList.csv の name 列と profile 列の値がセットされます。

そして end_point にセットしたURLに name と profile をセットしたJSONデータをPOSTします。

[2] PersonGroup Person – Add Face のコード

PersonGroup Person – Add Face のAPIを実行するコードが上記となります。

引数の personId は [1] で説明したコードの戻り値がセットされます。 imageUrl は idleList.csv の image 列の値がセットされます。そして end_point にセットしたURLに imageUrl をセットしたJSONデータをPOSTします。

[1] と [2] を繰り返すコード

最後に idleList.csv を読み込んで  [1] と [2] を繰り返し実行するコードです。
たぶん説明する程のことは書いてないですよね…

以上で、アイドルグループ のメンバーの顔を認識するAIが完成しました!

次はLINE Messaging API と Google Apps Script を使ってアイドルの誰に似ているかを判定してもらうフロント部分の構築になりますが、続きは次回のブログにしたいと思います。

まとめ

ここまで記事を読んでいただき、ありがとうございました。

冒頭で述べたように、クラウドサービスを使うとソースコードを書いてリリースしたり、DBを構築するような感覚でAIを利用できてしまいましたね。

受託開発の現場でもAIというキーワードを聞く機会が増えてきましたが、まずはこのようなサービスを利用して手早くお客様にソリューションを提供する、というのもありだと思います。

  • このエントリーをはてなブックマークに追加
株式会社テンダ
顔認識AIを使ってアイドル博士を作ってみた
テンダ仙台支店
サイトトップ
支店情報
オフィス情報
取り組み
ヴィジョン
事業紹介
開発分野
開発言語
パッケージ
実績紹介
すべて
開発実績
デザイン実績
その他
採用情報
ブログ
お問い合わせ
Copyright© TENDA Co.,Ltd. All Rights Reserved.