Desafio
Escreva um código que, dada a imagem de um painel de uma história em quadrinhos aleatória do xkcd, retorne um valor verdadeiro se Blackhat estiver na história em quadrinhos ou falsey, se não.
Quem é Blackhat?
Blackhat é o nome não oficial dado ao personagem dos quadrinhos xkcd que usa um chapéu preto:
Retirado da página Explain xkcd no Blackhat
O chapéu de Blackhat é sempre reto, preto e tem a mesma aparência da imagem acima.
Outros personagens também podem ter chapéus e cabelos, mas nenhum terá chapéus pretos e retos.
Entrada
A imagem pode ser inserida da maneira que você desejar, seja um caminho para a imagem ou bytes via STDIN. Você não precisa usar um URL como entrada.
Regras
A resposta codificada não é proibida, mas não é apreciada.
Você não tem permissão para acessar a Internet para obter a resposta.
Exemplos
Todas as imagens colhidas a partir de imagens de https://xkcd.com
Blackhat está no painel (retorno truthy
)
Blackhat não está no painel (retorno falsey
)
Bateria de teste
As 20 imagens que contêm Blackhat podem ser encontradas aqui: https://beta-decay.github.io/blackhat.zip
As 20 imagens que não contêm Blackhat podem ser encontradas aqui: https://beta-decay.github.io/no_blackhat.zip
Se você quiser que mais imagens testem seus programas (para treinar para os casos de mistério), você pode encontrar uma lista de todas as aparências do Blackhat aqui: http://www.explainxkcd.com/wiki/index.php/ Comics_featuring_Black_Hat
Ganhando
O programa que identifica corretamente se o Blackhat está nos quadrinhos ou não para a maioria das imagens vence. Seu cabeçalho deve incluir sua pontuação como uma porcentagem.
No caso de um tiebreak, os programas vinculados receberão imagens "misteriosas" (ou seja, aquelas que apenas eu conheço). O código que identifica o mais corretamente vence o desempate.
As imagens misteriosas serão reveladas juntamente com as pontuações.
Nota: parece que o nome de Randall para ele pode ser Hat Guy. Eu prefiro Blackhat embora.
fonte
Respostas:
PHP (> = 7), 100% (40/40)
Para executá-lo:
Exemplo:
Notas
Alguns exemplos de chapéus pretos detectados:
Esses exemplos são adquiridos desenhando linhas vermelhas em pontos especiais encontrados na imagem que o script decidiu ter um chapéu preto (as imagens podem ter rotação comparadas às originais).
Extra
Antes de postar aqui, testei esse script em outro conjunto de 15 imagens, 10 com chapéu preto e 5 sem chapéu preto e ele também foi correto para todas elas (100%).
Aqui está o arquivo ZIP contendo imagens de teste extras que usei: extra.zip
No
extra/blackhat
diretório, os resultados da detecção com linhas vermelhas também estão disponíveis. Por exemplo,extra/blackhat/1.png
é a imagem de teste eextra/blackhat/1_r.png
é o resultado da detecção.fonte
imagerotate
built-in, então ...Matlab, 87,5%
Aprimoramento da versão anterior, com algumas verificações adicionadas na forma das regiões candidatas.
Erros de classificação no conjunto HAT : imagens 4, 14, 15, 17 .
Erros de classificação no conjunto NÃO HAT : imagens 4 .
Alguns exemplos de imagens classificadas corrigidas:
Exemplo de uma imagem classificada incorreta:
VERSÃO ANTIGA (77,5%)
Abordagem baseada na erosão da imagem, semelhante à solução proposta pela Mnemonic, mas baseada no canal V da imagem HSV. Além disso, o valor médio do canal da área selecionada é verificado (não seu tamanho).
Erros de classificação no conjunto HAT : imagens 4, 5, 10 .
Erros de classificação no conjunto NÃO HAT : imagens 4, 5, 6, 7, 13, 14 .
fonte
Pitão , 62,5%
Aceita o nome do arquivo de um arquivo de imagem no stdin. Retorna
True
se a média de todos os seus componentes de cores RGB for maior que 214. Você leu certo: aparentemente as imagens blackhat tendem a ser mais brilhantes que as imagens blackhat.(Certamente alguém pode fazer melhor - isso não é código-golfe !)
fonte
Python 2,
65%72,5%77,5% (= 31/40)Isso descobre quais pixels são pretos e depois elimina pequenos pedaços contíguos. Certamente espaço para melhorias aqui.
fonte