Archive for android

AR LibreGeoSocial: Comparing images and anchoring virtual information

Recently, we have added a new feature to LibreGeoSocial platform to extend the usability of our MAR (Mobile Augmented Reality) engine. We can sub-divide this feature in two sub-features. The first one analize and compare the images to find similar image. Using SURF technologies we can obtain several key points of the image that are distinctives and relevants. These points are invariant to the size, orientation or rotation, so the algorithm can find the original image although the image taken has not the same size, orientation or rotation. The second feature shown in the video is the possibility to anchor virtual images on a real picture. The image is analyzed in the mobile itself and looking for ways similar to a picture or photograph (like square or rectangle). This analysis is done in real time and keeps the tracking of the geometry shape to anchor the virtual information on real information.

Currently, we are studying new ways to analize and compare thousand the images in a small time. 

This system has multiple uses in tourism, museums, publicity, online publicity and other sectors where it is your imagination :-)The video shown all these features in action. Remember activate the subtitles to get more information about the system.

 

 

Leave a Comment

LibreGeoSocial 1.1

It’s a pleasure to communicate you that LibreGeoSocial 1.1 is available in the Android Market. I appreciate the efforts made by the development team to get this milestone, thank you very much to all developers team. Remember, LibreGeoSocial is a new FLOSS (Free, Open Source) mobile social network with a Mobile Augmented Reality interface 

 null              null 
 
 Release Notes:

  • Improved augmented reality interface (AR)
  • AR navigation with gestures
  • Added Youtube Channel
  • All the contents are organized with layers/channels
  • The applications allows the anonymous access
  • The user has a virtual layer where can see all his contents
  • The contents can be temporary, with begin and end date
  • Refactor API rest in server
  • Many bugs resolved about usability

 

Download LibreGeoSocial from Market:
 
null
 

Comments (1)

Mobile World Congress 2010

One month ago I have attended Mobile World Congress at Barcelona.

We have presented LibreGeoSocial in Augmented Reality ShowRoom organize by Christine Perley. There was very interesting enterprises in this ShowRoom, such as: Layer, Google, BBC, Wikitude, TID and others. Several ideas and brain storming about has been presented in this event.

At the close of the event, we have celebrated a demo session in the Mobile World Congress. Thanks to our poster, many people have come to ask for LGS :-) It was a great idea!

rromanrocapal

LGS Poster

Leave a Comment

Connecting Android to JDEROBOT through ICE

Today, it seem impossible that we can’t control anything from our mobile device. I’m using JDEROBOT software to create a video-surveillance system based in software libre and low cost hardware.

A good feature for this system is the total control from the mobile device. In this case, we use a Android device (HTC Magic) and our problem is connect both systems: JDEROBOT (linux) and SecurityApp (Android). There are many options for this as: rpc, webservice (xml+soap) or some distributed framework. We opted for ICE (Internet Communications Engine) that is a distributed system based in definition of interfaces language.

“The Internet Communications Engine (Ice) is a modern object-oriented toolkit that enables you to build distributed applications with minimal effort. Ice allows you to focus your efforts on your application logic, and it takes care of all interactions with low-level network programming interfaces. With Ice, there is no need to worry about details such as opening network connections, serializing and deserializing data for network transmission, or retrying failed connection attempts (to name but a few of dozens of such low-level details).”

· The Android/Java Code: We try show the image captured by webcam in the Android mobile.

 Ice.Communicator communicator = Ice.Util.initialize();
 Ice.ObjectPrx base =
     communicator.stringToProxy("varcolorA:tcp -h 193.147.51.113 -p 9999");

 // Varcolor and Image are interfaces defined by us.
 if (base == null)
    Log.e("Main","Could not create proxy");
 else
 {
     VarColorPrx vprx = VarColorPrxHelper.checkedCast(base);
    if (vprx != null) {
        ImageData image;
        image = vprx.getData();

        // In image variable we obtain the image data.
    }
 }

Easy, right? ;-)

· The Result: The next photo shows how the android mobile can show the image captured by webcam. The webcam is connected to laptop where JDEROBOT is running.

Test Android-JDEROBOT-ICE

Test Android-JDEROBOT-ICE

Leave a Comment

Android: Oportunidad gracias a las licencias libres

Android es el nuevo sistema operativo para móviles que recientemente ha sacado Google. Quizá una de las características más importantes es que este sistema operativo es libre (bajo licencia Apache 2.0) y utilizar un kernel Linux 2.6.26.

Que Google haya decidido licenciar bajo Apache este sistema operativo no es casualidad, ni un gesto a los demás para demostrar que está apoyando el software libre (que también!). El modelo de negocio quizá no esté tan claro, y quizá incluso tampoco lo necesite tenerlo claro Google. Como muchos otros proyectos, Google ha utilizado licencias libres en su software e implícitamente ésto le ofrece una oportunidad de posicionarse y de tener un valor añadido con respecto a sus competidores en el sector competitivo de los móviles. Android e iPhone corren en hardware relativamente parecidos, y técnicamente pueden llegar a ser muy similares. Eso si, la gran diferencia, y lo que hará que empresas y usuarios se decidan por uno o por otro, es que uno es software libre (Android) y el otro software privativo (iPhone).

Utilizar licencias libres en los proyectos puede dar en muchas ocasiones una oportunidad de posicionamiento y sobrepasar a tus competidores, siempre y cuando en el mercado donde se mueva dicho proyecto, tanto empresas como usuarios finales, tengan cierto conocimiento sobre software y licencias libres.

Comments (1)

Android: TimerTask y GUI

Voy a retomar después de meses el blog, a ver si consigo documentar cada problema que me encuentro mientras programo con Android.

Hoy me he topado con un problema típico cuando programas con GUI gráfica, y es que muchas veces necesitamos actualizar o interactuar con la interfaz gráfica desde un thread que no es el principal, en jerga de Android: cuando queremos modificar el GUI de una Actividad desde otro thread. Concretamente en este caso, necesito que una tarea periódica (thread) muestre un pop-up en la interfaz (actividad) informando que está buscando señal GPS.

Lo primero es saber como ejecutar un método periódicamente en Android. Para ello podemos utilizar la clase nativa de Java llamada TimerTask. Podemos configurar el delay (de la primera ejecución) y el periodo(de la siguientes ejecuciones). Si desde el método run de esta TimerTask intentamos modificar cualquier cosa relacionado con la interfaz gráfica que se ejecuta en el thread principal, veremos como la aplicación se queda congelada, o simplemente muestra un error indicando que sólo se puede acceder a la interfaz desde el thread principal (actividad).

A continuación os dejo el código de cómo configurar y crear una TimerTask (intentad obviar la línea en negrita, que posteriormente explicaremos):

private void launchTask()
{
  int delay = 1000; // delay for 1 seconds
  int period = 120000; // repeat every 2minutes

  mTimer = new Timer();
  mTimer.scheduleAtFixedRate(new TimerTask() {
    public void run() {
      handler_ProgressDiaglog.sendEmptyMessage(0);
    }
  }, delay, period);
}

La línea que aparece en negrita en el cuerpo del método run, es la clave para la solución de nuestro problema. Básicamente lo que implementa por debajo es un paso de mensajes entre threads y que Java nos lo abstrae con la clase Handler(). Para que a nuestro thread principal (que tiene acceso al GUI) le llegue el mensaje que genera la TimerTask, tenemos que crear un atributo privado de tipo Handler. A continuación os dejo el código del Handler:

private Handler handler_ProgressDiaglog = new Handler() {
  @Override
  public void handleMessage(Message msg) {

    // We can modify the GUI here.

  }
};

NOTA: Es posible que un mismo handler recoga más de 1 mensaje, por lo que no es necesario crear un handler por mensaje que queramos transmitir. En nuestro caso, no nos interesa un mensaje en concreto, nada más que nos avise cuando la TimerTask ejecute.

Espero que os siva de ayuda esta recetilla de cómo solucionar en Android un problema típico que se da cuando queremos acceder al GUI desde un thread, que no es el principal.

Leave a Comment