Realidad aumentada en teléfonos móviles con J2ME

by

La Realidad Aumentada consiste básicamente en superponer imágenes sobre otras imágenes, normalmente sobre vídeo. Existen numerosos ejemplos, pero pocos en teléfonos móviles, casi siempre smartphones con Windows Mobiles o Symbian. Apenas hay ejemplos desarrollados para J2me o JavaME, la plataforma java para móviles. Uno de los pocos casos es esta aplicación, que se supone que funciona en algunos móviles, aunque de forma muy lenta.

La cuestión es, es posible hacerlo? En teoría sí, y para ello hace falta lo siguiente:

  • El móvil debe tener cámara y hay que poder acceder a ella para capturar vídeo. Esto es posible si el terminal implementa la API MMAPI (Mobile Media API) o JSR-135. Normalmente, si el móvil tiene cámara y no es de gama demasiado baja, implementará MMAPI. Con esta API se puede capturar vídeo y ponerlo en pantalla sin gran problema, el problema es que todo aquello que quieras dibujar en el canvas se hará detrás del vídeo, por lo que no se verá. Se podríaintentar superponer otro canvas encima del video.
  • Para tener mayor control sobre el vídeo que se reproduce, y ser capaz de pintar sobre el mismo, es necesario que el móvil implemente otra API, la JSR-234 (Advanced Multimedia Supplements API). En esta API, la clase  javax.microedition.amms.control.imageeffect contiene herramientas (interfaz OverlayControl) para insertar imágenes en la trama de vídeo. No es raro encontrar móviles que la implementen, como el Nokia 6110 o el N95, aunque evidentemente no de gama baja.
  • El reconocimiento de marcas es tratamiento gráfico y para ello hace falta capturar tramas y procesarlas. Las tramas pueden capturarse sin gran dificultad, y almacenarse en distintos formatos, aunque dependiendo del móvil se conseguirán capturar más o menos tramas por segundo (fps).

Sin embargo el problema está justo cuando se captura una trama. La primera vez saltará el típico aviso de seguridad al no estar la aplicación digitalmente firmada. El inconveniente está en que en muchos móviles, al menos en el N95 y el 6110, el móvil considera la llamada a VideoControl.getSnapshot() como la petición de hacer una fotografía, por lo que se comporta de forma acorde. Es decir, se congela la imagen y suena la señal de ‘disparo’, con lo que resulta muy complicado conseguir algo que tenga el aspecto de ‘tiempo real’

Tags: , ,

11 Responses to “Realidad aumentada en teléfonos móviles con J2ME”

  1. Jorge Says:

    ¡Muy interesante!

  2. jesus Says:

    En principio suena bien, pero hasta donde yo he probado los resultados son bastante desalentadores. Al comenzar las aplicaciones se desarrollan muy rápido, gracias a la cantidad de objetos ya programados de J2ME, obteniendo por ejemplo un programa que hace fotos en unos minutos, pero en el momento que necesitas algo más… (como tener acceso a una imagen para tratarla) solo puedes utilizar lo ya implementado. Por esto es casi imposible desarrollar cosas nuevas, si no habían sido pensadas por el fabricante a la hora de programar la maquina virtual del teléfono. En el caso de RA la velocidad a la que J2ME proporciona imagenes de la cámara, es en la mayoría de casos insuficiente. Mi consejo, usar el lenguaje nativo del terminal, sobre todo si es Symbian.

  3. Alejandro Says:

    ?como puedo saber si puedo implementar este api en mi celular. Si se puede como hago esto.
    Gracias por su ayuda pues no se nada acerca del tema

  4. Thony Says:

    normalmente, si pude, lo llevara implementado de fabrica, y en caso de que lo hayas adquirido muy pronto, quizas tengas que actualizar el firmware, pero que yo sepa no se actualiza ni se implementan las apis por separado

  5. José Luis Says:

    Interesante lo de la API 234. Lo investigaré porque justamente para el proyecto que tenemos ahora en el trabajo puede venir bien.
    De todas formas, a medida que voy sabiendo más cosas de Java ME más veo las limitaciones que tiene. Por ejemplo, la velocidad en móviles Symbian es ridícula; en cambio, con un Sony Ericsson hay cosas que ni se ven de lo rápido que se ejecutan. Luego, como los estándares no son obligatorios en la mayoría de las API, cada fabricante implementa las cosas que les da la gana y como quieren… Y los desarrolladores a comernos la cabeza de porqué un método devuelve siempre -1…

    Alejandro, igual llego un poco tarde por la fecha del post, pero para ver si implementa o no un API se usa System.getProperty(key) donde key es el String que identifica al API. Aquí hay algunos ejemplos: http://developers.sun.com/mobility/midp/questions/properties/index.html
    En el caso del 234, por lo que he visto será System.getProperty(“microedition.amms.version”) que devuelve una cadena si la implementa o null en caso contrario.

  6. jtellez Says:

    Para ver si una API está soportada por un terminal se puede ver en la página del fabricante (Nokia da información aceptablemente detallada en forum.nokia.com) o hacer como dice José Luis.

    El tema de las APIs también es interesante, porque cada fabricante pasa los test de conformidad de Sun, pero las implementaciones concretas varían entre modelos distintos.

    Una forma “posible” de hacer AR en J2ME es combinar Java con Symbian. En symbian montas un servidor socket que captura imágenes y las va sirviendo a un Midlet cliente, que se encarga de procesar la imagen, poner gráficos sobre ella y presentarla en pantalla.

    Habría que ver cómo se comportaría en este caso el N97 de Nokia, o el nuevo Toshiba a 1GHz.

  7. José Luis Says:

    No lo había pensado, la verdad es que parece una buena opción. El único problema es que hay que meterse con programación dependiente del terminal, pero claro, es la única forma de ganar en potencia de la aplicación. El N97 no tiene mala pinta dentro de lo que cabe, pero me da a mí que Symbian adolece de problemas de base que podrían eliminar cambiando o reprogramando el SO. A ver si ahora que lo han hecho libre lo consiguen evolucionar mejor.

  8. IBOTK Says:

    Hola que tal, yo estoy tratando de hacer una captura de la pantalla del celular con j2me, hasta el momento no he encontrado información referente a la captura de la pantalla del celular. lo que quiero hacer es capturar la pantalla del celular dentro de una aplicacion en el celular y despues convertirla en un formato de imagen. Todo esto con j2me, no se si exista algun api o algo parecido para hacer esto…espero y me puedan orientar gracias

  9. jtellez Says:

    En J2ME no tienes acceso al buffer de pantalla, así que no puedes. Con Symbian sí podrías: haces un Midlet que llame a la aplicación symbian que captura la pantalla para que le devuelva la imagen.

    Un ejemplo de código symbian que hace eso: http://sourceforge.net/projects/screenshot-sos/

    Otra cosa es si quieres capturar un pantallazo de tu propia aplicación (MIDlet), y usas Canvas. Si es así implementas onDraw(canvas) y accedes a la trama directamente.

    Saludos

  10. Java en los Dispositivos Móviles | πPol de la esPol Says:

    […] 1, 2, 3, 4, […]

  11. Maria Says:

    Hola!
    Reconozco ees la unica veez que he llegado este itio y quiero
    comentar que esra bastante bien y posiblemente vendre mas frecuentemente por los comentarios.
    😉

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: