Mobilne Aplikacje Multimedialne

Podobne dokumenty
Mobilne Aplikacje Multimedialne

Mobilne Aplikacje Multimedialne

Programowanie Urządzeń Mobilnych. Laboratorium nr 11, 12

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

akademia androida Sensory część V Mobile Applications Developers

akademia androida Składowanie danych część VI

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Mobilne aplikacje multimedialne

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

Enkapsulacja, dziedziczenie, polimorfizm

Java Platform Micro Edition

Aplikacje w środowisku Java

Programowanie w JAVA Lab. 5 - Wątki. 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 7 x ) xy, 8,8

Rysowanie. Rysowanie - podstawy

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

i = [ 0] j = [ 1] k = [ 0]

2 Przygotował: mgr inż. Maciej Lasota

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Fragmenty są wspierane od Androida 1.6

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Ćwiczenia nr 4. TEMATYKA: Rzutowanie

Katalog książek cz. 2

Transformacje obiektów 3D

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Układ współrzędnych dwu trój Wykład 2 "Układ współrzędnych, system i układ odniesienia"

Systemy operacyjne na platformach mobilnych

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Animowana grafika 3D. Opracowanie: J. Kęsik.

Orientacja zewnętrzna pojedynczego zdjęcia

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Powiadomienia w systemie Android

Wykorzystanie map i geolokalizacji

Obsługa SMS i telefonii

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe

Dokumentacja do API Javy.

GRK 2. dr Wojciech Palubicki

Programowanie obiektowe

Grafika trójwymiarowa

akademia androida Http i AsyncTask część VII

Mechanizm powiadomień

STWORZENIE PRZYKŁADOWEJ

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Systemy odniesienia pozycji w odbiornikach nawigacyjnych. dr inż. Paweł Zalewski

Technologie i usługi internetowe cz. 2

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Programowanie obiektowe

Obraz jako funkcja Przekształcenia geometryczne

Doświadczalne metody fizyki biologicznej, medycznej i środowiska naturalnego (1101-4FD14) 7 grudnia 2011r. dr Monika Wilde-Piórko ĆWICZENIE 10

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Sensory w WP7. Wykład 11 Sensory. GPS i mapa.

Cairns (Australia): Szerokość: 16º 55' " Długość: 145º 46' " Sapporo (Japonia): Szerokość: 43º 3' " Długość: 141º 21' 15.

Laboratorium 9 (Więcej Aktywności, w Androidzie)

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

Podstawy Języka Java

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

KATEDRA MECHANIKI I PODSTAW KONSTRUKCJI MASZYN. Instrukcja do ćwiczeń laboratoryjnych z elementów analizy obrazów

Zaawansowane aplikacje WWW - laboratorium

Klasy abstrakcyjne, interfejsy i polimorfizm

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Gry Komputerowe - laboratorium 2. Kamera FPP / TPP. mgr inż. Michał Chwesiuk 1/11. Szczecin, r

Podstawowe elementy GUI - zadania

Laboratorium Systemów Mobilnych. Wykład 1

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

Podstawy Programowania Obiektowego

Kalibracja kamery. Kalibracja kamery

TEMAT : KLASY DZIEDZICZENIE

Z ostatniego wzoru i zależności (3.20) można obliczyć n6. Otrzymujemy (3.23) 3.5. Transformacje geometryczne

Metody dostępu do danych

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Systemy operacyjne na platformach mobilnych

Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Architektury Usług Internetowych. Laboratorium 3. Usługi w środowisku wielo-agentowym

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

akademia androida Service, BroadcastReceiver, ContentProvider część IV

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Systemy operacyjne na platformach mobilnych

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Szybki tutorial o zabezpieczeniach w NFC

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Tworzenie i wykorzystanie usług

Klasy i obiekty cz II

Near Field Communication

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Rozdział 4 KLASY, OBIEKTY, METODY

Transkrypt:

Mobilne Aplikacje Multimedialne Rozszerzona rzeczywistość (AR, Augmented Reality) w Systemie Android Cz.2 Krzysztof Bruniecki

Układy odniesienia Z B Już znamy Y B X B autor: Krzysztof Bruniecki 2

ECEF (ang. Earth-Centered, Earth- Fixed) autor: Krzysztof Bruniecki 3

Konwersja do ECEF a, b półoś wielka, mała f spłaszczenie szerokość geograficzna długość geograficzna h wysokość b a a f e 2 X Y Z ( a 2 ( v ( v b 2 ( v(1 e ) / 2 ) a 2 v h)cos sin h)cos cos h)sin (1 e 2 a sin 2 ) 1/ 2 autor: Krzysztof Bruniecki 4

ECEF->ENU (m-frame) ENU (ang. East, North, Up) = Mapping frame X ECEF, Y ECEF, Z ECEF współrzędne punktu X ECEF, Y ECEF, Z ECEF współrzędne lokalne (środka układu ENU E, N, U współrzędne punktu w układzie lokalnym ENU (m-frame) E N U sin cos sin cos cos cos sin sin sin cos 0 X cos Y sin Z ECEF ECEF ECEF X ' Y ' Z' ECEF ECEF ECEF autor: Krzysztof Bruniecki 5

Deklinacja magnetyczna Kąt pomiędzy południkiem magnetycznym oraz południkiem geograficznym Podawany w danym punkcie Ziemi Kąt płaski, podawany jak azymut Wpływa na nią położenie bieguna magnetycznego Ziemi lokalne uwarunkowania geologiczne (rudy żelaza, itp.) czas autor: Krzysztof Bruniecki 6

Main Field Declination The World Magnetic Model autor: Krzysztof Bruniecki 7

GeomagneticField (1) Klasa: class GeomagneticField extends Object Pakiet: android.hardware.geomagneticfield Estymuje pole magnetyczne w podanym punkcie na Ziemi Pozwala na oszacowanie deklinacji magnetycznej od prawdziwej północy Jako model wykorzystuje World Magnetic Model (United States National Geospatial-Intelligence Agency) http://www.ngdc.noaa.gov/geomag/wmm/dodwmm.shtml. Używa modelu z 2010 roku (WMM-2010) Wg standardu ważny do 2015, ale będzie dawał racjonalne wyniki jeszcze wiele lat później W nowszych wersjach Androida może być wprowadzony nowszy model autor: Krzysztof Bruniecki 8

GeomagneticField (2) Konstruktor: GeomagneticField(float gdlatitudedeg, float gdlongitudedeg, float altitudemeters, long timemillis) Obiekt służący do estymacji pola magnetycznego Ziemi w zadanym miejscu i czasie gdlatitudedeg Szerokość WGS84 w stopniach dodatnia na zachód gdlongitudedeg długość WGS84 w stopniach dodatnia na północ altitudemeters Wysokość elipsoidalna WGS84, w metrach timemillis milisekundy od 1 stycznia 1970 (można podać wartość przybliżoną autor: Krzysztof Bruniecki 9

GeomagneticField (3) Metody public float getdeclination () Zwraca deklinację magnetyczną public float getinclination () Zwraca inklinację magnetyczną (wartość dodatnia oznacza że pole jest skierowane w dół względem płaszczyzny Ziemi) autor: Krzysztof Bruniecki 10

GeomagneticField (4) public float getfieldstrength () Siła pola w nanoteslach public float gethorizontalstrength () Pozioma składowa pola magnetycznego w nanoteslach public float getx () Składowa skierowana na północ (geograficzną) w nanoteslach public float gety () Składowa skierowana na wschód (geograficzny) w nanoteslach public float getz () Składowa skierowana w dół w nanoteslach autor: Krzysztof Bruniecki 11

Jak wykorzystać informacje z modelu magnetycznego? Obrót elementarny autor: Krzysztof Bruniecki 12

Kąt pomiędzy wektorami autor: Krzysztof Bruniecki 13

Omówienie zadań laboratoryjnych (1) Zaimplementować mechanizm wyszukiwania Warszawy (z tolerancją +-10 stopni). Pozycję bieżącą oraz pozycję Warszawy można umieścić bezpośrednio w kodzie. Można rozważać sytuację dwuwymiarową. autor: Krzysztof Bruniecki 14

Omówienie zadań laboratoryjnych (2) Utworzyć interfejs użytkownika umożliwiający dodawanie nowych lokalizacji (a dokładnie wektora wskazującego lokalizację) poprzez wskazanie urządzeniem i dodanie opisu. Następnie umożliwić przeszukiwanie tej bazy poprzez zmianę orientacji urządzenia. Podpowiedź: jako kryterium bliskości wektorów posłużyć się kątem pomiędzy nimi. autor: Krzysztof Bruniecki 15

Przykład Załóżmy następujące położenie (nasze): 18E 55N 0m(wysokość) Punkty wykrywane: 18.0001E 55.0001N 1000m Gdzieś nad horyzontem 17E 55N 0m Zachód 18E 55N 1000m Góra 19E 56N 0m Północny wschód 0E 90N 100000000000m Gwiazda polarna WGS84 a = 6.378.137,0 m b = 6.378.137,0 m Uwaga na radiany/stopnie autor: Krzysztof Bruniecki 16

Model kamery otworkowej Jak należałoby zamontować kamerę w smartfonie żeby układ kamery zgadzał się z układem b-frame? autor: Krzysztof Bruniecki 17

Układ kamery (back-facing) Z B Y B X B Y C Z C X C autor: Krzysztof Bruniecki 18

Model kamery otworkowej (2) Przekrój w płaszczyźnie YZ autor: Krzysztof Bruniecki 19

Układ kamery a układ obrazu Jak przeliczyć wektor wyrażony w b-frame do współrzędnych w pikselach? Jak przeliczyć współrzędne w układzie obrazu na współrzędne bitmapy? autor: Krzysztof Bruniecki 20

Przykład Jakie jest położenie obrazu (w płaszczyźnie obrazowania) punktu o współrzędnych (względem kamery) [50m, -30m, 50m] dla kamery o ogniskowej f=1cm? Jakie jest położenie obrazu punktu o współrzędnych [-20m, -20m, -40m]? autor: Krzysztof Bruniecki 21

Współrzędne jednorodne Sposób reprezentacji punktów w n wymiarowych przestrzeniach za pomocą n+1 współrzędnych dla n=2, punkt (x,y) w przestrzeni kartezjańskiej jest reprezentowany przez (x,y,1)=(wx,wy,w) dla w!=0 punkty (x,y,0) reprezentują punkty w nieskończoności Zaletą współrzędnych jednorodnych jest możliwość zwięzłego opisu przekształceń, takich jak translacja, obrót, skalowanie, rzut perspektywiczny przy użyciu macierzy autor: Krzysztof Bruniecki 22

Macierz kalibracji kamery x K 0 s 0 x0 y 1 0 y 0 x =fk x, y =fk y są długościami ogniskowej wyrażonymi w liczbie pikseli poziomych i pionowych, k x, k y liczby pikseli na milimetr w poszczególnych osiach kamery, x 0,y 0 współrzędne punktu głównego w układzie obrazu, s współczynnik skośności osi x i y, Założyć że w Samsungu Galaxy S (dostępnym na zajęciach laboratoryjnych). Jak określić macierz kalibracji? Obszar widoczności kamery szerokość/wysokość [stopnie] 51,2x39,4 autor: Krzysztof Bruniecki 23

Macierz rzutu perspektywicznego K macierz kalibracji R macierz rotacji kamery t macierz translacji kamery Jeżeli wektor q wyrażony jest w układzie kamery wówczas macierz rzutu perspektywicznego przyjmuje uproszczoną postać autor: Krzysztof Bruniecki 24

Camera API android.hardware.camera <uses-permission android:name="android.permission.camera" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> Rysowanie na podglądzie z kamery W Android Manifest ustawić layout aktywności jako horizontal autor: Krzysztof Bruniecki 25

Włączanie podglądu i wykonywanie zdjęć 1. Pobrać instancję kamery z użyciem open(int). 2. Odczytać parametry getparameters() jako instancję klasy Camera.Parameters 3. Zmodyfikować parametry (jeśli to konieczne) poprzez setparameters(camera.parameters) 4. Jeśli konieczne to ustalić orientację ekranu względem podglądu z kamery setdisplayorientation(int). 5. Przekazać zainicjalizowany obiekt SurfaceHolder do metody setpreviewdisplay(surfaceholder). 6. Wywołać startpreview() aby rozpocząć podgląd z kamery na ekranie (musi być włączony podgląd żeby rozbić zdjęcia) 7. Wywołać takepicture(camera.shuttercallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback) żeby zrobić zdjęcie. Obsłużyć Callbacki. 8. Po wykonaniu zdjęcia podgląd będzie zatrzymany. Aby wykonać kolejne wywołać startpreview() 9. Wywołać stoppreview() żeby zatrzymać podgląd 10. Wywołać release() dla innych aplikacji. Należy zrobić to niezwłocznie w onpause() (otworzyć ponownie używając open() w onresume()) autor: Krzysztof Bruniecki 26

SurfaceView class Preview extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mholder; private Camera camera; Preview(Context context) { super(context); mholder = getholder(); mholder.addcallback(this); } //musi być mimo że jest w dokumentacji jest deprecated mholder.settype(surfaceholder.surface_type_push_buffers); autor: Krzysztof Bruniecki 27

SurfaceHolder.Callback public void surfacecreated(surfaceholder holder) { } camera = Camera.open(); try { } catch (IOException e) { } camera.setpreviewdisplay(holder); e.printstacktrace(); public void surfacedestroyed(surfaceholder holder) { } camera.stoppreview(); camera.release(); camera = null; public void surfacechanged(surfaceholder holder, int format, int w, int h) { } Camera.Parameters parameters = camera.getparameters(); parameters.setpreviewsize(w, h); camera.setparameters(parameters); camera.startpreview(); autor: Krzysztof Bruniecki 28

Rysowanie na SurfaceView Nałożenie nowej warstwy na SurfaceView SurfaceView domyslnie rysowany jest za oknem Przygotowanie interfejsu użytkownika w XML: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:id="@+id/relativelayout1" android:layout_width="match_parent" android:keepscreenon="true"></relativelayout> autor: Krzysztof Bruniecki 29

public class MojeView extends View public class MojeView extends View{ @Override protected void ondraw(canvas canvas) { super.ondraw(canvas); Paint p = new Paint(); p.setargb(255, 255, 0, 0); canvas.drawtext("mojeview.ondraw: i="+i++, 200, 100, p); canvas.drawtext("mojeview.ondraw: j="+j++, 200, 150, p); if(dane!=null) { canvas.drawline(0, 0, 100*dane[0], 100*dane[0], p); p.setstyle(style.stroke); canvas.drawrect(100, 100, 200, 200, p); } } } autor: Krzysztof Bruniecki 30

Dodanie kontrolek do okna Dodanie SurfaceView i kontrolki do okna setcontentview(r.layout.main); rl = (RelativeLayout)findViewById(R.id.relativeLayout1); mycameraview = new Preview(this); rl.addview(mycameraview); mycameraoverlay = new MojeView(this); rl.addview(mycameraoverlay); Odrysowanie kontrolki mycameraview.invalidate(); autor: Krzysztof Bruniecki 31

Nowsze API... Klasa Camera public final void setdisplayorientation (int degrees) public static int getnumberofcameras () public final void setfacedetectionlistener (Camera.FaceDetectionListener listener) public final void startfacedetection () autor: Krzysztof Bruniecki 32