« あのユーザを1クリックではてブから消せるRemoveHatebuUser | main | Railsのライトニングトーク開催します! »

Oppai-Detect 2でコンテンツフィルタリング

ずいぶん前にOppai-Detectの精度向上っぷりをtwitterで見せてもらって、やべー使いてーなどと思っていたんですが、いつの間にか公開されてたので、クライアント側でプロキシ動作するフィルタを書いてみました。おっぱい見れません><

画面的にはこんな感じ。

#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Proxy;
use HTTP::Proxy::BodyFilter::lines;
use Image::ObjectDetect;
use LWP::Simple;

our $cascade = "cascade_oppai.xml";
our $detector = Image::ObjectDetect->new($cascade);
our $alt = get('http://media.tumblr.com/MEM3qlmGxbwrympfg4uJRRKA_400.jpg');

my $proxy = HTTP::Proxy->new(port => 8088);
$proxy->push_filter(
response => HTTP::Proxy::BodyFilter::lines->new("EOF"),
response => Oppaifilter->new,
mime => 'image/jpeg'
);
$proxy->start;

{
package Oppaifilter;
use File::Temp qw(tempfile);
use base qw(HTTP::Proxy::BodyFilter);

sub filter{
my ($self, $dataref, $message, $protocol, $buffer) = @_;
return unless defined($$dataref) && $$dataref ne '';

eval {
my ($fh, $filename) = tempfile();
print $fh $$dataref;
close($fh);

my @oppais = $detector->detect($filename);
if(@oppais){
$$dataref = $alt;
}
};
if($@){
warn $@;
}
}
}

HTTP::Proxy使ってfilterで検出されたら適当な画像に置換です。'transfer-encoding' => 'chunked'にドはまりしました。HTTPぜんぜんわかってない。クライアント側で動作させるのは'おっぱいみれません><'で楽しいけど、false positive多くてちょっとギャグに近い感じ。年齢認証のない画像投稿サービスとかで一次フィルタリングさせる用途などには有用ではないでしょうか。
おっぱいみれなくなるのはヤですが、こういう学習データとか公開しちゃうのはすごく有意義だと思います。yusukebe++


参考:
Oppai-Detect 2 @ CodereposCon#1Comments
nDiki: HTTP::Proxy - Twitter ベイジアンフィルタプロキシ (2007-12-29)
HTTP::Proxyの使い方 : blog.nomadscafe.jp

トラックバック

このエントリーのトラックバックURL:
http://polog.org/mt-tb.cgi/422

コメントを投稿

Powered by
Movable Type 3.34