Défi
Écrivez du code qui, étant donné une image d'un panneau d'une bande dessinée xkcd aléatoire, renvoie une valeur vraie si Blackhat est dans la bande dessinée ou Falsey sinon.
Qui est Blackhat?
Blackhat est le nom officieux donné au personnage dans les bandes dessinées xkcd qui porte un chapeau noir:
Tiré de la page Explain xkcd sur Blackhat
Le chapeau de Blackhat est toujours rectiligne, noir et ressemble à celui de l'image ci-dessus.
D'autres personnages peuvent également avoir des chapeaux et des cheveux, mais aucun n'aura de chapeaux noirs et droits.
Contribution
L'image peut être saisie comme vous le souhaitez, que ce soit un chemin vers l'image ou des octets via STDIN. Vous ne devriez pas avoir besoin de prendre une URL en entrée.
Règles
Le codage en dur de la réponse n'est pas interdit, mais il n'est pas apprécié.
Vous n'êtes pas autorisé à accéder à Internet pour obtenir la réponse.
Exemples
Toutes les images recadrées à partir d'images de https://xkcd.com
Blackhat est dans le panneau (retour truthy
)
Blackhat n'est pas dans le panneau (retour falsey
)
Batterie de test
Les 20 images qui contiennent Blackhat peuvent être trouvées ici: https://beta-decay.github.io/blackhat.zip
Les 20 images qui ne contiennent pas de Blackhat se trouvent ici: https://beta-decay.github.io/no_blackhat.zip
Si vous voulez plus d'images pour tester vos programmes (pour vous entraîner aux cas de test mystères), vous pouvez trouver une liste de toutes les apparitions de Blackhat ici: http://www.explainxkcd.com/wiki/index.php/Catégorie: Comics_featuring_Black_Hat
Gagnant
Le programme qui identifie correctement si Blackhat est dans la bande dessinée ou non pour la plupart des images gagne. Votre en-tête doit inclure votre score en pourcentage.
En cas de bris d'égalité, les programmes liés recevront des images "mystères" (c'est-à-dire celles que je connais seulement). Le code qui identifie le plus correctement remporte le tie-break.
Les images mystères seront révélées avec les partitions.
Remarque: il semble que le nom de Randall pour lui soit Hat Guy. Mais je préfère Blackhat.
la source
Réponses:
PHP (> = 7), 100% (40/40)
Pour l'exécuter:
Exemple:
Remarques
Quelques exemples de chapeaux noirs détectés:
Ces exemples sont acquis en traçant des lignes rouges sur des points spéciaux trouvés sur l'image dont le script a décidé qu'il a un chapeau noir (les images peuvent avoir une rotation par rapport à celles d'origine).
Supplémentaire
Avant de poster ici, j'ai testé ce script sur un autre ensemble de 15 images, 10 avec un chapeau noir et 5 sans chapeau noir et cela s'est également bien passé pour toutes (100%).
Voici le fichier ZIP contenant des images de test supplémentaires que j'ai utilisées: extra.zip
Dans le
extra/blackhat
répertoire, les résultats de détection avec des lignes rouges sont également disponibles. Par exemple,extra/blackhat/1.png
l'image de testextra/blackhat/1_r.png
est le résultat de la détection.la source
imagerotate
intégré, donc ...Matlab, 87,5%
Amélioration de la version précédente, avec quelques contrôles ajoutés sur la forme des régions candidates.
Erreurs de classification dans l' ensemble HAT : images 4, 14, 15, 17 .
Erreurs de classification dans l'ensemble NON HAT : images 4 .
Quelques exemples d'images classées corrigées:
Exemple d'une image classée incorrecte:
ANCIENNE VERSION (77,5%)
Approche basée sur l'érosion de l'image, similaire à la solution proposée par Mnemonic, mais basée sur le canal V de l'image HSV. De plus, la valeur moyenne du canal de la zone sélectionnée est vérifiée (pas sa taille).
Erreurs de classification dans l' ensemble HAT : images 4, 5, 10 .
Erreurs de classification dans l'ensemble NON HAT : images 4, 5, 6, 7, 13, 14 .
la source
Pyth , 62,5%
Accepte le nom de fichier d'un fichier image sur stdin. Renvoie
True
si la moyenne de toutes ses composantes de couleur RVB est supérieure à 214. Vous avez bien lu: les images apparemment noires ont tendance à être plus lumineuses que les images non noires.(Certes, quelqu'un peut faire mieux, ce n'est pas du golf de code !)
la source
Python 2,
65%72,5%77,5% (= 31/40)Cela détermine quels pixels sont noirs, puis érode les petites pièces contiguës. Il y a certainement place à amélioration ici.
la source