Reto
Escriba el código que, dada una imagen de un panel de un cómic xkcd aleatorio, devuelve un valor verdadero si Blackhat está en el cómic o falsey si no.
Quien es Blackhat?
Blackhat es el nombre no oficial dado al personaje en los cómics xkcd que usa un sombrero negro:
Tomado de la página Explique xkcd en Blackhat
El sombrero de Blackhat siempre es recto, negro y tiene el mismo aspecto que en la imagen de arriba.
Otros personajes también pueden tener sombreros y cabello, pero ninguno tendrá sombreros negros y rectos.
Entrada
La imagen se puede ingresar de cualquier manera que desee, ya sea una ruta a la imagen o bytes a través de STDIN. No debería necesitar tomar una URL como entrada.
Reglas
Codificar la respuesta no está prohibido, pero no se agradece.
No está autorizado a acceder a Internet para obtener la respuesta.
Ejemplos
Todas las imágenes recortadas de imágenes de https://xkcd.com
Blackhat está en el panel (volver truthy
)
Blackhat no está en el panel (volver falsey
)
Prueba de batería
Las 20 imágenes que contienen Blackhat se pueden encontrar aquí: https://beta-decay.github.io/blackhat.zip
Las 20 imágenes que no contienen Blackhat se pueden encontrar aquí: https://beta-decay.github.io/no_blackhat.zip
Si desea obtener más imágenes para probar sus programas (para entrenar para los casos de prueba misteriosos), puede encontrar una lista de todas las apariencias de Blackhat aquí: http://www.explainxkcd.com/wiki/index.php/Category: Comics_featuring_Black_Hat
Victorioso
El programa que identifica correctamente si Blackhat está en el cómic o no para la mayoría de las imágenes gana. Su encabezado debe incluir su puntaje como porcentaje.
En el caso de un desempate, los programas vinculados recibirán imágenes "misteriosas" (es decir, las que solo yo conozco). El código que identifica más correctamente gana el desempate.
Las imágenes misteriosas serán reveladas junto con los puntajes.
Nota: parece que el nombre de Randall para él puede ser Hat Guy. Aunque prefiero Blackhat.
fuente
Respuestas:
PHP (> = 7), 100% (40/40)
Para ejecutarlo:
Ejemplo:
Notas
Algunos ejemplos de sombreros negros detectados:
Estos ejemplos se obtienen dibujando líneas rojas en puntos especiales encontrados en la imagen que el guión decidió que tiene un sombrero negro (las imágenes pueden tener rotación en comparación con las originales).
Extra
Antes de publicar aquí, probé este script contra otro conjunto de 15 imágenes, 10 con sombrero negro y 5 sin sombrero negro, y también fue correcto para todas ellas (100%).
Aquí está el archivo ZIP que contiene imágenes de prueba adicionales que utilicé: extra.zip
En el
extra/blackhat
directorio, los resultados de detección con líneas rojas también están disponibles. Por ejemplo,extra/blackhat/1.png
es la imagen de prueba yextra/blackhat/1_r.png
es el resultado de la detección de la misma.fuente
imagerotate
incorporado, así que ...Matlab, 87,5%
Mejora de la versión anterior, con algunas comprobaciones agregadas en la forma de las regiones candidatas.
Errores de clasificación en el conjunto HAT : imágenes 4, 14, 15, 17 .
Errores de clasificación en el conjunto NO SOMBRERO : imágenes 4 .
Algunos ejemplos de imágenes clasificadas corregidas:
Ejemplo de una imagen clasificada incorrecta:
ANTIGUA VERSIÓN (77,5%)
Enfoque basado en la erosión de la imagen, similar a la solución propuesta por Mnemonic, pero basado en el canal V de la imagen HSV. Además, se verifica el valor medio del canal del área seleccionada (no su tamaño).
Errores de clasificación en el conjunto HAT : imágenes 4, 5, 10 .
Errores de clasificación en el conjunto NO SOMBRERO : imágenes 4, 5, 6, 7, 13, 14 .
fuente
Pyth , 62.5%
Acepta el nombre de archivo de un archivo de imagen en stdin. Devuelve
True
si el promedio de todos sus componentes de color RGB es mayor que 214. Has leído bien: aparentemente las imágenes de sombrero negro tienden a ser más brillantes que las imágenes sin sombrero negro.(Seguramente alguien puede hacerlo mejor, ¡esto no es código golf !)
fuente
Python 2,
65%72.5%77.5% (= 31/40)Esto determina qué píxeles son negros y luego erosiona las pequeñas piezas contiguas. Ciertamente hay margen de mejora aquí.
fuente