Quelle est la meilleure façon de détecter par programmation des images pornographiques? [fermé]


120

Akismet fait un travail incroyable pour détecter 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 qui permet aux utilisateurs de télécharger leurs photos, avatars, etc.?

Il existe déjà quelques moteurs de recherche basés sur des images ainsi que des outils de reconnaissance faciale, donc je suppose 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 comment je dois 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?


82
En fait, je dirais que cela semble beaucoup plus difficile que la science des fusées! Nous avons déjà beaucoup de roquettes, mais AFAIK pas de "détecteur de porno" :)
GaZ

4
LOL. Il y a la reconnaissance faciale, mais il n'y a pas encore de technologie pour la reconnaissance génitale et mammaire. Mauvais chance.
Jon Limjap

11
La pornographie est une question de géographie - en plus, je suis sûr qu'il y a beaucoup d'images qui ne montrent pas du tout les organes génitaux ou la nudité, ce qui serait considéré comme assez hardcore (encore une fois - à certains endroits). Cela ressemble à un travail pour une IA avancée, pas à un simple algorithme.
Noam Gal

2
Je viens de tomber sur cet utilitaire qui m'a fait me souvenir de ce fil. Je me demande si ça marche? proofpronto.com/porn-detection-stick-by-paraben.html
Martin Smith

1
@ jm666, si le problème est si grave pour vous et que vous pensez que l'état de l'art dans ce domaine s'est amélioré au cours des deux dernières années, que diriez-vous de placer une prime sur la dupe référencée? Vous devriez attirer une certaine attention, et peut-être des réponses, de cette façon.
Michael Petrotta

Réponses:


69

Cela a été écrit en 2000, je ne sais pas si l'état de l'art en matière de détection de pornographie a progressé, 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 sont pas des personnes, tant que les images sont en couleur. Il réussit moins à distinguer les images sales de personnes des images propres.

Avec la sensibilité moyenne par défaut, si les ressources humaines envoient une photo du nouveau type dans Comptes, vous avez environ 50% de chances de l'obtenir. Si votre sœur vous envoie une photo de son enfant de six mois, il est également probable qu'elle soit 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 outil de reconnaissance d'image algorithmique laisse tomber la balle 15% du temps, il est ridicule de se moquer de lui quand il fait exactement cela.

Mais PORNsweeper ne semble être à la hauteur de ses spécifications que dans un seul département - la détection du porno réel. C'est à moitié décent pour détecter le porno, mais c'est mauvais pour détecter des images propres. Et je ne serais pas surpris si aucun saut majeur n'était fait dans ce domaine dans un proche avenir.


La détection de la pornographie a progressé depuis lors. Il y a eu beaucoup de rupture dans la reconnaissance d'objets / la classification d'images / la vision par ordinateur. 2000, c'est l'âge de pierre pour moi.
Maarten

89

C'est en fait assez facile. Vous pouvez détecter par programme les tons de peau - et les images pornographiques ont tendance à avoir beaucoup de peau. Cela créera de faux positifs, mais si cela pose un problème, vous pouvez transmettre des images ainsi détectées via une modération réelle. Cela réduit non seulement 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 complètement innocentes. Il marque 100% du «porno» et 4 des 20 des images propres. C'est un taux de faux positifs assez élevé, mais le script vise à être assez prudent et pourrait être peaufiné. Il fonctionne sur les peaux claires, foncées et asiatiques.

Ses principales faiblesses 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 la chair "coquine" et "belle" (comme les coups de visage).

Les faiblesses avec les faux négatifs seraient des images sans beaucoup de chair exposée (comme le bondage en cuir), une peau peinte ou tatouée, des images N&B, etc.

code source et exemples d'images


Voulez-vous publier votre preuve de concept Python de 20 lignes? (-1)
bobobobo

Pas mal, +1. Il est intéressant de noter que les images de surfaces régulières (comme un tapis ou une surface de réfrigérateur) apparaissent comme ayant une grande quantité de peau.
bobobobo du

6
Spoiler: Pas de nudité réelle dans les échantillons d'image.
Luc

Cela considérera également le bois comme une peau. Parce qu'il a exactement la même couleur, mais une texture différente. Sans parler des portraits.
Maarten

45

Je préférerais permettre aux utilisateurs de signaler les 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 que les yeux humains. Il est beaucoup moins cher d'externaliser ce travail de modération.

Jetez un oeil à: Amazon Mechanical Turk

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


4
Il existe probablement un marché pour un site Web de type Amazon Mechanical Turk, mais qui se spécialise dans ce type de sujet .... :)
Riche le

6
Amazon Mechanical Turk coûte probablement de l'argent. Compte tenu du sujet, vous penseriez qu'il existe un modèle commercial intelligent où vous pouvez le faire gratuitement.
Ankur

1
Je pense que c'est une approche assez contraire à l'éthique.
Noon Silk

2
@Ankur LOL! Bonne idée. Rendez-vous sur nic.com pour vérifier si PornOrNot.com est toujours disponible.
Pekka

9
@Noon Silk pourquoi pensez-vous que cette approche est contraire à l'éthique?
Mazatec


15

BOOM! Voici le livre blanc contenant l'algorithme.

Quelqu'un sait-il où trouver le code source d'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 la suppression automatique si un certain nombre d'utilisateurs le signale, et demandez aux modérateurs de visualiser les 14% de faux positifs.


Vous avez trouvé l'algorithme. C'est vraiment bien. Le code source est souvent laissé comme un exercice. Après tout, nous ne spécifions aucun langage de programmation particulier, n'est-ce pas?
Ian le


8

Il existe un logiciel qui détecte la probabilité de la 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 que non en donnant des exemples. Cela présente l'inconvénient de ne reconnaître que ces images ou des images similaires.

Compte tenu de 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, il peut également signaler des images d'une plage avec des personnes «presque» nues comme pornographie.

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 implémenteriez une sorte de détecteur de caractéristiques qui utilise un filtrage bayes. Le détecteur de fonctionnalités peut rechercher des fonctionnalités telles que le pourcentage de pixels de couleur chair s'il s'agit d'un simple détecteur ou simplement calculer 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 en fait plus un cas de coin. Je pense que les systèmes qui essaient de trouver d'autres choses dans les images sont plus courants ;-)


1
Pourquoi les gens votent-ils contre cette réponse?
Patrick Cornelissen

car il ne contient rien de tel qu'un algorithme, une recette ou une référence.
Ian

7
Ce n'est donc pas une réponse valable pour expliquer à l'utilisateur qui pose la question que ce qu'il essaie de réaliser n'est pas vraiment possible? Mec, tu seras peut-être un peu plus relâché ...
Patrick Cornelissen

Il fait également une fausse déclaration "car les ordinateurs ne peuvent pas reconnaître ce qui est réellement sur les images"
Daveth3Cat

Parce qu'ils ne peuvent pas. Vous ne pouvez apprendre à détecter que certaines images et plus votre db de cas positifs et négatifs est grand, mieux c'est, mais en général, vous n'obtiendrez jamais une solution aussi précise qu'un humain, vous vous retrouverez donc avec un grand nombre de faux positifs et négatifs.
Patrick Cornelissen

5

La réponse est très simple: il est assez sûr de dire que ce 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 photos prises sous un angle légèrement modifié. Jetez un coup d'œil au temps qu'il leur a fallu pour obtenir une OCR ou une reconnaissance vocale suffisamment performante. Ce sont des problèmes de reconnaissance qui peuvent grandement bénéficier des dictionnaires et qui sont encore loin d'avoir des solutions totalement fiables malgré les millions de mois-homme qui leur sont lancés.

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

Éditer:

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 à une indignation.



4

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.


3
la question est "Quelle est la meilleure façon de détecter par programme des images pornographiques?", par programme ...
Agusti-N

5
Je connais la question, mais comme je l'ai dit, il n'y a pas de bloqueur de pornographie précis à 100% car le porno est subjectif. Le subjectif ne peut pas être lié au code. Je pense que c'est juste de la nudité, d'autres pensent que c'est du porno. La meilleure solution est d'avoir un bouton «rapport d'image». Même idée que Koistya Navin .NET
RvdK

1
"Midgets etc."? Saint non-sequitur, Batman.
Doug McClean

Il existe un porno midget.
Chris Sherlock

4

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

À quel point ce serait cool si quelqu'un avait une grande base de données publique d'images md5 avec des balises descriptives fonctionnant comme un service Web? Beaucoup de pornographie n'est pas un travail original (en ce sens que la personne qui l'a maintenant, n'a probablement pas réussi) et les images populaires ont tendance à flotter à différents endroits, donc cela pourrait vraiment faire une différence.


8
J'en doute. Il y a tellement de pornographie (et des tonnes plus générées chaque jour) que vos chances de voir la même image deux fois sont (à mon humble avis) plutôt proches de zéro.
Vilx-

Pensez à la fréquence à laquelle une fille de baignoire est apparue partout pendant un certain temps. Il aurait été signalé une fois, puis tout le monde aurait pu l'éviter.
rfusca

3
à moins qu'il n'ait été recadré, redimensionné ou simplement ouvert et enregistré à nouveau avant d'être téléchargé.
Blorgbeard est sorti le

Oui, j'y ai pensé: (eh, c'était une pensée.
rfusca

1
Mieux que md5, TinEye de licence idée.
Tobu

2

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) Les données extraient de nombreuses images pornographiques et utilisent des techniques d'exploration de données telles que les algorithmes C4 ou l'optimisation de l'essaim de particules pour apprendre à détecter les modèles qui correspondent aux images pornographiques.

Cela nécessitera que vous identifiiez à quoi doivent ressembler les contours d'un homme / femme nu d'un corps humain dans un format numérisé (cela peut être réalisé de la même manière que les algorithmes de reconnaissance d'image OCR fonctionnent).

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


2

Il me semble que le principal obstacle est de 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 la pornographie. Comment l'application le saura-t-elle? La modération des utilisateurs est probablement votre meilleur pari.


1

J'ai vu une application de filtrage Web qui filtre les images pornographiques, désolé, je ne me souviens plus du nom. Il était assez sujet aux faux positifs, mais la plupart du temps, cela fonctionnait.

Je pense que le principal truc est de détecter "trop ​​de peau sur l'image :)


1
Je ne me souviens pas non plus de l'étude - mais elle a détecté les contours et correspond à ce qui semblait être des motifs de vulves tournées ou obscurcies. Assez intéressant d'un point de vue traitement d'image.
jim

-1, Ceci fournit des commentaires mais ne donne pas de solution substantielle.
Brad Koch

1

La détection d'images pornographiques est toujours une tâche précise de l'IA qui est encore très théorique.

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

PS Vraiment surpris du nombre de personnes qui posent des questions en supposant que les logiciels et les algorithmes sont puissants sans même se demander si ce qu'ils veulent peut être fait. Sont-ils des représentants de cette nouvelle race de programmeurs qui n'ont aucune compréhension du matériel, de la programmation de bas niveau et de toute cette «magie derrière»?

PS # 2. Je me souviens aussi que périodiquement, il arrive qu'une situation où les gens eux-mêmes ne puissent pas décider si une photo est du porno ou de l'art est portée devant le tribunal. Même après que le tribunal a statué, il y a de fortes chances que la moitié des gens considèrent la décision comme mauvaise. La dernière situation stupide du genre a eu lieu récemment lorsqu'une page Wikipédia a été interdite au Royaume-Uni en raison d'une image de couverture de CD qui présente une certaine nudité.


1

Deux options auxquelles je peux penser (même si aucune d'elles ne détecte le porno par programme):

  1. Bloquez toutes les images téléchargées jusqu'à ce que l'un de vos administrateurs les ait consultées. Il n'y a aucune raison pour que cela prenne beaucoup de temps: vous pouvez écrire un logiciel qui montre 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 revenez dans ce logiciel et regardez de plus près.
  2. Ajoutez l'option habituelle "Signaler cette image comme inappropriée".

1

L' API de service Web BrightCloud est parfaite pour cela. C'est une API REST pour effectuer des recherches de sites Web comme celle-ci. Il contient une base de données de filtrage Web très grande et très précise et l'une des catégories, Adulte, a plus de 10 millions de sites pornographiques identifiés!


1

J'ai entendu parler d'outils qui utilisaient un algorithme très simple mais assez efficace. L'algorithme a calculé la quantité relative de pixels avec une valeur de couleur 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 de faux résultats positifs pour les photos de visage en gros plan et bien d'autres choses.
Puisque vous écrivez sur les réseaux sociaux, il y aura beaucoup de photos "normales" avec une grande quantité de couleur de peau dessus, vous ne devriez donc pas utiliser cet algorithme pour refuser toutes les images avec un résultat positif. Mais vous pouvez l'utiliser pour aider les modérateurs, par exemple marquer ces images avec une priorité plus élevée,


J'ai en fait vu un système similaire à celui utilisé. Ce n'est pas assez fiable pour être laissé seul, mais il fait un très bon travail pour alerter un modérateur le cas échéant. Ce n'est pas une preuve complète, surtout si la personne est couverte d'une seule petite zone exposée. Le ratio ne fonctionne pas de manière aussi fiable en sens inverse.
Tim Post

1

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


0

Regardez le nom du fichier et tous les attributs. Il n'y a pas assez d'informations pour détecter ne serait-ce que 20% des images coquines, mais une simple liste noire de mots-clés détecterait au moins 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é-écran qui peut au moins en attraper des simples avant de passer le reste à un modérateur pour qu'il juge.

L'autre astuce utile est bien sûr le contraire, maintenir une liste blanche de sources d'images à autoriser sans modération ni vérification. Si la plupart de vos images proviennent de sources ou d'uploaders sûrs connus, vous pouvez simplement les accepter de manière contraignante.


0

Je n'essaierai pas aujourd'hui de définir davantage les types de matériel que je pense être inclus dans cette description abrégée [«pornographie dure»]; et peut-être ne pourrais-je jamais réussir à le faire intelligemment. Mais je le sais quand je le vois, et le film impliqué dans cette affaire n'est pas cela.

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



0

Ce n'est pas sorcier. Plus maintenant. C'est très similaire à la reconnaissance faciale. Je pense que le moyen le plus simple de le gérer 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 recadrer 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, et c'est là que les choses deviennent amusantes.

Comme quelqu'un l'a 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 sera déterminée par vos données d'entraînement, la structure de vos réseaux neuronaux et 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 convaincu que cela peut être réalisé avec une grande précision pour les images pornographiques explicites.



-1

Il n'y a aucun moyen que vous puissiez faire cela à 100% (je dirais que peut-être 1 à 5% serait plausible) avec les connaissances d'aujourd'hui. Vous obtiendrez de bien meilleurs résultats (que ceux de 1 à 5%) en vérifiant simplement les noms d'image pour les mots liés au sexe :).

@SO Troll: Tellement vrai.


-1, Ceci fournit des commentaires mais ne donne pas de solution substantielle.
Brad Koch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.