|
|
pl:dydaktyka:aml:lab5 [2017/07/17 10:08] 127.0.0.1 edycja zewnętrzna |
pl:dydaktyka:aml:lab5 [2019/06/27 15:50] |
====== Wykrywanie aktywności użytkownika ====== | |
| |
===== Octave ===== | |
| |
==== Analiza danych ==== | |
Napisz program zapisujący dane z akcelerometru do bazy SQLite. | |
Aby zapisać bazę danych w pamięci urządzenia, wykorzystaj poniższy kod. | |
* Pamiętaj żeby dodać odpowiednie ''uses-permission'' do manifestu | |
* Jeśli z poziomu systemu operacyjnego nie będzie dostępu do pamięci urządzenia, spróbuj zapisać bazę danych w katalogu ze zdjęciami i np. wysłać ją sobie z telefonu mailem. | |
| |
Ustalmy że: | |
* Baza danych będzie nazywać się **acc**, tabela przechowująca dane, również **acc** | |
* Będzie zawierać 4 kolumny: **id, acc_x, acc_y, acc_z** | |
| |
<code java> | |
try { | |
File sd = Environment.getExternalStorageDirectory(); | |
File data = Environment.getDataDirectory(); | |
| |
if (sd.canWrite()) { | |
String currentDBPath = "//data//" + context.getApplicationContext().getPackageName() + "//databases//" | |
+ DataBaseHelper.DATABASE_NAME; | |
String backupDBPath = DataBaseHelper.DATABASE_NAME; | |
File currentDB = new File(data, currentDBPath); | |
File backupDB = new File(sd, backupDBPath); | |
| |
FileChannel src = new FileInputStream(currentDB).getChannel(); | |
FileChannel dst = new FileOutputStream(backupDB).getChannel(); | |
dst.transferFrom(src, 0, src.size()); | |
src.close(); | |
dst.close(); | |
} | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
</code> | |
| |
=== Import do Octave === | |
- Zaimportuj dane z odczytów do Octave: | |
* W tym celu otwórz bazę danych w SQLite: <code bash>sqlite3 acc.db</code> | |
* Ustaw separator danych na tabulator <code sqlite>.mode tabs </code> | |
* Ustaw wyjscie z SQLite do pliku: <code sqlite>.output 'dane.dat'</code> | |
* Wrzuć dane z trzech osi do pliku: <code sql> select acc_x, acc_y, acc_z from acc;</code> | |
- Następnie otwórz Octave i zaimportuj dane do zmiennej **Acc**:<code octave> Acc = load('dane.dat');</code> | |
- Wyrysuj dane z poszczególnych osi na wykresie:<code octave> plot(Acc)</code> | |
| |
| |
=== Określenie parametrów danych === | |
- Przyglądając się wykresom wyodrębnij cechy które twoim zdaniem mogą mieć wpływ na rozróżnienie poszczególnych aktywności użytkownika takich jak: | |
- stanie | |
- chodzenie | |
- bieganie | |
- siadanie | |
- wstawanie | |
- Spróbuj określić aktywność na podstawie maksymalnej i minimalnej amplitudy oraz średniej amplitudy w oknie czasowym o długości np. 3 sekund. | |
- Zapoznaj się (pobieżnie) z artykułem: {{:pl:dydaktyka:aml:activity-recognition-phone.pdf| Activity recognition}} i zastanów się, czy możesz zastosowac którys z opisanych algorytmów do swoich danych | |
| |
| |
| |
| |
| |
| |
===== Android===== | |
- Android API oferuje wbudowaną klasę do wykrywania aktywności o nazwie //ActivityRecognition//. | |
- Pobierz przykładową aplikację wykorzystującą tą klasę: [[http://developer.android.com/shareables/training/ActivityRecognition.zip|Activity recognition]] i zapoznaj się z kodem źródłowym. Opis kodu źródłowego znajduje się [[http://developer.android.com/training/location/activity-recognition.html|tutaj]] | |
- Przetestuj działanie aplikacji. Czy klasę można byłoby udoskonalić o analizę danych z akcelerometru jak w pierwszym zadaniu z laboratorium? | |