Oppai-Detect 3 yusukebe 2010/11/26 GXEB #01 @ NAVER JAPAN
Aug 19, 2014
Oppai-Detect 3
yusukebe 2010/11/26
GXEB #01 @ NAVER JAPAN
自己紹介 • Yusuke Wada(和田裕介) • 1981/12/23 • Kamakura, Japan. • Wadit Inc. • Perl Engineer • Founder of YourAVHost etc.
h"p://youravhost.net/
Oppai-Detect
画像のおっぱい部分を自動認識させる挑戦
目的 • おっぱいが好きだ • おっぱい画像をたくさん集めたい • 収集の精度を高めたい • おっぱい部分を自動で検出したい
応用例 • 放送禁止画像の検出 – 画像投稿サイト
• スパム対策 • 子供向けサイトフィルタリング
• おっぱい画像の収集
手法 • OpenCVを使用 – Intelが開発・公開したオープンソースの画像処理向けのライブラリ
– パターン認識として物体検出(Object-Detection)の機能を備えている
• 学習(Training) • 認識・検出(Detection)
OpenCVによる顔検出の例 • Using “haarcascade_frontalface_alt2.xml”
use Image::ObjectDetect; use Imager;
my $file = $ARGV[0] or die 'Filename is needed!'; my $img = Imager‐>new; $img‐>read( file => $file ) or die $img‐>errstr; my $cascade = './haarcascade_frontalface_alt2.xml'; my $detector = Image::ObjectDetect‐>new($cascade); my @faces = $detector‐>detect($file); for my $face (@faces) { $img = $img‐>box( xmin => $face‐>{x}, xmax => $face‐>{x} + $face‐>{width}, ymin => $face‐>{y}, ymax => $face‐>{y} + $face‐>{height}, color => 'red', filled => 0, ) or die $img‐>errstr; } $img‐>write( file => 'out.jpg' ) or die $img‐>errstr;
Result
今回のチャレンジ 1. 画像を集める 2. 学習ツール作成 3. ひたすらおっぱいを囲む
おっぱい画像を集めて おっぱいの場所を指定して 学習ソフトに学習させて 検出のためのデータを作る
Term of Images • Positive Image – 対象物が写っている画像 – 精度を求めるには7000-8000枚
• Negative Image – 対象物が写っていない画像 – 3000枚
1. 画像を集める • 「いかにして大量のおっぱい画像を集めるか」 • Web API の制限 – Google Ajax Search
• 最大件数64枚
– Yahoo 画像検索 API • 最大件数1,000枚
• 10,000枚以上は集めたい – AV女優名のリストを使って解決
• 「AV女優A おっぱい」 • 「AV女優B おっぱい」 • …
use Acme::Porn::JP; • http://github.com/yusukebe/Acme-Porn-JP
use Acme::Porn::JP;
…;
my $porn = Acme::Porn::JP‐>new; my $actress_list = $porn‐>actress(); for my $actress ( @$actress_list ){ search("$query $actress”); }
…;
$ perl ‐MAcme::Porn::JP ‐e '$p = Ace::Porn::JP‐>new; print scalar @{$p‐>actress};’ 4502
29,065枚
Haartrainingツールによる学習 1. positive.dat/negative.dat の作成 2. $ opencv_createsamples ‐info positive.dat ‐
vec a.vec 3. $ opencv_haartraining ‐data haarcascade ‐
vec a.vec ‐bg negative.dat ‐nstages 20
positive.dat [filename] [# of objects] [[x y width height] [... 2nd object] ...] images/01.jpg 1 140 100 45 45
nega2ve.dat images/neg‐01.jpg images/neg‐02.jpg
学習ツール作成 • positive.datとnegative.datを作る • 収集した画像に対象物があったら囲む – その部分の座標と画像名をpositive.datに書き込む – もし対象物が無かったらnegative.datへ
• 閲覧・囲み作業をWebブラウザで行う • HTTP/Webアプリ – use Plack;
• Javascriptフロントエンド – strokeRect/HTML5
Haartraining-App • http://github.com/yusukebe/Haartraining-App yusuke@macmini:~/work/oppai‐detect/temp/Haartraining‐App$ tree ./ ./ |‐‐ data | |‐‐ images | | `‐‐ 000001.jpg | |‐‐ negative.dat | `‐‐ positive.dat |‐‐ haartraining.psgi `‐‐ html |‐‐ haartraining.js `‐‐ index.html
3 directories, 6 files
$ plackup haartraining.psgi HTTP::Server::PSGI: Accepting connections at http://0:5000/
ひたすらおっぱいを囲む
Haartraining-App デモ
opencv_haartrainingによる学習 • Positive Image 2,000枚 • Negative Image 2,000枚 • nstage 10 stages
Mac mini / OSX 10.5 2.26 GHz Intel Core 2 Duo OpenCV 2.1.0 ソースからコンパイル
Oppai-Detect デモ
実験結果 • 正面で画像サイズが的確なら認識される • 誤認識はある – へそ – 膨らんでいる部位
考察 • おっぱい画像の学習 – おっぱいにもたくさんある • 正面乳/横乳/下乳/上乳/微乳/巨乳…
– どこまでがおっぱいか?
• 学習に対するコスト – ソーシャルな力を利用したい
今後 • 多様なおっぱいに対するポリシー策定 • 学習アプリの運用化 • 「みんなで作るOppai-Detect」?
Oppai-Detect End.