Notas de campoCódigo de barras de color de alta capacidad

Gavin Jancke

Todos estamos tan familiarizados con los códigos de barras que a menudo pasan inadvertidos; son casi omnipresentes en la vida cotidiana y aparecen por todas partes, desde el empaquetado de alimentos hasta en las etiquetas de envío. Los códigos de barras 1D originales que aparecían en el sector de la venta al por menor en 1974 comprendían barras verticales de ancho variable y almacenaban un número de 12 dígitos. Los códigos de barras evolucionaron conforme aumentaban las capacidades informáticas y en los últimos años de la década de los 80 se desarrollaron los códigos de barras 2D en blanco y negro (códigos matriciales), marcando un aumento en la densidad de datos desde tan solo unos pocos dígitos a varios cientos de bytes.

En 2003 comencé a trabajar en una tarjeta de identificación biométrica a prueba de falsificaciones para un proyecto de Microsoft Research. No sólo necesitaba almacenar el texto cifrado, como el nombre y la edad, sino también las huellas dactilares o las plantillas de digitalización del iris. Para almacenar todos los datos necesarios, el código de barras en blanco y negro existente habría sido mayor que la propia tarjeta de identificación, por lo que era evidente que se necesitaba un enfoque nuevo.

Tenía que determinar cómo almacenar más de un bit de información por símbolo, lo que había sido el estándar para los códigos de barras 2D en blanco y negro. Usando colores en lugar del blanco y negro, podría aumentarlo a dos o tres bits de datos con cuatro y ocho colores, respectivamente.

También experimenté con las formas del símbolo para ver si se podrían incluir juntos de forma más estrecha sin poner en peligro su registro al digitalizarlos. Inicialmente los hexágonos parecían una buena posibilidad pero las formas se entremezclaban y el equipo informático no las podía distinguir con suficiente claridad.

Me decidí finalmente por los triángulos porque forman una intersección perfecta en un espacio comprimido, a la vez que conservan su identidad como formas diferenciadas. Al usar filas de triángulos de varios colores, pude aumentar la capacidad de densidad en 3D.

janke.fieldnotes.gif

Hubo muchos factores con los que me tuve que enfrentar. Uno de los mayores desafíos de trabajar con color es la desviación en las especificaciones de impresión y en las condiciones de iluminación. Aunque el color se puede distinguir fácilmente por el ojo humano (al menos por los usuarios que no son daltónicos), esto no resulta tan sencillo para un equipo.

Para garantizar que el software pudiera leer el color de manera precisa usé diferentes enfoques. Creé una paleta muy pequeña, casi imperceptible, dentro del código de barras con los colores de referencia que existían en el código de barras real. Esto proporcionó un mecanismo de calibración que especificaba exactamente lo que constituye un rojo en concreto, por ejemplo. También probé técnicas más avanzadas como algoritmos de agrupamiento por colores ligeros y personalizados que aprovechan la teoría del espacio para clasificar los colores en conjuntos. Ambos enfoques funcionan igualmente bien y se complementan.

Uno de mis objetivos para este proyecto fue escribir un programa que habilitara a los teléfonos móviles para leer los códigos de barras. Con los teléfonos móviles, hay que tener en cuenta la escasa iluminación y las lentes fijas, de longitud focal y desenfocadas. Un desafío adicional fue hacer toda esta visión de equipo en las CPU de teléfonos móviles relativamente lentas, basadas en enteros, de manera que el equipo del proyecto tuvo que proponer una teoría sólida sobre cómo detectar el código de barras en la imagen al tocar tan pocos píxeles como fuera posible. La digitalización tenía que funcionar dentro de un intervalo de calidad de lectura, como, por ejemplo, desde el enfoque brillante de los paneles LCD hasta una impresión física desenfocada y con poca iluminación.

El algoritmo final descodifica imágenes de código de barras en fotogramas de vídeo de cámara en tiempo real con mayor rapidez que la velocidad de fotogramas real: cerca de 10 m en una CPU de 200 Mhz. En una imagen, el número más pequeño de píxeles que un código de barras puede tener para la carga de datos más pequeña y que aún se puede detectar es de casi 45 píxeles cuadrados.

La realización de todo este trabajo junto con el perfeccionamiento del mismo bajo distintas condiciones llevó más de dos años. Recientemente se ha concedido la licencia de esta tecnología a terceros y, más adelante, este año, habrá algunas interesantes aplicaciones creadas a partir de ella.

Gavin Jancke, director de ingeniería para Microsoft Research, dirige los equipos del grupo de desarrollo avanzado y experiencia web. Anteriormente trabajó como ingeniero de soporte técnico, ingeniero de software para SQL Server y fue consultor técnico ejecutivo de Bill Gates.