[PHP5] – Barco Project: Un proyecto sobre barcodes y QRCode

En el día de hoy (30. sep. 2009) nace Barco Project como una iniciativa de integrar bajo una misma API todo el proceso de generar y analizar (escanear) variados tipos de Codigos de Barra y Códigos 2D; esto integra la posibilidad de con una misma API, generar:

  • Code39 (Code 3 to 9)
  • EAN 128
  • UPC
  • UPCS (US Postal Code)
  • Codabar
  • UPCa
  • Code128
  • QRCode
  • ISBN

Además incluirá la posibilidad de “analizar” un PNG generado para “reconocer” el contenido de algunos códigos de barra arriba mencionados.

El proyecto se encuentra en fase de “alpha release” y actualmente solo ha sido “portado” el código para generar QRCode.

Qué es QRCode?:

Según la Wikipedia un QRCode es: “Un QRCode (Quick Response Barcode) es un sistema para almacenar información en una matriz de puntos o un código de barras bidimensional creado por la compañía japonesa Denso-Wave en 1994; se caracterizan por los tres cuadrados que se encuentran en las esquinas y que permiten detectar la posición del código al lector. La sigla “QR” se derivó de la frase inglesa “Quick Response” pues el creador aspiraba a que el código permitiera que su contenido se leyera a alta velocidad. Los códigos QR son muy comunes en Japón y de hecho son el código bidimensional más popular en ese país.” (fuente: wikipedia).

Acá un ejemplo de código QR:

Y qué tiene de intersante QR?

QRcode es de muchisima popularidad en japón, esto es debido a que mientras el resto de los códigos de barra requieren la detección de “espacios y llenos” utilizando un láser; QRCode usa un patrón de cuadrados (dot-matrix) que representan los datos (en 2 dimensiones, ancho y alto) y los “cuadrados marca” sirven para que cualquier lectór óptico reconozca donde empieza y termina “el código” (entiendase por cualquier lector a cámaras digitales y otros dispositivos ópticos).

Además QR es un proyecto de “código abierto”; desarrollado por Densa-wave (una filial de Toyota) para el inventario de repuestos de vehículos; sin embargo, tras la liberación de patentes (royalty-free) hecha en 1999 y su correspondiente estandarización como norma ISO-IEC (ISO/IEC18004) en 2000 ha permitido a mucha gente desarrollar aplicaciones para QR.

Y como ha ganado tanta popularidad?

QR viene en patrones fijos de 1 a 40 cuadros, pudiendo albergar hasta 7000 carácteres, como es posible guardar tal cantidad de información y como es posible “escanearlo” con cualquier cámara óptica (además es completamente libre hacerlo), pues 2+2!, a mucha gente en Japón se les ocurrió “incorporar” lectores de QR en sus respectivos celulares, esto fue ganando popularidad hasta el punto que en japón la gente coloca su QR informativo en el reverso de las tarjetas de presentación y hasta la información de ubicación en las revistas viene en códigos QR (ahorras espacio de publicación).

Nokia tiene su aplicación “oficial” para QRCode y Datamatrix para todos sus dispositivos serie N (aunque funciona en mi Nokia 5800 XpressMusic) acá:

http://mobilecodes.nokia.com/

Acá hay alguien que habla de una aplicación para Blackberry para analizar QRcodes:

http://www.enriquedominguez.com/leyendo-qr-codes-desde-la-blackberry/

iMatrix es la aplicación “oficial” del Iphone para leer QRCodes:

http://www.qrcode.es/?p=244&language=es

Por lo que un QRCode generado ya casi cualquier persona (que tenga cámara digital en el celular + el software) lo puede leer.

Montandose en el barco de Barco Project

Barco Project surge como una iniciativa personal de integrar dentro de una única librería todo lo necesario para generar diversos tipos de barcodes; realmente todo surge como la posibilidad de cumplir con la ordenanza de la Providencia 939 del SENIAT (Organismo tributario Venezolano) que indica que para las facturas electrónicas impresas en formas libres; se sugiere agregar el código de barra para identificar la factura y algún medio electrónico de identificación automatizado del cliente (nombre, RIF: Registro de Información Fiscal).

Para ambas cosas, que mejor que combinar Code39 (factura), UPC (Inventario) y QRCode (identificación)?.

En mi investigación, determiné que el único script “viable” para QRCode en PHP que existía estaba en Japones y solamente funcionaba en CGI (es una pagina web que te pide todos los parámetros como URL encode data); esto dista mucho de la practicidad de contar con un objeto parametrizable que permita a distintas aplicaciones generar códigos QR.

Barco::QR

Con Barco::QR un programador de aplicaciones puede generar códigos QR con la simplicidad de un código PHP; veamos un ejemplo:

Primero, inicializamos la librería barco:

require 'barco/barco.inc.php';
#Inicializamos Barco:
barco::init();

Esta línea, me permite solicitar un generador de códigos QR (Quick Response):

$qr = barco::generate('qr');

La gran mayoría de los parámetros vienen por defecto, el único valor obligatorio es los datos que debemos agregar:

#defino la data y el modo de correccion ECC;
$qr->data('Esta es una prueba de Encoding usando QRcode')->ecc('M')->size('10');

ECC es el módo de corrección de errores, QR cuenta con 4 modos (‘M’, Q, L y H) (esto es opcional: por defecto siempre es M).

El Tamaño (size) define las dimensiones máximas del QR, desde 1 (max: 35 caracteres) hasta 40 (max: 7000).

Nota: intentar crear un QR más pequeño que la cantidad de datos genera error, aunque espero “mejorar” ese comportamiento al tratar de determinar el tamaño óptimo para la longitud de los datos requeridos.

Ahora, simplemente generamos el código QR:

if($qr->generate()) {
 $qr->image('png');
}

QR puede emitir el código como un RAW de bytes de imagen (útil para almacenar en una DB) o en forma de una imágen para salida por navegador, también pueden almacenarlo con un nombre a un archivo, escogiendo claro está, si lo desean jpeg o png.

El código generado por este ejemplo es:

Esta es una prueba de Encoding usando QRcode

Esta es una prueba de Encoding usando QRcode (10x10)

Como indiqué el proyecto se encuentra en fase “pre-alpha” y ya genera códigos QR (a diferentes dimensiones), próximamente incorporaré Code39, UPC y DataMatrix como principales algorítmos de códigos de barra.

Tambien incorporaré un lector-analizador (usando imagemagick) de códigos de barra para que puedan “probar” los códigos generados en ausencia de un scanner.

Los Códigos QR generados por el proyecto han sido probados con mobilecodes de Nokia y con QuickMark para HTC (espero más gente los pruebe).

Esperen más noticias de este proyecto!.

Nota: próximamente incorporaré un servicio gratuito de generación de QRCodes para personas que solo deseen tener un QR y no tengan tiempo (o no sepan) programar; esperalo!.

Acerca de phenobarbital

http://about.me/phenobarbital

Publicado el 30 septiembre 2009 en Cultura Libre, Linux, PHP, PlanetaLinux, Programacion y etiquetado en , , , , , , , , , , , . Guarda el enlace permanente. 18 comentarios.

  1. No se porque dices que la libreria existente esta en japonés, basta con abrirla para darte cuenta que el autor la programó en inglés. De echo, la pagina tiene una versión en inglés donde explica todo el algoritmo para elaborar la imagen. Yo mismo, en un sistema de inventarios muy básico que estoy desarrollando pense en usar la misma libreria mas unas muy buenas que estan en phpclasses.org que son para casi todos los códigos de una dimensión.

    Tampoco entiendo a que te refieres con lo de CGI, lo unico que observo es el la libreria no es una clase, por lo cual tiene sus desventajas, no veo la dificultad de hacer una clase. Supongo que te refieres a la parte del Content Header y eso, la verdad no la he revisado mucho, pero si logras adelantar algo, pues publicalo con su respectiva GPL y asi la reinmplemento en el FrameWork en que estoy trabajando.

    • Bueno, la página original está en japonés y la única implementación viable es un servidor que corre PHP en modo CGI y el script es un script como tu dices; procedural, que recibe todos los parámetros via GET, lo cual no es muy útil para implementaciones serias; pero leyendo las especificaciones (que si están en inglés) es fácil (de hecho, ya está hecho) hacer una implementación via objetos de ese módulo (de hecho, fue bastante fácil)…
      El ejemplo que está en la página es 100% viable y programable con la clase (y si, es GPL); el objeto es independiente y tiene su propio archivo de configuración. revísalo y me avisas …

  2. Saludos doña ¿como está? llegué a este post de casualidad, ando buscando una manera de “leer” con una webcam los QR pero para debian, porque me gustaría implementarlos en una carnetización que se va a hacer; hasta el momento sólo he conseguido una GUI para win; en debian conseguí unos paquetes que estan en CLI; el qrencode que me genera los QR y otra librería llamada libdecodeqr; la cual si le paso una imagen .jpg o .png me lee los datos; Pero si intento hacerlo desde la cámara no hace nada, ¿me puede usted echar una mano? por favor

    • Hay una forma de usar una librería (pero no en PHP sino en python) que permite “ver lo que está trayendo” la webcam, fijar el QR code, generar de esa toma un PNG y luego entregarlo a la interfaz para python de la librería libdecodeqr.
      De hecho, uso libdecodeqr para decodificar un PNG a datos, solo falta la parte de la webcam.
      Claro que te puedo ayudar en esa! …
      Saludos!

  3. Saludos
    estoy investigando sobre el QRCODE, y deseo hacer una prueba, si tienes algun codigo donde lo pueda descargar para empezar a probarlo en mi server local, te lo agradesere. es decir estoy hacindo una BD local y quiero generar un QRCode a partir de los datos que tengo en mi BD, y enviar el QRCODE (en formato .png o .jpg a un celular)
    te agradesere el comentario el aporte y/o la ayuda

    saludos
    Roger

    • Pues el código de la clase que genera QRCode para PHP está en el enlace que lleva a Barco Project y además está en google code, revisa ese enlace y te descargas el código.
      Y la explicación de como se implementa está acá mismo …

  4. Hola interesante tu articulo…necesito para un proyecto trabajar con un generador… es posible que trabaje con php…podrias por favor suministrarme mas información al respecto

  5. HI.
    Una pregunta sabes o podrías orientarme de alguna forma para leer el QR-Code con la webcam y un un script php interprete la información.
    En si lo que quiero hacer es una credencial con el QR-Code impreso al llegar a la oficina pasa su credencial frente a la webcam y esta lleva a una url que posesa la entrada.
    Quisiera que todo esto funcione en un servidor web para evitar tener que instalar algun software en una computadora.

    Gracias de antemano y buena suerte.

    • El código QR puede ser interpretado como cualquier imagen PNG a través de OCR, hacer que una aplicación web acceda a la webcam es *creo* lo más complicado acá (bueno, podrías usar algo como Flash para acceder vía permiso a la misma), a partir de allí, la imagen PNG generada y transmitida a tu servidor puede ser “descifrada” usando algún algoritmo de “decoding” de QR en el lenguaje de tu preferencia.
      Yo uso para ello pyqrcode > http://pyqrcode.sourceforge.net/

  6. Hola como está Phenobarbital no se si ha usado el Zbar, esta es una aplicación que permite leer código de barras y QR con la webcam aquí la info http://www.tuxbrain.com/content/c%C3%B3digos-de-barras-webcam-cualquier-aplicacion
    aunque yo no logre poder leer el código

    • Hola, no lo he intentado, revisaré la aplicación, con HTML5 sería genial y muy sencillo extraer la imagen del flujo de video y para hacer el parser de un png > codigo de barras es un análisis de la imagen, tengo por ahí el código pero no lo he probado …

  7. No me deja descargarlo, ¿puedes subirlo de nuevo, por favor?
    Muchas gracias.
    Saludos.

    • Está en google code, pero estaré actualizando para una última versión de PHP en los próximos días, te aviso por esta vía …

      • Vale, muchas gracias, es que en Google Code, no hay nada en la parte de descargas, y hay partes del código que no deja ver, por eso decía lo de que no deja descargar, pero estaré atento a tu aviso para descargarlo, porque me interesa mucho…
        Gracias.

  8. Interesante articulo, en http://movilqr.com hemos creado una aplicación online para la creación y seguimiento de campañas con códigos QR

  9. Jhonny Ortiz Lizcano

    Hola amigo muy interesante tu articulo, una pregunta es posible insertar imágenes en el Código QR ?? Tienes algun ejemplo en PHP que me pudiera servir?? Seria de mucha ayuda muchas gracias espero tus comentarios.

  1. Pingback: PHP5-Barco-Project-Un-proyecto-sobre-barcodes-y-QRCode : Sysmaya

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: