これは実際にはかなり簡単です。肌の色調をプログラムで検出できます。ポルノ画像には肌がたくさん含まれている傾向があります。これにより誤検知が発生しますが、これが問題である場合は、実際にモデレートして検出された画像を渡すことができます。これにより、モデレーターの作業が大幅に削減されるだけでなく、無料のポルノがたくさん提供されます。それは双方に有利です。
#!python
import os, glob
from PIL import Image
def get_skin_ratio(im):
im = im.crop((int(im.size[0]*0.2), int(im.size[1]*0.2), im.size[0]-int(im.size[0]*0.2), im.size[1]-int(im.size[1]*0.2)))
skin = sum([count for count, rgb in im.getcolors(im.size[0]*im.size[1]) if rgb[0]>60 and rgb[1]<(rgb[0]*0.85) and rgb[2]<(rgb[0]*0.7) and rgb[1]>(rgb[0]*0.4) and rgb[2]>(rgb[0]*0.2)])
return float(skin)/float(im.size[0]*im.size[1])
for image_dir in ('porn','clean'):
for image_file in glob.glob(os.path.join(image_dir,"*.jpg")):
skin_percent = get_skin_ratio(Image.open(image_file)) * 100
if skin_percent>30:
print "PORN {0} has {1:.0f}% skin".format(image_file, skin_percent)
else:
print "CLEAN {0} has {1:.0f}% skin".format(image_file, skin_percent)
このコードは、画像の中央の肌の色合いを測定します。私は20の比較的使い慣れた「ポルノ」画像と20の完全に無害な画像でテストしました。「ポルノ」の100%と20のクリーンな画像のうち4つにフラグを付けます。これはかなり高い誤検知率ですが、スクリプトはかなり慎重になることを目的としており、さらに調整することができます。それは、明るい、暗い、アジアの肌のトーンで動作します。
偽陽性の主な弱点は、砂や木などの茶色のオブジェクトであり、もちろん、「エッチな」肉と「素敵な」肉(フェイスショットなど)の違いがわかりません。
偽陰性の弱点は、肌の露出が少ない画像(革のボンデージなど)、皮膚の塗装または入れ墨、白黒画像などです。
ソースコードとサンプル画像