120 votes

Quelle est la meilleure façon de détecter par programmation des images pornos ?

Akismet fait un travail incroyable à la détection de spam de commentaires. Mais les commentaires ne sont pas la seule forme de spam ces jours-ci. Que faire si je voulais quelque chose comme akismet pour détecter automatiquement les images pornographiques sur un site de réseautage social qui permet aux utilisateurs de télécharger leurs photos, avatars, etc?

Il y a déjà un peu de l'image en fonction des moteurs de recherche ainsi que la reconnaissance du visage de choses disponibles, donc je suis en supposant qu'elle ne serait pas la science de fusée et il pourrait en être fait. Cependant, je n'ai aucune idée sur comment ça fonctionne et comment je dois faire si je veux développer à partir de zéro.

Comment dois-je commencer?

Est-il un projet open source pour ça?

89voto

SpliFF Points 21945

C'est en fait assez facile. Vous pouvez par programmation à détecter les tons de la peau et du porno images ont tendance à avoir beaucoup de la peau. Cela permettra de créer de faux positifs, mais si c'est un problème, vous pouvez passer des images donc détecté réels de la modération. Ce n'est pas seulement réduit considérablement le travail pour les modérateurs, mais vous donne aussi beaucoup de porno gratuit. C'est gagnant-gagnant.

#!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)

Ce code de mesures de tons de peau dans le centre de l'image. Je l'ai testé sur 20 relativement apprivoisés "porno" images et 20 complètement innocent des images. Il marque 100% de la "porno" et 4 des 20 des images propres. C'est un assez haut taux de faux positifs, mais le script vise à être assez prudent et pourrait être plus à l'écoute. Il travaille sur la lumière, l'obscurité et Asiatiques, les tons de peau.

C'est la principale faiblesses avec de faux positifs, de couleur brune, des objets comme le sable et le bois et bien sûr, il ne sait pas la différence entre "méchant" et "nice" la chair (comme le visage de coups).

La faiblesse avec des faux négatifs seraient des images sans trop de chair exposée (comme le cuir, bondage), peint ou de la peau tatouée, B&W, images, etc.

code source et des exemples d'images

69voto

Jeff Atwood Points 31111

Ceci a été écrit en 2000, vous ne savez pas si l'état de l'art dans le porno détection a progressé à tous, mais j'en doute.

http://www.dansdata.com/pornsweeper.htm

PORNsweeper semble avoir une certaine capacité à distinguer des photos de personnes à partir des images de choses qui ne sont pas des gens, tant que les images sont en couleur. Il est moins bien réussi à distinguer sale des photos de personnes de la propreté.

Avec la valeur par défaut de sensibilité moyenne, si les Ressources Humaines envoie autour d'une image de la nouvelle chap dans les Comptes, vous avez 50% de chances de l'obtenir. Si votre sœur vous envoie une photo de sa fille âgée de six mois, il est aussi plus susceptibles d'être détenus.

Il est juste de souligner amusant erreurs, comme l'appel de la Mona Lisa porno, si elles sont représentatives du comportement du logiciel. Si les décideurs admettent que leurs algorithmique image logiciel de reconnaissance va laisser tomber la balle 15% du temps, alors de qui se moque de lui quand il fait exactement ce qui est stupide.

Mais PORNsweeper seul semble à la hauteur de ses spécifications indiquées dans un service de détection de réels porno. C'est à mi-chemin décent, à la détection de porno, mais c'est mauvais pour détecter des photos propres. Et je ne serais pas surpris si pas de grands sauts ont été réalisés dans ce domaine dans un avenir proche.

45voto

Konstantin Tarkus Points 16862

J'ai plutôt de permettre aux utilisateurs de rapport sur les mauvaises images. L'Image de la reconnaissance de développement peut prendre trop d'efforts et de temps, et de ne pas être aussi précises que les yeux de l'homme. C'est beaucoup moins cher d'externaliser que la modération de l'emploi.

Jetez un oeil à: Amazon Mechanical Turk

"L' Amazon Mechanical Turk (MTurk) est l'un de la suite de Amazon Web Services, un crowdsourcing place de marché qui permet aux programmes d'ordinateur, afin de coordonner l'utilisation de l'intelligence humaine pour effectuer des tâches les ordinateurs qui sont incapables de le faire."

22voto

15voto

davidjnelson Points 585

BOOM! Voici le livre blanc contenant de l'algorithme.

Personne ne sait où pour obtenir le code source de java (ou de n'importe quelle langue) mise en œuvre?

Que serait le rock.

Un algorithme appelé SAGE a 98% de taux de précision mais de 14% taux de faux positifs. Donc ce que vous faire est de vous permettre aux utilisateurs de signaler de 2% de faux négatifs, idéalement avec de suppression automatique si un certain nombre d'utilisateurs du drapeau, et les modérateurs ont vue le 14% de faux positifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X