Bhinish Dhiman
Cuánto de un código QR puede cubrir un logo: lo medimos
Traducido del original en inglés. Leer el original
Un logo centrado puede cubrir alrededor del 4.3% del área de un código QR con el nivel de corrección de errores L, el 9.2% con M, el 14.3% con Q y el 19.3% con H, según unos 5 000 intentos de decodificación. La cifra del 30% que tanto se repite interpreta mal la norma: ISO/IEC 18004 dice que el nivel H recupera el 30% de las palabras de código del símbolo, que no es el 30% de su área visible.
Busca qué tan grande puede ser un logo en un código QR y te van a decir 30%, en casi todas las páginas, normalmente con el nivel H. No pudimos encontrar la medición que respalda esa cifra, así que la hicimos nosotros.
Lo que la norma dice en realidad
La cláusula 5.1 de ISO/IEC 18004 define los cuatro niveles de corrección de errores según lo que recuperan:
que permiten la recuperación de palabras de código del símbolo (symbol codeword recovery) de: L: 7%; M: 15%; Q: 25%; H: 30%.
Todo el malentendido está en unas pocas palabras: recuperación de palabras de código. Una palabra de código son ocho módulos de datos codificados. El treinta por ciento de las palabras de código no es el treinta por ciento de la imagen, y hay tres cosas que agrandan la diferencia.
Los patrones de localización, de sincronización y de alineación no tienen ninguna corrección de errores. Son la forma en que un escáner ubica y orienta el símbolo antes de empezar a decodificar. En un código de versión 1 ocupan el 52.8% del área; en uno de versión 40, el 5.4%. Si tapas cualquier parte de ellos, ningún nivel de corrección de errores ayuda, porque la corrección todavía no empezó.
Un logo es una mancha continua, y un impacto parcial es una pérdida total. La corrección de errores trabaja con palabras de código completas. Un logo que roza la esquina de una palabra de código la destruye tan completamente como si la tapara entera.
La corrección se aplica por bloque intercalado, no en conjunto. Un símbolo se divide en bloques, cada uno con su propio presupuesto de recuperación. Una mancha concentrada sobre dos bloques puede agotarlos mientras el resto del símbolo queda intacto y con presupuesto de sobra.
La medición
Codificamos cuatro contenidos con cada uno de los cuatro niveles de corrección de errores, superpusimos un recorte cuadrado centrado, lo agrandamos de a un módulo e intentamos decodificar después de cada paso. Cada intento pasó por un modelo de cámara en lugar de un render limpio: reducido a un número fijo de píxeles por módulo, desenfocado 0.8px, con ruido gaussiano de σ=6 y comprimido en JPEG con calidad 70.
En total, unos 5 000 intentos de decodificación. Para una URL típica de 54 caracteres:
| Corrección de errores | Logo más grande que todavía se decodifica | “Recuperación” nominal |
|---|---|---|
| L | 4.3% del área | 7% |
| M | 9.2% | 15% |
| Q | 14.3% | 25% |
| H | 19.3% | 30% |
Incluso con el nivel H, con el contenido más largo que probamos, el techo fue del 22.4%. Nada de lo que medimos se acercó al 30%.
La parte que debería cambiar cómo haces tus pruebas
La corrección Reed–Solomon no se degrada de forma gradual. En todos los niveles y todas las resoluciones que probamos, un símbolo se decodificó el 100% de las veces hasta el último módulo tolerable, y el 0% un módulo después. No hay una franja en la que funcione a veces.
Eso importa por la forma en que la gente revisa los códigos QR: lo escanean con el teléfono, funciona y lo mandan a imprimir. Un escaneo exitoso te dice que estás del lado correcto del precipicio. No te dice nada sobre qué tan cerca del borde estás, y el borde es justo donde una impresión gastada, el sensor de una cámara más barata o un ángulo más pronunciado te dejan del otro lado.
Este es el argumento para calcular el margen en lugar de probarlo. Nuestro generador de códigos QR muestra qué proporción del presupuesto de corrección de errores está consumiendo un logo, así que puedes ver la distancia al precipicio en lugar de descubrirla después de un tiraje de impresión.
Otros tres resultados que contradicen los consejos habituales
Los módulos redondeados y en forma de punto no cuestan nada, hasta un diámetro de alrededor de 0.7×. La advertencia común de que los módulos redondeados perjudican la lectura no tiene respaldo en lo que medimos, siempre que los tres patrones de localización de las esquinas sigan siendo cuadrados sólidos.
Estilizar los patrones de localización es el daño real, y la corrección de errores no lo puede arreglar. Los patrones de localización punteados obtuvieron una tasa de lectura idéntica del 60% con L, M, Q y H. Plana en los cuatro niveles, porque es una falla de detección y no de corrección: el escáner no puede ubicar el símbolo, así que la corrección nunca se ejecuta. Es el argumento más fuerte que existe contra “ponlo en H y va a funcionar”.
El tono no importa; solo cuenta la luminancia. Verde sobre rojo, una combinación que a simple vista se ve mal, falló. Rojo sobre azul, que se ve igual de incómodo, se decodificó sin problemas. La medida que rige es el Symbol Contrast de ISO/IEC 15415, una diferencia de reflectancia calificada de la A a la F, y no es una relación de WCAG. WCAG mide la legibilidad del texto para el ojo humano; el sensor de una cámara es un instrumento distinto. La mayoría de las páginas que responden “qué contraste necesita un código QR” citan cifras de WCAG, que son la unidad equivocada para esa pregunta.
La regla de distancia 10:1 no tiene nada que la respalde
La regla de que la distancia de lectura puede ser diez veces el ancho del símbolo aparece en todas partes y no está en ninguna norma: ISO/IEC 18004 no fija ningún tamaño mínimo de módulo. Lo que medimos es un umbral en píxeles de cámara por módulo: por debajo de unos 2.5 píxeles por módulo, la tasa de decodificación se desploma de golpe.
Eso hace que la regla falle en ambos sentidos, porque ignora la cantidad de módulos. Un código de versión 2 y uno de versión 20 impresos al mismo tamaño tienen módulos con una diferencia de tamaño de 2.3×, y por lo tanto distancias de lectura muy distintas. Un solo número no puede describir los dos.
Conviene saber además que los teléfonos decodifican a partir del flujo de vista previa de la cámara, no de una foto a resolución completa. Un sensor de 12 megapíxeles no te da 12 megapíxeles para decodificar, y por eso los cálculos físicos parecen mucho más optimistas que la experiencia diaria.
Advertencias, dichas sin rodeos
Todas las decodificaciones anteriores usaron una sola implementación de decodificador. Es medible que tolera más que un verificador de impresión y posiblemente más que el teléfono promedio, así que toma estos resultados como un límite superior y no como una garantía. El modelo de presupuesto detrás de nuestra herramienta está ajustado a propósito del lado conservador de lo que medimos: predice el precipicio con un margen de un módulo, y se inclina por decirte que un logo es demasiado grande.
El método, los scripts y las cifras sin procesar están en el repositorio de este sitio. Si repites esto con otro decodificador y obtienes números distintos, nos gustaría saberlo.