Ini sebenarnya cukup mudah. Anda dapat secara terprogram mendeteksi warna kulit - dan gambar porno cenderung memiliki banyak warna. Ini akan membuat positif palsu tetapi jika ini adalah masalah Anda dapat mengirimkan gambar sehingga terdeteksi melalui moderasi yang sebenarnya. Ini tidak hanya sangat mengurangi pekerjaan moderator tetapi juga memberi Anda banyak pornografi gratis. Ini sama-sama untung.
#!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)
Kode ini mengukur warna kulit di tengah gambar. Saya telah menguji 20 gambar "porno" yang relatif jinak dan 20 gambar yang sama sekali tidak bersalah. Ini menandai 100% "porno" dan 4 dari 20 gambar bersih. Itu tingkat positif palsu yang cukup tinggi tetapi skrip bertujuan untuk berhati-hati dan dapat disetel lebih lanjut. Ini bekerja pada warna kulit terang, gelap dan Asia.
Kelemahan utama dari false positive adalah objek berwarna coklat seperti pasir dan kayu dan tentu saja tidak mengetahui perbedaan antara daging yang "nakal" dan "baik" (seperti bidikan wajah).
Kelemahan dengan negatif palsu adalah gambar tanpa banyak daging yang terbuka (seperti perbudakan kulit), kulit yang dicat atau bertato, gambar B&W, dll.
kode sumber dan gambar contoh