【Python】イケメン判定アプリでメンバーの顔診断した結果…【IT業界/転職】
今回の出演者
新卒ITエンジニア
金融系ITエンジニア
データサイエンティスト
ITサプリについて
この記事は動画『ITサプリ』で配信している内容をもとにテキスト配信しています。ITサプリは未経験からIT業界へ転職したい方に向けて情報配信をしているYouTubeチャンネルです。IT業界ではたらく上で役立つ知識を発信していますので動画でもお楽しみください。
じま
今回のテーマは『Pythonでできることを実践してみた』ということで、ゲストにデータサイエンティストのしゅうさんをお招きしました。前もって作成いただいたツールで「Pythonがどういった動きをしているのか」などを説明できればと思います。
1.ツールの紹介
じま
まず、今回はどういったツールを作成していただいたのでしょうか? また、どれくらいの期間で作成されましたか?
しゅう
今回は画像や写真から人の顔を検出して、その顔が「誰に似ているのか」ということを判別できるようなツールを作ってきました。作成時間は、3~4時間くらいですね。
けい
3~4時間ですか!? 結構サックリ……
でもないですよね。お忙しいのに、ITサプリのために3~4時間も割いていただいて、本当にありがとうございます。
では本題に戻りまして、顔の判別ということでしたが、実際に誰の顔を判別するのでしょうか?
しゅう
今回は要望をいただきましたので、木村拓哉さん、竹内涼真さん、中村倫也さん、佐藤健さん、吉沢亮さんの5人ですね。この中で「誰に1番似ているか」を判定するツールになります。
けい
物凄いイケメンの名前が並びましたね。
じま
そのイケメン5人に「似ているのか」判定をされる人というのは、誰なのでしょうか?
しゅう
前もって頂いたお2人の画像から判定します。
けい
ちょっと勘弁していただきたいですね……
今回ミーティング無かったのはそういうことですか(笑)
しゅう
今回はデータの収集段階から機械学習モデルを作って、学習させるところまで行いました。この処理を全部やろうとすると、大体20~30分くらいの実行時間が掛かります。とはいえ、画像の中に映っている人が「誰に1番似ているのか」といった判定はすぐにできますので、そちらから見ていきたいと思います。
2.イケメン度チェック
しゅう
まず、けいさんの結果を見ますと、1番似ているのは木村拓哉さんで、大体60%の確率で似ているそうです。
けい
6割木村拓哉ですか!? 60%はもう、ジャニーズ事務所に片足突っ込んでいますよね。Pythonやるな!
じま
すごい結果ですけど、この6割というのはどこから?
しゅう
中身としては、対象の画像に映る人の顔が「5名の芸能人の中では誰に1番分類する確立が高いか」というものになります。その結果「5人の中では6割くらい木村拓哉さんに似ている」という感じですね。
けい
あ、まったく片足突っ込んでなかったですね。ジャニーズ事務所に謝罪したいと思います(笑)
しゅう
では、続いてじまさんの結果ですね。33%佐藤健です。
じま
なるほど。先程けいさんでは「木村拓哉60%」と出ていましたが、この33%というのは、結構いろいろな人に分類されてしまった感じでしょうか?
しゅう
これは、いろいろな人のイケメン要素が合わさっているということです。
じま
おっと……? 平均取れていて、逆に良い感じということですかね(笑)
それにしても、証明写真みたいなちゃんとした写真じゃなくても、日常の写真からでも解析は可能なのですね。
しゅう
顔の検出は意外と簡単でして、この黄枠の四角いところを、AIが「顔だよ」と認識しています。
じま
今回はいないのですが、てもしの画像もあるということで、勝手に結果の方を見ていきたいと思います!
しゅう
てもしさんは、竹内涼真さんが47%くらい。
けい
イケメン5人の中では、竹内涼真要素が強いということですね。
しゅう
5人の内、誰の要素が1番強いかグラフで表示してみましょうか。
まず、けいさんのグラフですね。そこそこ竹内涼真も入っています。
けい
そこそこ……
いや、結構入っていますね。この結果からすると、系統的にはこの2人のどちらか、みたいな感じかな。
じま
面白いですね。
しゅう
これが、てもしさんのグラフです。
けい
てもしも、何となく僕と似た感じがします。
じま
2人とも、上の3人の要素が少なめですね。
しゅう
少し混ざっているけれど、竹内涼真と木村拓哉要素が多め、ということですね。
続いて、じまさんの結果がこちらです。
じま
僕の結果は、2人と真逆みたいな感じですね。
しゅう
多分、顔の系統が全く違うからだと思います。
けい
上の3人は、どちらかというと「シュッとしたイケメン」というイメージがありますよね。
3.ツールやPythonの解説
じま
ちなみに、この有名人の写真というのは、何枚ぐらいを集めてデータとして使っているのでしょうか?
しゅう
これは「今回は300枚くらいかな」と思ったので、1人につき250枚~300枚くらいを集めて、使用しました。
けい
それぐらいの枚数があると「AIがきっちり判別できる」というか、それだけの枚数があれば「AIの精度が上がる」という感じですか?
しゅう
精度としては、もっと少なくても良いかもしれないです。
じま
先程は実行結果だけを見せていただきましたが、ツールの中身というのは、実際どういった風に作られているのでしょうか?
しゅう
今回のツールではPythonの得意なところである「画像処理」と「スクレイピング」のところを使用しています。あとは「データ処理」や「可視化」のところも使用していますね。これを比較的簡単に書けるようにしているので、大体3~4時間でコードが書けた、ということです。
けい
Pythonで使える要素を、結構フルに使われている感じでしょうか?
しゅう
割と使っていますね。アプリにしようかとも考えましたが、そこまでは……(笑)
今回の場合はGoogleの『Colaboratory』というサービスを利用して作りました。このサービス自体、業務の中でもよく使うものですね。この四角単位でプログラムを実行することができるので、Pythonが人気な理由の1つでもあるデータ分析で使う際に、すごく便利です。
けい
その四角単位、セル単位っていうのは「行ごとに」ということですか?
しゅう
行ごとではなく、この1つの四角ですね。横に1、2、3と数字が付いていると思います。この左にある数字がまとまりを表していまして、一番上は1~28がまとまり、次が1~3というような流れですね。
けい
その赤枠で囲われた中のスクリプトだけを動かす、みたいな感じですか?
しゅう
そうですね。この四角単位ごとで結果がすぐに表示できるので、プログラムと対話するような、心を通わせて作れる感じが、Pythonが人気の理由だと思います。
じま
全部一緒だと、一度実行を押した場合、全部の処理が終わるまで確認もできないですよね。
けい
ということは、最初からじゃなく「間の一部分だけ処理をやりたい」とかも可能ですか?
しゅう
可能です。なので、先程出していたように「結果だけ見たい」という時も、結果が書かれているセルだけ実行すればできる訳です。
じま
ちなみに、全体で何行ぐらい書かれていますか?
しゅう
何行でしょうね、これ。200行もいってないような気がします。
じま
あと、今回のツールの画像解析で、深層学習というのを使っている部分はありますか?
しゅう
ありますよ。顔の画像は、人の目では「こういう特徴があるな」という風に見分けられますが、機械には「どういう特徴なのか」ということがイマイチ分からないということがあります。そのため、特徴を抽出して数字で表せるように、ディープラーニングを用いています。
実際、上手くいかなかったのでテスト結果には使っていませんが、もう少し複雑なディープラーニングのモデルを使用して「顔の画像を分類できるか」というところまで試しました。
じま
その部分のスクリプトを見せてもらえますか?
しゅう
この辺りがディープラーニングで試したところですね。コードとしては割と長めです。
けい
具体的に、顔の特徴をどうやって数値化しているのですか?
しゅう
画像というものは、色味によって数値を変えて表されています。それを「どういう形で分布しているか」みたいな部分をいい感じに数学で計算して均して、顔を128個の数字で数値化しています。
けい
つまり、普段見ている画像も裏では数字になっている、ということですか?
しゅう
そうですね。
じま
ちなみに、Pythonにはライブラリという機能があると思いますが「Pythonならではのコード」みたいなものが分かる部分はありますか?
しゅう
よく使っているライブラリは、下にある画像の1枚目を見てください。今回に特化して使ったライブラリは2枚目にまとめました。
ちなみに「どこに顔があるか」というのを検出するコードは、3枚目の画像の赤枠で囲った1行になります。
けい
この1文だけで、顔の認識ができる?
しゅう
はい、認識が終わっています。さらに、次のこの1行だけでこの顔画像を128個の数字に直しています。
けい
それは、途中の処理に使われるコードが、全部ライブラリの中に入っているから、ですか?
しゅう
はい。入っているおかげで、この2行だけで顔の解析が終わっています。
じま
Pythonのことを知らなくても、これを聞いただけで結構簡略化できているのが分かりますね!
しゅう
あと、ここの2行だけでAIの学習が終わっています。
けい
その『AIの学習』ってどういうことですか?
しゅう
AIに知識を教えて、かしこくする感じです。なので、今回のもので例えるなら「この顔の特徴だったら竹内涼真」みたいなことを覚えさせています。
けい
この2行だけで教えてあげている、ということですね。すごい。
しゅう
1人あたり300枚ぐらいの画像を集める作業も、この3行で処理が終わっていますね。
けい
それは「検索→見つける→覚える」という作業の流れですか?
しゅう
検索してきて、その画像をダウンロードするところまでですね。これを300×5人で1500回分やっていまして、大体7~8分で終わります。
けい
その枚数を7~8分ですか? すごい!
じま
ドライブに入っているフォルダとかを指定して、その指定場所に画像をあらかじめ保存しておかないといけない、みたいなことではない?
しゅう
ではないです。ここではGoogle検索していますので。
じま
他のツールだと、多分「フォルダに必要な画像を用意してそこを参照して行う」みたいな流れがありますよね。
けい
人間がやろうとしたら、労力的にも何百倍ですよね。
じま
しゅうさん目線では、Pythonを勉強してからどれくらいで、こういったコードを書けるようになると思いますか?
しゅう
1~2カ月でできる人はできると思いますよ。ディープラーニングのところは少し難しいので勉強が必要になるでしょうから、ディープラーニングを除いた場合、ですね。
けい
このツールを作成された時に、どのような手順で作成されましたか?
しゅう
まず「どういう方法で顔が分類できるか」ということを考えながら調べます。僕の場合はそこから最終的な着地点を考えていました。今回では2通り考えていて、1つ目が『ディープラーニングで顔を分類する』パターン、2つ目が『単純な機械学習モデルを使って最終的に分類する』パターン。1つ目は試して上手くいかなかったので、2つ目で作成しました。
ここから逆算して「何が必要か」ということを少しずつ考えていくと「画像分類をするモデルを作るから少なくとも顔の画像はいるだろう」と思って、そこでスクレイピング。次に「顔がどこにあるか」というのを知らないといけないので、それを抽出してデータ化して、最後に機械学習モデルを学習させてテストしてみた、という感じですね。
4.再撮影と実演
けい
では、新しい画像を準備しましたので、実際にスクリプトが動いているところを見たいと思います。
じま
合間に撮った写真をまた新しく取り込んでいただいた感じですね。ということで、結果の方を見ていきたいと思います。
しゅう
じまさんの結果は、佐藤健さんの要素が31.5%でした。
けい
半分もいってない。
じま
でもまあ、5人いますから、全然悪い結果ではないかなと思いますけどね。
しゅう
中途半端、という見方も……(笑)
けい
データサイエンティストからすると、31.5%は中途半端になりますか?
しゅう
見方によると、どの人よりも判別しにくい、という場合があります。
けい
個性がある感じなのですね。
しゅう
かもしれないです。中身を見ていないので分かりませんが(笑)
次に行きまして、けいさんは木村拓哉さん要素が53%です。最初の結果と近いですね。
けい
これはPythonがしっかり仕事している、ということですね。実際、2~3ヵ月で人の顔は変わらないから。
じま
データが変わったら、その人の顔がめちゃくちゃ変わっていることになりますからね。今回の結果も、先程と同じようなグラフを見ることはできますか?
しゅう
ではまず、じまさんのグラフ結果から。
しゅう
先程と変わらない、同じような結果ですね。竹内涼真と木村拓哉は「どっちともつかない」みたいな。
じま
それで割合が一緒になっていると。Pythonが正確、ということですよね。
しゅう
続いてけいさんのグラフ結果ですね。
しゅう
やはり、この3人ではないと……
けい
吉澤亮要素なんて1つもなさそうですね。
しゅう
これは、そうですね。1%もなさそうです(笑)
じま
本当に、全く同じ結果になりましたね。
けい
AIが学習していることは変わらないと思いますが、このツールがしっかり機能して動いていることが、みなさんにも伝わったかなと思います。
5.本日のまとめ
じま
最後に今回のまとめとして、Pythonで実際に使用した機能を、軽くまとめていただければと思います。
しゅう
今回のイケメン分類器を作るのに使った機能ですね。
まず、Pythonのスクレイピング技術を活かして「Google検索を利用した1500枚程の画像データ収集」を行いました。次が「どのイケメンに似ているか」というのをAIに学習させる段階ですね。ディープラーニングのモデルの使用と、それよりも少し簡単な機械学習のモデルを使用して学習させたパターンがありました。その2つの「機械学習モデルの構築」を、Pythonを使ってやってみた、というところになります。
まとめ
今回は、Pythonで使える要素を最大限活用して作成された『イケメン分類器』を例に、グラフ表示や動き、コードを紹介・解説してきました。作成する際の必要な画像データの収集で『画像処理・スクレイピング』を、出演者が「誰に似ているか」をAIに学習させる過程では『ディープラーニング・機械学習モデルの構築』を主に使用したとのことです。
また、データ分析の際に「四角単位でプログラムが実行できる」ところがPythonの利点だそうです。スクリプトごとに動かせるため「結果だけを表示する」といったことも可能とのことでした。少し長いですが、実際に使用したコードを載せていますので、Pythonをお使いの方は試してみてはいかがでしょうか?
未経験からでもITエンジニアになることは可能です。セラクでは未経験からでも約1.5か月の研修を通じて活躍しているエンジニアが多数在籍します。
少しでもご興味を持っていただけたら、ぜひ、セラクにご応募ください。まずは面談でのお話をすることも可能です。お気軽にご相談ください。