Bhinish Dhiman
Quanto de um QR code um logo pode cobrir? Nós medimos
Traduzido do original em inglês. Ler o original
Um logo centralizado pode cobrir cerca de 4.3% da área de um QR code no nível de correção de erros L, 9.2% no M, 14.3% no Q e 19.3% no H, segundo cerca de 5 000 tentativas de leitura. O número de 30%, repetido em toda parte, é uma leitura errada da norma: a ISO/IEC 18004 diz que o nível H recupera 30% das palavras-código do símbolo, o que não é 30% da área visível.
Pesquise qual é o tamanho máximo de um logo num QR code e vão dizer 30%, em quase todas as páginas, geralmente no nível H. Não encontramos a medição por trás desse número, então fizemos uma.
O que a norma realmente diz
A cláusula 5.1 da ISO/IEC 18004 define os quatro níveis de correção de erros pelo que eles recuperam:
permitindo a recuperação de palavras-código do símbolo (symbol codeword recovery) de L: 7%; M: 15%; Q: 25%; H: 30%.
Duas palavras carregam todo o mal-entendido: codeword recovery, recuperação de palavras-código. Uma palavra-código são oito módulos de dados codificados. Trinta por cento das palavras-código não são trinta por cento da imagem, e três fatores aumentam essa diferença.
Os padrões de localização, de sincronismo e de alinhamento não têm correção de erros nenhuma. São eles que permitem ao leitor localizar e orientar o símbolo antes de a decodificação começar. Num código versão 1, eles ocupam 52.8% da área; num versão 40, 5.4%. Cubra qualquer parte deles e nenhum nível de correção ajuda, porque a correção ainda nem começou.
Um logo é uma mancha contínua, e um acerto parcial é uma perda total. A correção de erros trabalha com palavras-código inteiras. Um logo que pega o canto de uma palavra-código a destrói tão completamente quanto se a cobrisse inteira.
A correção é aplicada por bloco intercalado, não em conjunto. Um símbolo é dividido em blocos, cada um com o seu próprio orçamento de recuperação. Uma mancha concentrada sobre dois blocos pode esgotá-los enquanto o resto do símbolo fica intocado, com orçamento de sobra.
A medição
Codificamos quatro conteúdos em cada um dos quatro níveis de correção de erros, sobrepusemos um recorte quadrado centralizado, aumentamos o recorte um módulo por vez e tentamos decodificar depois de cada passo. Cada tentativa passou por um modelo de câmera em vez de uma renderização limpa: reduzida a um número fixo de pixels por módulo, desfocada em 0.8px, com ruído gaussiano em σ=6 e comprimida em JPEG com qualidade 70.
Cerca de 5 000 tentativas de decodificação no total. Para uma URL típica de 54 caracteres:
| Correção de erros | Maior logo que ainda é lido | “Recuperação” nominal |
|---|---|---|
| L | 4.3% da área | 7% |
| M | 9.2% | 15% |
| Q | 14.3% | 25% |
| H | 19.3% | 30% |
Mesmo no nível H, no conteúdo mais longo que testamos, o teto foi de 22.4%. Nada do que medimos chegou perto de 30%.
A parte que deveria mudar o jeito como você testa
A correção Reed–Solomon não tem degradação gradual. Em todos os níveis e em todas as resoluções que testamos, um símbolo foi decodificado 100% das vezes até o último módulo suportável, e 0% um módulo depois. Não existe uma faixa em que funciona às vezes.
Isso importa por causa de como as pessoas conferem QR codes: escaneiam com o celular, funciona, mandam para a gráfica. Uma leitura bem-sucedida diz que você está do lado certo do precipício. Não diz nada sobre o quanto você está perto da borda, e a borda é onde uma impressão gasta, o sensor de uma câmera mais barata ou um ângulo mais inclinado jogam você para o outro lado.
Esse é o argumento para calcular a margem em vez de testá-la. O nosso gerador de QR code mostra a proporção do orçamento de correção de erros que um logo está consumindo, para você ver a distância até o precipício em vez de descobri-la depois de uma tiragem.
Mais três resultados que contradizem conselhos comuns
Módulos arredondados e em forma de ponto não custam nada, até cerca de 0.7× do diâmetro. O aviso comum de que módulos arredondados prejudicam a leitura não é sustentado pelo que medimos, desde que os três padrões de localização dos cantos continuem como quadrados sólidos.
Estilizar os padrões de localização é o verdadeiro estrago, e a correção de erros não resolve. Padrões de localização pontilhados tiveram uma taxa de leitura idêntica de 60% em L, M, Q e H. Uma linha plana nos quatro níveis, porque é uma falha de detecção, não de correção: o leitor não consegue localizar o símbolo, então a correção nunca roda. Esse é o argumento mais forte que existe contra o “é só colocar no H que vai dar certo”.
O matiz é irrelevante; só a luminância conta. Verde sobre vermelho, uma combinação que parece obviamente ruim, falhou. Vermelho sobre azul, que parece igualmente estranho, foi lido com confiabilidade. A medida que vale é o Symbol Contrast da ISO/IEC 15415, uma diferença de refletância graduada de A a F, e não uma razão WCAG. O WCAG mede a legibilidade de texto para olhos humanos; o sensor de uma câmera é outro instrumento. A maioria das páginas que respondem “qual contraste um QR code precisa” cita números do WCAG, que é a unidade errada para a pergunta.
A regra de distância 10:1 não tem base
A regra de que a distância de leitura pode ser dez vezes a largura do símbolo aparece em toda parte e não está em nenhuma norma; a ISO/IEC 18004 não define tamanho mínimo de módulo. O que medimos é um limite em pixels de câmera por módulo: abaixo de cerca de 2.5 pixels por módulo, a taxa de leitura despenca, de forma abrupta.
Isso torna a regra errada nos dois sentidos, porque ela ignora a quantidade de módulos. Um código versão 2 e um versão 20 com o mesmo tamanho impresso têm módulos com tamanhos 2.3× diferentes e, portanto, distâncias de leitura muito diferentes. Um número só não descreve os dois.
Vale saber também: os celulares decodificam a partir do fluxo de prévia da câmera, não de uma foto em resolução máxima. Um sensor de 12 megapixels não oferece 12 megapixels para decodificação, e é por isso que a física no papel parece muito mais otimista do que a experiência do dia a dia.
Ressalvas, ditas com clareza
Todas as decodificações acima usaram uma única implementação de decodificador. Ela é mensuravelmente mais tolerante que um verificador de impressão e possivelmente mais tolerante que o celular mediano, então trate esses números como um limite superior, não como garantia. O modelo de orçamento por trás da nossa ferramenta foi colocado de propósito no lado conservador do que medimos: ele prevê o precipício com margem de um módulo e erra para o lado de dizer que um logo está grande demais.
O método, os scripts e os números brutos estão no repositório por trás deste site. Se você repetir isso com outro decodificador e obtiver números diferentes, gostaríamos de saber.