tagin-devel team mailing list archive
-
tagin-devel team
-
Mailing list archive
-
Message #00002
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