web-dev-qa-db-fra.com

Quel est le meilleur moyen de détecter par programme des images pornographiques?

Akismet fait un travail remarquable en détectant les commentaires de spam. Mais les commentaires ne sont pas la seule forme de spam de nos jours. Et si je voulais quelque chose comme akismet pour détecter automatiquement les images pornographiques sur un site de réseau social permettant aux utilisateurs de télécharger leurs images, avatars, etc.?

Il existe déjà quelques moteurs de recherche basés sur des images ainsi que des outils de reconnaissance faciale. Je suppose donc que ce ne serait pas sorcier et que cela pourrait être fait. Cependant, je n'ai aucune idée de la façon dont cela fonctionne et de la manière dont je devrais m'y prendre si je veux le développer à partir de zéro.

Comment dois-je commencer?

Existe-t-il un projet open source pour cela?

120
Raj

Ceci a été écrit en 2000, je ne suis pas sûr que l'état de l'art en matière de détection de pornographie ait avancé du tout, mais j'en doute.

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

PORNsweeper semble avoir une certaine capacité à distinguer les images de personnes des images de choses qui ne le sont pas, à condition que les images soient en couleur. Il réussit moins bien à distinguer les images sales de personnes de celles qui sont propres.

Avec la sensibilité par défaut moyenne, si Ressources humaines envoie une image du nouveau responsable dans Comptes, vous avez environ 50% de chances de l'obtenir. Si votre sœur vous envoie une photo de son bébé de six mois, elle risque également d'être détenue.

Il est juste de signaler des erreurs amusantes, comme appeler le porno Mona Lisa, si elles sont représentatives du comportement du logiciel. Si les fabricants admettent que leur système de reconnaissance d’images algorithmique laissera tomber la balle 15% du temps, il est alors ridicule de se moquer de lui.

Mais PORNsweeper semble seulement respecter les spécifications énoncées dans un département - la détection de pornographie réelle. Il est à mi-chemin de détecter le porno, mais c'est mauvais pour détecter des images nettes. Et je ne serais pas surpris si aucun saut majeur n’était réalisé dans ce domaine dans un proche avenir.

69
Jeff Atwood

C'est en fait assez facile. Vous pouvez détecter par programmation les tons chair - et les images pornographiques ont tendance à avoir beaucoup de peau. Cela créera des faux positifs, mais si cela pose un problème, vous pouvez transmettre les images ainsi détectées par le biais de la modération réelle. Cela non seulement réduit considérablement le travail des modérateurs, mais vous donne également 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 mesure les tons chair au centre de l'image. J'ai testé 20 images "pornos" relativement apprivoisées et 20 images totalement innocentes. Il signale 100% du "porno" et 4 des 20 images nettes. C'est un taux de faux positifs assez élevé, mais le script se veut plutôt prudent et pourrait être ajusté davantage. Il fonctionne sur les tons clairs, foncés et asiatiques.

Ses principaux points faibles avec les faux positifs sont les objets bruns comme le sable et le bois et bien sûr, il ne connaît pas la différence entre une chair "coquine" et une chair "belle" (comme des coups de visage).

La faiblesse avec les faux négatifs serait des images sans chair très exposée (comme un esclavage en cuir), une peau peinte ou tatouée, des images N & B, etc.

code source et exemples d'images

89
SpliFF

Je préférerais que les utilisateurs signalent de mauvaises images. Le développement de la reconnaissance d’image peut demander trop d’efforts et de temps et ne sera pas aussi précis qu’un œil humain. C'est beaucoup moins cher d'externaliser ce travail de modération.

Regardez: Amazon Mechanical Turk

"Le Amazon Mechanical Turk (MTurk) est l’une des suites d’Amazon Web Services, un marché du crowdsourcing permettant aux programmes informatiques de ordonner l'utilisation de l'intelligence humaine pour effectuer des tâches que les ordinateurs sont incapables d'accomplir. "

45
22
Brian Lyttle

BOOM! Voici le livre blanc contenant l'algorithme.

Est-ce que quelqu'un sait où obtenir le code source pour une implémentation Java (ou n'importe quel langage))?

Cela basculerait.

Un algorithme appelé WISE a un taux de précision de 98% mais un taux de faux positifs de 14%. Vous laissez donc les utilisateurs signaler les 2% de faux négatifs, idéalement avec suppression automatique si un certain nombre d'utilisateurs le signalent, et demandez aux modérateurs d'afficher les 14% de faux positifs.

15
davidjnelson

Nude.js d'après le livre blanc de Rigan Ap-apid de l'Université De La Salle.

9
Abhinav Kaushik

Il existe un logiciel qui détecte la probabilité de pornographie, mais ce n’est pas une science exacte, car les ordinateurs ne peuvent pas reconnaître ce qui est réellement sur les images (les images ne sont qu’un grand ensemble de valeurs sur une grille sans signification). Vous pouvez simplement enseigner à l'ordinateur ce qu'est la pornographie et ce qui ne l'est pas en donnant des exemples. Cela a pour inconvénient de ne reconnaître que ces images ou des images similaires.

Étant donné la nature répétitive du porno, vous avez de bonnes chances de former le système avec peu de faux positifs. Par exemple, si vous entraînez le système avec des personnes nues, les images d'une plage avec "presque" des personnes nues peuvent également être signalées comme des images pornographiques.

Un logiciel similaire est le logiciel facebook qui est sorti récemment. C'est juste spécialisé sur les visages. Le principe principal est le même.

Techniquement, vous mettriez en œuvre une sorte de détecteur de caractéristiques qui utilise un filtrage Bayes. Le détecteur de caractéristiques peut rechercher des caractéristiques telles que le pourcentage de pixels couleur chair s'il s'agit d'un simple détecteur ou calcule simplement la similitude de l'image actuelle avec un ensemble d'images pornographiques enregistrées.

Ce n’est bien sûr pas limité au porno, c’est plutôt un cas de coin. Je pense que les systèmes qui essaient de trouver autre chose dans les images sont plus courants ;-)

8

La réponse est très simple: il est assez prudent de dire que cela ne sera pas possible dans les deux prochaines décennies. Avant cela, nous aurons probablement de bons outils de traduction. La dernière fois que j'ai vérifié, les gars de l'IA avaient du mal à identifier la même voiture sur deux photographies prises sous un angle légèrement modifié. Jetez un coup d’œil sur le temps qu’il leur a fallu pour obtenir ensemble une reconnaissance OCR ou une reconnaissance vocale suffisante. Ce sont des problèmes de reconnaissance qui peuvent grandement bénéficier des dictionnaires et sont encore loin d’avoir des solutions totalement fiables en dépit des millions de mois de travail qui leur ont été lancés.

Cela étant dit, vous pouvez simplement ajouter une "offensive?" Cliquez sur le lien situé à côté du conflit généré par l'utilisateur et demandez à un mod de vérifier les plaintes entrantes.

modifier:

J'ai oublié quelque chose: si vous allez mettre en place une sorte de filtre, vous aurez besoin d'un filtre fiable. Si votre solution est correcte à 50%, 2000 utilisateurs sur 4000 avec des images correctes seront bloqués. Attendez-vous à un scandale.

5
Thomasz

Un étudiant de troisième cycle de l'Université nationale Cheng Kung de Taiwan a effectué une recherche sur ce sujet en 2004. Il a réussi à atteindre un taux de réussite de 89,79% en détectant les images nues téléchargées à partir d'Internet. Voici le lien vers sa thèse: La détection d'images basée sur la couleur de la peau d'une personne nue
En chinois, vous aurez peut-être besoin d'un traducteur au cas où vous ne pourriez pas le lire.

5
myang

Ajoutez un lien offensant et stockez le md5 (ou autre hachage) de l'image incriminée afin qu'elle puisse être automatiquement étiquetée à l'avenir.

Comment serait-il cool si quelqu'un avait une grande base de données publique de l'image md5 avec des balises descriptives fonctionnant en tant que webservice? Beaucoup de porno n'est pas un travail original (en ce sens que la personne qui l'a maintenant ne l'a probablement pas fait) et que les images populaires ont tendance à flotter à différents endroits, cela pourrait donc vraiment faire la différence.

4
rfusca

réponse courte: utilisez un modérateur;)

Réponse longue: je ne pense pas qu'il y ait un projet pour cette cause qu'est-ce que le porno? Seulement les jambes, la nudité complète, les nains, etc. C'est subjectif.

4
RvdK

Si vous avez vraiment du temps et de l'argent:

Une façon de le faire est de 1) écrire un algorithme de détection d'image pour déterminer si un objet est humain ou non. Cela peut être fait en masquant une image pour récupérer ses "contours" et voir si les contours correspondent à un contour humain.

2) Exploitez de nombreuses images pornographiques et utilisez des techniques d’exploration de données telles que les algorithmes C4 ou l’optimisation d’essaims de particules pour apprendre à détecter un motif qui correspond aux images pornographiques.

Pour ce faire, vous devrez identifier l'apparence numérique des contours d'un corps humain nu/homme (cela peut être réalisé de la même façon que les algorithmes de reconnaissance d'images OCR fonctionnent).

J'espère que tu t'amuses! :-)

2
Buhake Sindi

Il me semble que le principal obstacle consiste à définir une "image porno". Si vous pouvez le définir facilement, vous pourriez probablement écrire quelque chose qui fonctionnerait. Mais même les humains ne peuvent pas s'entendre sur ce qu'est le porno. Comment l'application saura-t-elle? La modération de l'utilisateur est probablement votre meilleur pari.

2
Rimian

J'ai entendu parler d'outils qui utilisaient un algorithme très simple, mais très efficace. L'algorithme a calculé la quantité relative de pixels dont la valeur de couleur est proche de certaines couleurs "de peau" prédéfinies. Si ce montant est supérieur à une valeur prédéfinie, l'image est considérée comme ayant un contenu érotique/pornographique. Bien sûr, cet algorithme donnera des résultats faussement positifs pour les photos en gros plan et bien d’autres choses encore.
Puisque vous écrivez au sujet des réseaux sociaux, de nombreuses photos "normales" avec une grande quantité de couleur de peau sont placées dessus, vous ne devriez donc pas utiliser cet algorithme pour nier toutes les images avec un résultat positif. Mais vous pouvez l'utiliser pour fournir une aide aux modérateurs, par exemple, attribuer une priorité plus élevée à ces images. Par conséquent, si le modérateur souhaite vérifier le contenu pornographique de certaines nouvelles images, il peut commencer à partir de ces images.

1
okutane

Deux options auxquelles je peux penser (bien qu’aucune d’entre elles ne détecte par programmation le porno):

  1. Bloquez toutes les images téléchargées jusqu'à ce qu'un de vos administrateurs les ait consultées. Il n’ya aucune raison pour que cela prenne trop de temps: vous pourriez écrire un logiciel qui affiche 10 images par seconde, presque comme un film - même à cette vitesse, il est facile pour un être humain de repérer une image potentiellement pornographique. Ensuite, vous rembobinez ce logiciel et regardez de plus près.
  2. Ajoutez l’habituelle option "marquer cette image comme inappropriée".
1
Rich

J'ai vu une application de filtrage Web filtrer les images pornographiques, désolé, je ne me souviens plus de son nom. C'était plutôt sujet aux faux positifs, mais cela fonctionnait la plupart du temps.

Je pense que le truc principal est de détecter "trop ​​de peau sur la photo :)

1
dr. evil

Détecter des images pornographiques est toujours une tâche bien définie d’intelligence artificielle, qui est pour le moment très théorique.

Récoltez le pouvoir collectif et l’intelligence humaine en ajoutant un bouton/lien "Signaler comme abus/abus". Ou employez plusieurs modérateurs pour faire ce travail.

P.S. Vraiment surpris de voir combien de personnes posent des questions en supposant que les logiciels et les algorithmes sont tout-puissants sans même se demander si ce qu'ils veulent pourrait être fait. Sont-ils des représentants de cette nouvelle génération de programmeurs qui ne comprennent pas le matériel, la programmation de bas niveau et tout ce qui est "magique derrière"?

P.S. # 2. Je me souviens aussi que, de temps en temps, il arrive que des personnes ne puissent décider elles-mêmes si une image est pornographique ou artistique est présentée au tribunal. Même après que le tribunal a statué, il est probable que la moitié des personnes jugeront la décision erronée. La dernière situation stupide de ce genre a été récemment: une page de Wikipedia a été interdite au Royaume-Uni en raison d'une image de couverture de CD comportant un peu de nudité.

1
User

Celui-ci semble prometteur. Fondamentalement, ils détectent la peau (avec un calibrage en reconnaissant les visages) et déterminent des "chemins de la peau" (c'est-à-dire en mesurant la proportion de pixels de la peau par rapport aux pixels de la peau du visage/pixels de la peau). Cela a des performances décentes. http://www.prip.tuwien.ac.at/people/julian/skin-detection

1
alexsee75

Le API du service Web BrightCloud est parfait pour cela. C'est une API REST) pour effectuer des recherches dans des sites Web. Elle contient une base de données de filtrage Web très volumineuse et très précise. L'une des catégories, Adulte, a identifié plus de 10 millions de sites pornographiques!

1
Chris Harris

Vous pouvez trouver de nombreux whitepapers sur le net traitant de ce sujet.

0
Dejan

Je ne tenterai pas aujourd’hui de définir plus précisément le type de contenu que je comprend compris dans cette description abrégée ["pornographie intrépide"]; et peut-être que je ne pourrais jamais réussir à le faire intelligiblement. Mais je le sais quand je le vois, et le film impliqué dans cette affaire n’est pas ça.

- Potter Stewart, juge à la Cour suprême des États-Unis, 1964

0
Jason S

Ce n'est pas sorcier. Plus maintenant. C'est très similaire à la reconnaissance de visage. Je pense que le moyen le plus simple d'y remédier est d'utiliser l'apprentissage automatique. Et puisque nous avons affaire à des images, je peux pointer vers les réseaux neuronaux, car ceux-ci semblent être préférés pour les images. Vous aurez besoin de données d'entraînement. Et vous pouvez trouver des tonnes de données d'entraînement sur Internet, mais vous devez rogner les images sur la partie spécifique que vous souhaitez que l'algorithme détecte. Bien sûr, vous devrez diviser le problème en différentes parties du corps que vous souhaitez détecter et créer des données d’entraînement pour chacune d’elles, et c’est là que les choses deviennent amusantes.

Comme quelqu'un de dit ci-dessus, cela ne peut pas être fait à 100%. Il y aura des cas où de tels algorithmes échoueront. La précision réelle dépendra de vos données d’entraînement, de la structure de vos réseaux neuronaux et de la manière dont vous choisirez de regrouper les données d’entraînement (pénis, vagins, seins, etc. et leurs combinaisons). Dans tous les cas, je suis très confiant que cela puisse être réalisé avec une grande précision pour les images pornographiques explicites.

0
Radu Simionescu

Regardez le nom du fichier et tous les attributs. Il n’ya pas assez d’informations pour détecter même 20% des images coquines, mais une simple liste noire de mots clés permettrait au moins de détecter les images avec des étiquettes descriptives ou des métadonnées. 20 minutes de codage pour un taux de réussite de 20% n’est pas une mauvaise affaire, surtout en tant que présélection qui peut au moins en capturer quelques-unes simples avant de laisser le reste à un modérateur pour qu’il juge.

L’autre astuce utile, c’est le contraire, bien sûr, de maintenir une liste blanche des sources d’images à autoriser sans modération ni vérification. Si la plupart de vos images proviennent d'uploaders ou de sources sûres connues, vous pouvez simplement les accepter sans réserve.

0
SPWorley

C'est un détecteur de nudité. Je n'ai pas essayé. C'est le seul logiciel libre que j'ai pu trouver.

https://code.google.com/p/nudetech

0
mikeslattery