Anotações de campoCódigo de barra colorido de alta capacidade

Gavin Jancke

Estamos todos tão familiarizados com códigos de barra que eles muitas vezes passam despercebidos — são quase onipresentes na vida diária, aparecendo em todos os lugares de embalagens de produtos a etiquetas de transporte. Os códigos barra originais unidimensionais que apareceram na indústria do varejo em 1974 compreendiam barras verticais de larguras variáveis e armazenavam um número de 12 dígitos. Os códigos de barra se desenvolveram à medida que a eficiência da computação aumentou e códigos de barra bidimensionais em preto-e branco (códigos de matriz) foram desenvolvidos no final dos anos 80, marcando o aumento na densidade de dados de apenas alguns dígitos a algumas centenas de bytes.

Em 2003, comecei a trabalhar em uma placa de identificação biométrica à prova de falsificações como um projeto para a Divisão de Pesquisa da Microsoft. Eu precisava armazenar não apenas o texto criptográfico, como nome e idade, mas também modelos de escaneamento da íris ou leitura de impressão digital. Para armazenar todos os dados necessários, o código de barra existente em preto-e-branco teria sido maior que a própria placa de identificação, então claramente uma nova abordagem era necessária.

Eu precisava determinar como armazenar mais de um bit de informações por símbolo, o que era o padrão para códigos de barra bidimensionais em preto-e-branco. Usando cores, em vez do preto-e-branco, eu poderia aumentar isso para dois ou três bits de dados usando quatro e oito cores, respectivamente.

Também experimentei com as formas de símbolos para ver se elas poderiam ser empacotadas juntas mais firmemente sem comprometer seu registro ao serem escaneadas. Inicialmente, hexágonos pareciam uma boa possibilidade, mas as formas se fundiam e o computador não conseguia discerni-las de modo claro o suficiente.

Finalmente, eu me decidi por triângulos porque eles se cruzam de modo organizado em um espaço compactado, mas mantêm sua identidade como formas distintas. Ao usar linhas de triângulos em várias cores, eu poderia aumentar o recurso de densidade em 3D.

janke.fieldnotes.gif

Havia muitas variáveis com as quais argumentar. Um dos maiores desafios de se trabalhar com cores é a variação nas especificações de impressão e nas condições de iluminação. Embora as cores possam ser facilmente discerníveis para o olho humano (pelo menos para os que não são daltônicos), elas não são tão claramente discerníveis para um computador.

Usei várias abordagens diferentes para garantir que o software poderia ler as cores com precisão. Criei uma paleta muito pequena, quase imperceptível no código de barras que continha as cores de referência que existiam no código de barras real. Isso proporcionou um mecanismo de calibração que especificava exatamente o que constitui um determinado vermelho, por exemplo. Também tentei técnicas mais avançadas, como algoritmos de agrupamento de cores simples e personalizadas que aproveitam a teoria de espaço de cores para categorizar as cores em conjuntos. As duas abordagens funcionam igualmente bem e se complementam.

Um dos meus objetivos para esse projeto era escrever um programa que permitiria a telefones celulares lerem os códigos de barra. Com os celulares, deve-se considerar a iluminação ruim e as lentes fora de foco, fixas, de tamanho focal. Um desafio adicional era executar toda essa visão do computador em CPUs de celulares relativamente lentas, baseadas em inteiros. Então a equipe precisava apresentar uma teoria um tanto sólida sobre como detectar o código de barra na imagem, tocando o menor número possível de pixels. O escaneamento precisava funcionar dentro de um intervalo de qualidades de leitura, como painéis LCD claros em foco a impressão física fora de foco com pouca iluminação.

O algoritmo final decodifica as imagens do código de barra em quadros de vídeo de câmera em tempo real mais rapidamente do que a taxa de quadros real — aproximadamente 10 ms em uma CPU de 200 Mhz. Em uma imagem, o menor número de pixels que um código de barra pode ter para a menor carga de dados, e ainda ser detectado, é de aproximadamente 45 pixels quadrados.

Todo esse trabalho, sob condições variáveis, levou mais de dois anos para ser refinado. Essa tecnologia foi recentemente licenciada a terceiros e, no final desse ano, haverá alguns aplicativos interessantes provenientes dela.

Gavin Jancke, diretor de engenharia da Divisão de Pesquisa da Microsoft, conduz as equipes de Grupo de Desenvolvimento Avançado e Experiência da Web. Anteriormente, ele trabalhou como engenheiro de suporte a produtos, engenheiro de software do SQL Server e trabalhou na equipe de consultoria técnica-executiva do Bill Gates.