この記事は、SLP_KBITその2 Advent Calendar 2016の6日目の記事です。
はじめに
※ 私はロリコンではありません
今回は、SLPで開催されたハッカソンで開発した、幼女画像判定システムLolincoについて説明したいと思います。
ソースコードはこちら (https://github.com/SLP-KBIT/Lolinco) にあります。
このシステムは、@uchiyuと一緒に開発したもので、記事も担当ごとに分割しています。
Lolincoとは
Lolincoとは、タイトルにもある通り、与えられた画像に幼女が写っているかどうかを判別するシステムです。
色々と内部を解説する前に、まずはシステムの動作を見てもらいたいと思います。
トップページ
Lolincoのトップページです。
「ファイルを選択」から判別したい画像ファイルを選択します。
「ロリ判定」ボタンを押すと、幼女が写っているかどうかが判別されます。
幼女が写っていなかった場合
悲痛な表情とともに、結果が通知されます。
幼女が写っていた場合
感極まります。
複数の人物が写っていた場合
一人だけ……一人だけ写っていてもいいんです……それで満足なんです……
(変なものも顔だと認識されていますが気にしないように)
Lolincoの開発
Lolincoを開発する上でのタスクは、以下のように分担しました。
ここからは、自分の担当分である、教師データの作成と、任意の画像の判別について解説していきます。
教師データの作成
教師データの作成手順は、大きく分けると以下のようになります。
- 画像を収集
- OpenCVを利用して、画像から顔を抽出
- 抽出された顔画像を、ロリとその他に分ける
画像から顔を抽出する部分は、以下のブログを参考にさせて頂きました。
任意の画像の判別
任意の画像の判別方法は、大きく分けると以下のようになります。
- アップロードされた画像から顔を抽出
- 学習済みのアルゴリズムにより、抽出された顔画像がロリかどうかを判別(@uchiyu担当分)
- 判別された結果を基に、システムとして表示
おまけ
教師データを作成するために、大量の画像を収集する必要があるのですが、今回はGoogleの画像検索を使いました。
と言っても、画像検索のページを、Googleが用意したAPIを使わずに、機械的に収集するのは、どうやら規約違反のようです。
そのため、長時間の開発でテンションが上っていたせいか、今回全て手作業で集めました。
その際に得られた知見もシェアしたいと思います。
検索ワード
教師データとしてのロリ画像を集めるために、最適な検索ワードを模索しました。
結果として、「(年齢) 女の子」で検索すると、いい感じの画像が出てきました。
今回は、5歳~12歳の女の子を対象に画像を収集しました。
もちろん、教師データにはハズレのデータも必要なので、そのあたりは適当に画像検索しました。
以下に、試行錯誤した結果をまとめます。
検索ワード | 所感 |
---|---|
(年齢) 女の子 | いい感じ |
(年齢) 女の子 画像 | 上記と変わらない |
(年齢) 少女 | 写ってはいるが、顔が判別しづらい物の割合が多い。 ニュースで出てくる「紛争地域の子供」みたいな画像が増える |
ロリ 女の子 | ロリっぽく見える大人が増える。 二次元の画像も増える |
ロリ 女の子 画像 | 二次元(R18)の画像がすごく増える |
女の子 ロリ 画像 | 三次元(R18)の画像がすごく増える |
とりあえず、ロリと画像が組み合わさるとヤバイということが分かりました。
おわりに
今回は、開発したWebアプリについてのお話でした。
具体的な機械学習の部分が気になる人は、明日の@uchiyuの記事を楽しみにしておいて下さい。
また、Lolincoは、教師データの数が少ないせいか、精度がそんなによくありません。
風景や服を、顔と認識してしまうこともよくあります。
ただ、機械学習や画像認識については、発想次第でまだまだ面白そうなものが作れそうなので、今後も興味を持っていたいと思います。
みなさんも、是非一度触れてみて下さい!