Qual é a melhor maneira de detectar programaticamente imagens pornográficos? [fechadas]


120

O Akismet faz um trabalho incrível na detecção de comentários de spam. Mas os comentários não são a única forma de spam atualmente. E se eu quisesse algo como o akismet para detectar automaticamente imagens pornográficos em um site de rede social que permita aos usuários fazer upload de suas fotos, avatares, etc.?

Já existem alguns mecanismos de pesquisa baseados em imagem, bem como material de reconhecimento de rosto, por isso estou assumindo que não seria ciência do foguete e isso poderia ser feito. No entanto, não tenho idéia de como essas coisas funcionam e como devo proceder se quiser desenvolvê-las do zero.

Como devo começar?

Existe algum projeto de código aberto para isso?


82
Na verdade, eu diria que isso soa muito mais difícil do que a ciência dos foguetes! Já temos lotes de foguetes, mas AFAIK existe tal "detector porn" :)
GAZ

4
RI MUITO. Existe reconhecimento facial, mas ainda não existe tecnologia para reconhecimento genital e mamário. Muita sorte.
9139 Jon Limjap

11
A pornografia é uma questão de geografia - além disso, tenho certeza de que há muitas fotos que não mostram órgãos genitais ou nudez, o que seria considerado bastante grave (novamente - em alguns lugares). Parece um trabalho para uma IA avançada, não um algoritmo simples.
Gal Gal

2
Acabei de me deparar com esse utilitário que me fez lembrar desse tópico. Gostaria de saber se funciona? proofpronto.com/porn-detection-stick-by-paraben.html
Martin Smith

1
@ jm666, se o problema é sério para você e você acha que o estado da arte nessa área melhorou nos últimos dois anos, que tal colocar uma recompensa no idiota mencionado? Você deve reunir alguma atenção e talvez algumas respostas dessa maneira.
Michael Petrotta

Respostas:


69

Isso foi escrito em 2000, não tenho certeza se o estado da arte na detecção de pornografia avançou, mas duvido.

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

O PORNsweeper parece ter alguma capacidade de distinguir fotos de pessoas de fotos de coisas que não são pessoas, desde que as fotos sejam coloridas. É menos bem-sucedido em distinguir fotos sujas de pessoas de fotos limpas.

Com a sensibilidade média padrão, se os Recursos Humanos enviarem uma foto do novo membro em Contas, você terá cerca de 50% de chance de obtê-lo. Se sua irmã lhe enviar uma foto da filha de seis meses, é provável que ela seja detida.

É justo apontar erros divertidos, como ligar para o pornô da Mona Lisa, se eles são representativos do comportamento do software. Se os fabricantes admitem que seu reconhecedor de imagem algorítmica vai derrubar a bola 15% das vezes, zombando dela quando faz exatamente isso.

Mas o PORNsweeper parece corresponder às especificações declaradas em um departamento - detecção de pornografia real. É meio decente na detecção de pornografia, mas é ruim na detecção de imagens limpas. E eu não ficaria surpreso se não houvesse grandes saltos nessa área em um futuro próximo.


De causa, a detecção de pornografia avançou desde então. Houve muitas reflexões sobre reconhecimento de objetos / classificação de imagens / visão computacional. 2000 parece a idade da pedra para mim.
Maarten

89

Isso é realmente razoavelmente fácil. Você pode detectar programaticamente tons de pele - e as imagens pornôs tendem a ter muita pele. Isso criará falsos positivos, mas se esse for um problema, você pode transmitir imagens detectadas por moderação real. Isso não apenas reduz bastante o trabalho dos moderadores, mas também oferece muita pornografia gratuita. É ganha-ganha.

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

Este código mede os tons de pele no centro da imagem. Eu testei em 20 imagens "pornográficas" relativamente mansos e em 20 imagens completamente inocentes. Ele sinaliza 100% da "pornografia" e 4 das 20 imagens limpas. Essa é uma taxa de falsos positivos bastante alta, mas o script tem o objetivo de ser bastante cauteloso e pode ser ajustado ainda mais. Funciona em tons de pele claros, escuros e asiáticos.

Suas principais fraquezas com falsos positivos são objetos marrons como areia e madeira e, é claro, não sabe a diferença entre carne "malcriada" e "agradável" (como tiros no rosto).

Fraqueza com falsos negativos seria imagens sem muita carne exposta (como couro), pele pintada ou tatuada, imagens em preto e branco etc.

código fonte e imagens de exemplo


Gostaria de publicar sua prova de conceito Python de 20 linhas? (-1)
bobobobo

Não é ruim, +1. Curiosamente, imagens de superfícies regulares (como superfície de carpete ou geladeira) aparecem como tendo uma grande quantidade de pele.
bobobobo

6
Desmancha prazeres: Nenhuma nudez real nas amostras de imagem.
Luc

Isso também considerará a madeira como pele. Porque tem exatamente a mesma cor, mas textura diferente. Sem mencionar portaits.
Maarten

45

Prefiro permitir que os usuários relatem imagens ruins. O desenvolvimento do reconhecimento de imagem pode exigir muito tempo e esforço e não será tão preciso quanto os olhos humanos. É muito mais barato terceirizar esse trabalho de moderação.

Dê uma olhada em: Amazon Mechanical Turk

"O Amazon Mechanical Turk (MTurk) é um dos suítes da Amazon Web Services, um mercado de crowdsourcing que permite que programas de computador coordenem o uso da inteligência humana para executar tarefas que os computadores não podem executar".


4
Há provavelmente um mercado para um site turco de estilo Amazon Mechanical mas que é especializada neste tipo de assunto .... :)
rico

6
O Amazon Mechanical Turk provavelmente custa dinheiro. Dado o assunto, você pensaria que existe um modelo de negócios inteligente, onde você pode fazer isso de graça.
Ankur 05/05

1
Eu acho que essa é uma abordagem antiética.
Noon Silk

2
@Ankur LOL! Boa ideia. Indo para nic.com para verificar se o PornOrNot.com ainda está disponível.
Pekka

9
@ Silk Noon Por que você acha que essa é uma abordagem antiética?
Mazatec


15

ESTRONDO! Aqui está o whitepaper que contém o algoritmo.

Alguém sabe onde obter o código-fonte para uma implementação em java (ou em qualquer idioma)?

Isso seria demais.

Um algoritmo chamado WISE possui uma taxa de precisão de 98%, mas uma taxa de falso positivo de 14%. Então, o que você faz é permitir que os usuários sinalizem os 2% de falsos negativos, idealmente com remoção automática se um determinado número de usuários sinalizá-lo, e os moderadores visualizem os 14% de falsos positivos.


Você encontrou o algoritmo. Isso é muito bom. O código fonte geralmente é deixado como um exercício. Afinal, não estamos especificando nenhuma linguagem de programação específica, estamos?
Ian


8

Existe um software que detecta a probabilidade de pornografia, mas essa não é uma ciência exata, pois os computadores não conseguem reconhecer o que realmente está nas imagens (as imagens são apenas um grande conjunto de valores em uma grade sem significado). Você pode simplesmente ensinar ao computador o que é pornô e o que não, dando exemplos. Isso tem a desvantagem de reconhecer apenas essas ou imagens semelhantes.

Dada a natureza repetitiva da pornografia, você tem uma boa chance de treinar o sistema com poucos falsos positivos. Por exemplo, se você treina o sistema com pessoas nuas, pode sinalizar fotos de uma praia com "quase" pessoas nuas também como pornografia.

Um software semelhante é o software do Facebook lançado recentemente. É apenas especializado em rostos. O princípio principal é o mesmo.

Tecnicamente, você implementaria algum tipo de detector de recurso que utiliza uma filtragem de bayes. O detector de recursos pode procurar recursos como porcentagem de pixels coloridos, se for um detector simples ou apenas calcular a semelhança da imagem atual com um conjunto de imagens pornôs salvas.

Obviamente, isso não se limita ao pornô, é na verdade mais um caso de esquina. Eu acho que mais comuns são sistemas que tentam encontrar outras coisas nas imagens ;-)


1
Por que as pessoas votam negativamente nesta resposta?
224 Patrick Cornelissen

porque não contém nada como algoritmo, receita ou referência.
Ian

7
Portanto, não é uma resposta válida para explicar ao usuário a pergunta de que não é realmente possível o que ele tenta alcançar? Cara, você pode ser um pouco mais releaxed ...
Patrick Cornelissen

Ele também está fazendo uma declaração falsa "como computadores não conseguem reconhecer o que está realmente em fotos"
Daveth3Cat

Porque eles não podem. Você só pode aprender a detectar determinadas imagens e, quanto maior for o seu banco de dados de casos positivos e negativos, melhor, mas em geral você nunca obterá uma solução tão precisa quanto a humana, e assim terá um grande número de falsos positivos e negativos.
Patrick Cornelissen

5

A resposta é realmente fácil: é bastante seguro dizer que não será possível nas próximas duas décadas. Antes disso, provavelmente obteremos boas ferramentas de tradução. A última vez que verifiquei, os caras da IA ​​estavam lutando para identificar o mesmo carro em duas fotografias tiradas de um ângulo ligeiramente alterado. Veja quanto tempo eles levaram para obter um OCR ou reconhecimento de fala suficientemente bom. Esses são problemas de reconhecimento que podem se beneficiar muito com os dicionários e ainda estão longe de ter soluções completamente confiáveis, apesar dos milhões de meses que são lançados neles.

Dito isto, você pode simplesmente adicionar uma "ofensiva?" link ao lado da disputa gerada pelo usuário e faça um cruzamento cruzado com as reclamações recebidas.

editar:

Esqueci uma coisa: se você vai implementar algum tipo de filtro, precisará de um filtro confiável. Se a sua solução estiver 50% correta, 2000 dos 4000 usuários com imagens decentes serão bloqueados. Espere um ultraje.


5

Um estudante de graduação da Universidade Nacional Cheng Kung, em Taiwan, fez uma pesquisa sobre o assunto em 2004. Ele conseguiu alcançar uma taxa de sucesso de 89,79% na detecção de fotos de nus baixadas da Internet. Aqui está o link para sua tese: O estudo sobre detecção de imagens de pessoas nuas com base na cor da pele
Está em chinês, portanto, você pode precisar de um tradutor, caso não consiga lê-lo.


4

resposta curta: use um moderador;)

Resposta longa: não acho que exista um projeto para essa causa, o que é pornô? Apenas pernas, nudez total, anões etc. É subjetivo.


3
a pergunta é "Qual é a melhor maneira de detectar programaticamente imagens pornográficos?", programaticamente ...
Agusti-N

5
Eu sei a pergunta, mas como eu disse, não existe um bloqueador de pornografia 100% exato, porque a pornografia é subjetiva. O subjetivo não pode estar relacionado ao código. Eu acho que é apenas nudez, outro pensa que é pornô. A melhor solução é ter um botão 'reportar imagem'. Mesma idéia que Koistya Navin .NET
RvdK

1
"Anões etc."? Santo não sequitur, Batman.
Doug McClean

Existe algo como pornô anão.
Chris Sherlock

4

Adicione um link ofensivo e armazene o md5 (ou outro hash) da imagem ofensiva para que ela possa ser automaticamente identificada no futuro.

Quão legal seria se alguém tivesse um grande banco de dados público da imagem md5 junto com tags descritivas em execução como um serviço da web? Muita pornografia não é um trabalho original (na medida em que a pessoa que o possui agora, provavelmente não o fez) e as imagens populares tendem a flutuar em lugares diferentes, então isso pode realmente fazer a diferença.


8
Eu duvido. Há tanta pornografia por aí (e muito mais gerada por dia) que suas chances de ver a mesma imagem duas vezes são (IMHO) bastante próximas de zero.
Vilx-

Pense em quantas vezes a garota da banheira apareceu por um tempo. Teria sido sinalizado uma vez e então todo mundo poderia ter evitado.
Rfusca 03/04

3
a menos que tenha sido recortado, redimensionado ou apenas aberto e salvo novamente antes de ser carregado. #
Blorgbeard is out

Ya, eu pensei sobre isso :( eh, era um pensamento.
rfusca

1
Melhor que o md5, o TinEye da idée da licença.
Tobu

2

Se você realmente tem tempo e dinheiro:

Uma maneira de fazer isso é: 1) Escrever um algoritmo de detecção de imagem para descobrir se um objeto é humano ou não. Isso pode ser feito com o bitmasking de uma imagem para recuperar seus "contornos" e verificar se os contornos se encaixam em um contorno humano.

2) Os dados extraem muitas imagens pornôs e usam técnicas de mineração de dados, como os algoritmos C4 ou a otimização de enxame de partículas, para aprender a detectar padrões que correspondem às imagens pornôs.

Isso exigirá que você identifique como devem ser os contornos de um corpo humano nu / mulher em formato digitalizado (isso pode ser alcançado da mesma maneira que os algoritmos de reconhecimento de imagem OCR funcionam).

Espero que você se divirta! :-)


2

Parece-me que o principal obstáculo é definir uma "imagem pornô". Se você pode defini-lo facilmente, provavelmente poderá escrever algo que funcione. Mas mesmo os humanos não podem concordar com o que é pornô. Como o aplicativo saberá? A moderação do usuário é provavelmente a sua melhor aposta.


1

Eu vi um aplicativo de filtragem da web que faz filtragem de imagens pornôs, desculpe por não lembrar o nome. Era bastante propenso a falsos positivos, no entanto, na maioria das vezes estava funcionando.

Eu acho que o principal truque é detectar "muita pele na imagem :)


1
Também não me lembro do estudo - mas ele detectou as bordas e combinou com o que pareciam ser padrões de vulvas rotacionadas ou obscurecidas. Muito interessante do ponto de vista do processamento de imagens.
jim

-1, isso fornece comentários, mas não fornece uma solução substancial.
Brad Koch

1

A detecção de imagens pornô ainda é uma tarefa definitiva da IA, que ainda é muito teórica.

Colete poder coletivo e inteligência humana adicionando um botão / link "Denunciar spam / abuso". Ou empregue vários moderadores para fazer este trabalho.

PS Realmente surpreendeu quantas pessoas fazem perguntas, assumindo que software e algoritmos são poderosos, sem nem pensar se o que eles querem poderia ser feito. Eles são representantes dessa nova geração de programadores que não têm conhecimento de hardware, programação de baixo nível e toda essa "mágica por trás"?

PS # 2. Lembro-me também que periodicamente acontece que alguma situação em que as próprias pessoas não conseguem decidir se uma foto é pornografia ou arte é levada ao tribunal. Mesmo depois que o tribunal decide, é provável que metade das pessoas considere a decisão errada. A última situação estúpida desse tipo ocorreu recentemente, quando uma página da Wikipedia foi banida no Reino Unido por causa de uma imagem de capa de CD que apresentava alguma nudez.


1

Duas opções em que posso pensar (embora nenhuma delas esteja detectando programaticamente pornô):

  1. Bloqueie todas as imagens carregadas até que um de seus administradores as veja. Não há razão para que isso demore muito: você pode escrever um software que mostre 10 imagens por segundo, quase como um filme - mesmo a essa velocidade, é fácil para um ser humano identificar uma imagem potencialmente pornográfica. Depois, você retrocede neste software e olha mais de perto.
  2. Adicione a opção usual "sinalize esta imagem como inadequada".

1

A API de serviço da web BrightCloud é perfeita para isso. É uma API REST para fazer pesquisas de sites assim. Ele contém um banco de dados de filtragem da web muito grande e preciso e uma das categorias, Adult, possui mais de 10 milhões de sites pornográficos identificados!


1

Eu ouvi falar sobre ferramentas que estavam usando algoritmo muito simples, mas bastante eficaz. O algoritmo calculou a quantidade relativa de pixels com valor de cor próximo a algumas cores predefinidas de "capa". Se esse valor for superior a algum valor predefinido, a imagem será considerada como conteúdo erótico / pornográfico. Obviamente, esse algoritmo fornecerá resultados falsos positivos para fotos de rosto em close e muitas outras coisas.
Como você está escrevendo sobre redes sociais, haverá muitas fotos "normais" com grande quantidade de cor de pele; portanto, você não deve usar esse algoritmo para negar todas as fotos com resultado positivo. Mas você pode usá-lo para fornecer ajuda aos moderadores. Por exemplo, sinalize essas fotos com maior prioridade,


Na verdade, eu vi um sistema semelhante ao usado. Não é confiável o suficiente para ser deixado sozinho, mas faz um bom trabalho em alertar um moderador, quando apropriado. Não é uma prova completa, especialmente se a pessoa estiver coberta com apenas uma pequena área exposta. A proporção não funciona tão confiável no sentido inverso.
Tim Post


0

Veja o nome do arquivo e quaisquer atributos. Não há informações suficientes para detectar até 20% das imagens maliciosas, mas uma simples lista negra de palavras-chave detectaria pelo menos imagens com rótulos ou metadados descritivos. 20 minutos de codificação para uma taxa de sucesso de 20% não é um mau negócio, especialmente como uma pré-tela que pode pelo menos capturar algumas simples antes de você passar o resto para um moderador para julgar.

O outro truque útil é o oposto, é claro, manter uma lista de permissões de fontes de imagem para permitir sem moderação ou verificação. Se a maioria das suas imagens vier de fontes ou fontes seguras conhecidas, você pode aceitá-las apenas de forma vinculativa.




0

Não é ciência de foguetes. Não mais. É muito semelhante ao reconhecimento de rosto. Eu acho que a maneira mais fácil de lidar com isso é usar o aprendizado de máquina. E, como estamos lidando com imagens, posso apontar para redes neuronais, porque essas parecem ser preferidas para imagens. Você precisará de dados de treinamento. E você pode encontrar toneladas de dados de treinamento na internet, mas precisa cortar as imagens na parte específica que deseja que o algoritmo detecte. É claro que você terá que dividir o problema em diferentes partes do corpo que deseja detectar e criar dados de treinamento para cada um, e é aí que as coisas se tornam divertidas.

Como alguém acima disse, isso não pode ser feito 100%. Haverá casos em que esses algoritmos falharão. A precisão real será determinada pelos seus dados de treinamento, a estrutura de suas redes neuronais e como você escolherá agrupar os dados de treinamento (pênis, vaginas, seios, etc., e combinações desses). De qualquer forma, estou muito confiante de que isso pode ser alcançado com alta precisão para imagens explícitas de pornografia.



-1

Não há como você fazer isso 100% (eu diria que talvez 1-5% seria plausível) com o conhecimento atual. Você obteria resultados muito melhores (do que aqueles de 1 a 5%) apenas verificando os nomes das imagens em busca de palavras relacionadas ao sexo :).

@ SO Troll: Tão verdade.


-1, isso fornece comentários, mas não fornece uma solução substancial.
Brad Koch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.