← Back to team overview

tagin-devel team mailing list archive

Re: Preparing fingerprinting code

 

Hola All,

  Done! I have created a series at:
https://launchpad.net/tagin/android-sdk

you can pull the code from there if you are interested in trying it out. The series should evolve into a SDK for creating location-based Android applications that work indoors. I will continue to maintain and document this series with the objective of facilitating third-party application development (including the geocaching game planned for the Google Summer of Code).

The code includes an activity with two buttons at the top: "Fingerprint" and "Snapshot". The fingerprint button will collect a new fingerprint and dump it to a text view below. The "snapshot" button will take a snapshot of the current fingerprint for reference in subsequent comparisons.

  *How to test*
  Preferably install on an actual device since the emulator won't cut it.

FIrst open the "tagin! Fingerprinter" app... it should collect a fingerprint as soon as you open it. Take a few more fingerprints just so you see how the WiFi patterns change. In the text dump you will see three comma separated values: BSSID, RSSI, Rank. The BSSID is the mac address of an observed access point, the RSSI is the signal strength in dBm, and the Rank is a number between 0 and 1 representing the RSSI (1 being the strongest/highest RSSI ever recorded). The rank normalizes the RSSI and it is meant to account for differences in how different handsets measure strength since there is no standard. If you are interested in learning how the rank is calculated, just look at the getRanks() method in the Fingerprint class.

The snapshot button will make a copy of the current fingerprint and dump it into another text view with the header "SNAPSHOT". If you get another fingerprint after you have created a snapshot, the "Rank distance" between your fingerprint and the snapshot will be calculated and reported. The Rank distance is again a number between 0 and 1 where 0 means no difference (i.e., both fingerprints are identical) and 1 means no similarity (i.e., fingerprints don't share a single access point). If you take a snapshot and stay still, you should get a number between 0 and 0.25. Anything between 0.25 and 0.5 usually means you moved but you may still be in the same room, and anything above 0.5 typically means you are close but not in the same room. If you get 1 then you could be around the building, but you could also be in a different country!

I would be interested in knowing what ranges you get when you walk around the same room and when you go outside the room just to see if it is the same I am getting. Maybe I'll put your data on the wiki to have a preliminary reference.

If you have some basic idea of AI and/or machine learning, I hope you could already imagine how you could use the Rank distance to quickly put together an application using a simple approach like nearest neighbours or similar, so do play around with it.

That is is for now... if you have any questions, comments, suggestions, please reply to the thread.

cheers!
Jorge

On 11-04-10 03:58 PM, Jorge Silva wrote:
Hola all,

   I have been working on upgrading the fingerprinting code for tagin! in
anticipation of the re-write of the engine that we will be completed as
part of the Google Summer of Code. This is just to let everybody know
that I will be pushing this code soon (hopefully later today).

   The code will be in the form of a bunch of classes and a very
rudimentary activity that will show how fingerprinting works, what it
does and how it can be used to differentiate between distinct locations
indoors. Initially there will not be much documentation but I hope to
focus a bit more on that in the coming days (with your help).

   Let me know if you have any comments. I will follow up on this thread
once I push the code online.

cheers!
Jorge



Follow ups

References