====== Wykrywanie aktywności użytkownika ======
===== Octave =====
==== Analiza danych ====
Napisz program zapisujący dane z akcelerometru do bazy SQLite (mozesz tez przerobic program: [[https://ai.ia.agh.edu.pl/wiki/_media/pl:dydaktyka:aml:prv:projects2016:amlactivityrecognition.zip|Wykrywanie Aktywnosci]])
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**
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();
}
=== Import do Octave/Python===
- Zaimportuj dane z odczytów do Octave:
* W tym celu otwórz bazę danych w SQLite: sqlite3 acc.db
* Ustaw separator danych na tabulator .mode tabs
albo na przecinki .mode csv
* Ustaw wyjscie z SQLite do pliku: .output 'dane.dat'
* Wrzuć dane z trzech osi do pliku: select acc_x, acc_y, acc_z from acc;
- Następnie otwórz Octave i zaimportuj dane do zmiennej **Acc**:
- Acc = load('dane.dat');
- df = pandas.read_csv('dane.dat',sep='\t');
=== 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
- Możesz też wykorzystać "gotowiec" z poprzedniego semestru: https://drive.google.com/file/d/1-8bU3wu5oPP2ybIuyFskIvBwNIIN6eWz/view (Sekcja "Dane to wszystko"
===== 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?