2018夏のweb制作無料相談会(名古屋当日)
2018夏のweb制作無料相談会(名古屋当日)
2018.03.01

幸福って何ですか?顔認識でLIGメンバーを勝手に幸福度診断しちゃいました!

まさくに

こんにちは。幸せですか?

バックエンドエンジニアのまさくにです。寒い日が続いておりますね。幸せですか?

この前、サテライトオフィスである長野オフィスに行って、どこでもオフィスを開催いたしました。そのまま人が死ぬレベルで長野は寒かったのですが、参加者様のいい笑顔を見られたので、暖かくていいイベントだなぁと素直に思いました。

ところでLIGといえば“Life is Good”の略なのですが、果たして社員の皆さんのLifeはGoodなのでしょうか?連日の激務……蔓延するインフルエンザ……加速する無茶振りで、実はGoodが欠けてしまっている人が多いのではないでしょうか。

それはよくない。

“Life is Good”は社員から。ゴウさんもよくそんなことをおっしゃっています。それでは今日は、公開されている顔認識のAPIを使って、LIG全社員の幸福度をチェックしてみましょう。

秘密裏に準備をする

今回はMicrosoft AzureFace APIと、メンバーページの画像を検体として、社員の幸福度を勝手に測ってみます。

Azureに登録をし終わったら、Face APIの準備をします。

顔認識スクリーンショット1

ダッシュボードの「新規」からFace APIを選び、「AI + Cognitive Services」から「Face API」を探し出します。数が多いので上の検索窓から検索して選ぶのもいいでしょう。

顔認識スクリーンショット2

Face APIの初期設定を行います。Azureに登録すると2018/01/30現在、無料期間として22,500円相当が無料になるようですが、僕はビビリなのでFace APIの無料を設定します。

無料での使用の場合、Face APIは1分間に20トランザクションまでなので、お気をつけください。

顔認識スクリーンショット3

作成をクリックするとダッシュボードに戻り、しばらく後にFace APIのセットアップが終わります。ダッシュボードにでき上がったFace APIのリンクから、Face APIのOverviewをご確認ください。そこにAPIのエントリーポイントの記載があるかと思います。あとで使うので保存しておいてください。

顔認識スクリーンショット4

keysのメニューからAPIにリクエストを発行するためのものが作成されています。KEY1とKEY2、どちらかがあれば動くので、これも保存しておいてください。

コードを書く

メンバーページから社員の名前と画像をスクレイピングして、それをそのままFace APIに渡すスクリプトを書きます。LIGブログに対してスクレイピングをするのはこれが初めてではありません。通算4回目くらいなのですが、僕は何をやっているのでしょうか。

ソースコード全体はこちらをご覧ください。注意していただきたいのは次の通りです。

uri = URI('https://eastasia.api.cognitive.microsoft.com/face/v1.0/detect')

APIのエントリーポイントを渡しています。これはAzureのダッシュボードから確認ができます。

request['Ocp-Apim-Subscription-Key'] = ENV['SUB_KEY']

前述のKEYを環境変数経由で渡します。

if body.instance_of?(Array) && body.count > 0 && body.first.has_key?('faceAttributes')
    result = name + ":" + body.first['faceAttributes']['emotion']['happiness'].to_s
  else
    result = name + ":人間ではない"
  end

Face APIが人の顔として判断できたらemotionのhappinessに0以上1以下の値が入っています。「機械ごときに幸福の何が分かるものか」とも思うのですが、これが高いほど幸福度が高い、とAzureさんは言っているようです。LIG社員で1をマークするのは、果たして誰になるのでしょうか。

sleep 5

Face APIの無料プランでは1分間に20トランザクションまでなので、5秒のsleepを入れてアクセス制限をしています。

これがLIGの幸福度だ

$ bundle install --path=vendor/bundler
$ SUB_KEY='your_key' bundle exec ruby touch_face_api.rb

それでは上記コマンドで実行してみましょう。メンバーページの上の方から試していくので、ゴウさんからLIG力が試されます。いざ、Life is Good!

・
・
ゴウ:人間ではない
・
・

!!!!

151746377598652600_72_2

人間ではない。

これは面白い結果が出ました。ゴウさんは人間ではありませんでした。ちゃんと顔が出ているのですが、いつものポーズであるサムズアップのせいでAzureが惑わされているのでしょうか。親指がゴウさんの本体だと解釈されたのかもしれません。

結果は以下のよう続きます。

・
・
ゴウ:人間ではない
づや:0.0
龍﨑 コウ:0.0
まこと:0.0
大山さん:0.606
俺:0.001

・

・

・

この会社ヤバイ。

会社の代表格が軒並み幸福ではありませんでした。由々しき事態だと思います。救世主の幸福度、0.001が何を示しているのか意味深ですが、髪で顔の半分が隠れているにもかかわらず、顔として認識できているのはさすがです。

eed05066f914248a624e6e44ab679cff

その他、LIG社員の幸福度はこちらです。全員が全員0や「人間でない」わけでなく、ちゃんと幸福度1(幸福全開)の人も多いです。LIG社員の面目躍如という感じなので、ぜひご覧ください。

ちなみに僕の幸福度は0でした。

ずっしりと傷つきます。

まとめ

LIGは有効票93人のうち、実に50人が50%を超える幸福であり、8人が人間でないことが分かりました。この疲れきった現代において、十分幸福度が高い会社と言えるのではないでしょうか。

この機械学習が勢いを増している最中、顔がまともに写っているのに、顔が判断できないという人が8人もいることもややウケるのですが、LIGの社員は顔芸が上手な社員も多いため、その辺りが揺らぎを与えているのかもしれません。

Azureの話を真面目にすると、クラウドとして後発の方であるためか、ダッシュボードUIやAPIの使用方法がかなり使いやすいと思いました。あまり使ったことがなく、まだまだ意味不明な部分も多いのですが、あまり混乱なく使える気がします。

Face API自体はhappiness以外にも、髪の色やヒゲ、眼鏡の有無、化粧の有無(?)など、かなり想像力を掻き立てられる顔に関する属性が取得できるようで、工夫次第でかなり使用するシーンが出て来るのではないでしょうか。単純に面白い。

それでは、いざ、Life is Good!