Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <part xmlns="http://docbook.org/ns/docbook" version="5.1" xml:lang="hu"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Alkalmazás</title>
- <partintro>
- <para>
- </para>
- </partintro>
- <chapter>
- <info>
- <title>Frontend</title>
- </info>
- <para>
- Az alkalmazás frontendje a kezdetekkor két részre bontható. Ennek praktikusan fejlesztői okai vannak, később a két rész várhatóan
- összeér.
- </para>
- <section>
- <info>
- <title>Android alkalmazás</title>
- </info>
- <para>
- Android development, a use case az alábbi képen. Erről egy gyors eldobható protó hamarosan elérhető. A feladat a
- protó forkolása, javítása. A tényleges feladatok itt, issue-kban jelennének meg. Az alkalmazás célja az
- épülő városhoz nyersanyagok (fa, kő, stb.) vadászata kezdetben, majd komplexebb, tudást igénylő
- feladatok esetén pl. villamosmérnökök előadására beülni. Az alkalmazásban funkciói:
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>térkép, hol találhatóak az erőforrások,</para>
- </listitem>
- <listitem>
- <para>base, a városunk jelenlegi állapota látható (ugyanúgy, mint a desktop alkalmazásban),</para>
- </listitem>
- <listitem>
- <para>camera, fotó készítése,</para>
- </listitem>
- <listitem>
- <para>quests, a gyűjtendő erőforrások listája, leírása,</para>
- </listitem>
- <listitem>
- <para>receptek, a következő épülethez, tudásszinthez szükséges erőforrások leírása.</para>
- </listitem>
- </itemizedlist>
- </para>
- <para>A feladat koordinátora: Besenczi Renátó</para>
- <itemizedlist>
- <listitem>
- <para>Besenczi Renátó</para>
- </listitem>
- <listitem>
- <para>Domokos László</para>
- </listitem>
- <listitem>
- <para>Németh Dániel Viktor</para>
- </listitem>
- <listitem>
- <para>Szabó Bence</para>
- </listitem>
- <listitem>
- <para>Jakab Ádám</para>
- </listitem>
- <listitem>
- <para>Kokas István</para>
- </listitem>
- <listitem>
- <para>Abai Richárd</para>
- </listitem>
- <listitem>
- <para>Iványi Dániel</para>
- </listitem>
- <listitem>
- <para>Török Antal</para>
- </listitem>
- <listitem>
- <para>Csermely Attila</para>
- </listitem>
- <listitem>
- <para>Kádár Gergely</para>
- </listitem>
- <listitem>
- <para>Halmai Bianka Zsófia</para>
- </listitem>
- <listitem>
- <para>Szőcs Gábor</para>
- </listitem>
- <listitem>
- <para>Fekete Sándor</para>
- </listitem>
- <listitem>
- <para>Ozsváth Jonathán</para>
- </listitem>
- </itemizedlist>
- <section>
- <info>
- <title>A fejlesztési folyamat</title>
- </info>
- <para>
- A fejlesztés első ütemében a use case implementálása történt, ezt tekintjük az első protótípusnak. Az alkalmazás jelenleg a Maps API-t és a Camera API-t
- implementálja, illetve a Questekhez illusztrálja a GUI elképzelést. A Quest valamint a Recepies menüben az adatokat az DataContent
- osztállyal tudjuk feltölteni.
- A feladat tárolója: <link xlink:href="https://github.com/rbesenczi/esamurftandroid">itt</link> elérhető.
- A teendők első listája az alábbi:
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>Loginactivity készítése, mely Facebook és Google bejelentkezést is lehetővé tesz (optionálisan LinkedIn).</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>A feladatban részt vevők:</para>
- </listitem>
- <listitem>
- <para>Halmai Bianka Zsófia</para>
- <para>
- <link xlink:href="https://github.com/Dreamfire/RFT_Login_Facebook.git">
- Egy egyszerű facebook login.
- </link>
- </para>
- </listitem>
- <listitem>
- <para>Németh Dániel Viktor</para>
- <para>
- <link xlink:href="https://github.com/nemethd13/EsamuRFTAndroid.git">
- Facebook autentikáció megvalosítása.
- </link>
- </para>
- </listitem>
- <listitem>
- <para>Szőcs Gábor</para>
- <para>
- <link xlink:href="https://github.com/szocs08/RFT-Google-Auth">
- Egy egyszerű Google authentication.
- </link>
- </para>
- </listitem>
- <listitem>
- <para>Török Antal</para>
- <para>
- <link xlink:href="https://github.com/anti234/EsamuRFTGoogleFacebookLogin.git">
- Facebook és google autentikáció megvalosítása, és adatok lekérése a facebook vagy google felhasználótól.
- </link>
- </para>
- </listitem>
- <listitem>
- <para>Kosztur Norbert</para>
- <para>
- <link xlink:href="https://github.com/KoszturNorbert/rft_app">
- Egy fragment alapú Facebook login megoldás androidban.
- Bejelentkezés után lekérdezi a Facebook-tól a felhasználó nevét, és email címét.
- </link>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Az EsamuRFTService osztály behuzalozása, tehát Networking, Firebase vagy sajátszerverrel kapcsolat.</para>
- </listitem>
- <listitem>
- <para>Protobuf alapú adatkommunikáció saját szerverrel.</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>A feladatban részt vevők:</para>
- </listitem>
- <listitem>
- <para>Jakab Ádám</para>
- </listitem>
- <listitem>
- <para>A protobuf még nincs kész, de sima string alapó kommunikáció már megy a saját forkomban.</para>
- </listitem>
- <listitem>
- <para>
- <link xlink:href="https://github.com/Adiss/RFTAndroidServerClient/tree/master/AndroidPCServer/src/hu/experiment_team">
- PC szerver.
- </link>
- </para>
- </listitem>
- <listitem>
- <para>
- <link xlink:href="https://github.com/Adiss/EsamuRFTAndroid">
- Android kliens
- </link>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Képküldés Protobuffal vagy egyéb módon saját szerverre vagy Firebase-re</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>A feladatban részt vevők:</para>
- <para>Abai Richárd</para>
- </listitem>
- <listitem>
- <para>Protobuf objektum és kép kezelése Maven projektben megvalósítva JAVAX-os servleteket használva. A példában összeállítunk egy Protobuf objektumot, melynek van képet kezelő attribútuma, majd ezt az objektumot fájlba írjuk, felolvassuk onnan, illetve a felhasználó home könyvtára alá másoljuk szemléltetés céljából.</para>
- <para>Az alkalmazást Eclipse-ben kódoltam és Tomcat szerveren teszteltem, egyszerűen az előállított WAR állományt hozzáadjuk a szerverhez, majd a http://localhost:8080/protobuf-test/proto/ProtoTester/get_user (alapértelmezésben) címen tudjuk hívni a logikát, melyet egy Google Protocol Buffers-es plugin (lásd.: lentebb), illetve sima JAVAX-os servletek segítségével készítettem.</para>
- </listitem>
- <listitem>
- <para>
- <link xlink:href="https://github.com/rabai/proto-test">
- Protobuf objektum kezelés (lásd readme a lépésekről)
- </link>
- </para>
- <para>A Protobuff objektumok egyszerű előállítására az alábbi plugint használtam:
- <link xlink:href="https://github.com/os72/protoc-jar-maven-plugin">
- protoc-jar-maven-plugin
- </link>
- , mely buildelés közben elvégzi a pom-ban megadott elérésekre a generálást. Licencelése: Apache 2.0.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Háttérben futó folyamat, mely nyomon követi a GPS helyadatok változását.</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>A feladatban részt vevők:</para>
- </listitem>
- <listitem>
- <para>Fekete Sándor</para>
- </listitem>
- <listitem>
- <para>A helyadatok lekérdezése működik, az adatok további feldolgozásra rendelkezésre állnak.</para>
- </listitem>
- <listitem>
- <para>
- <link xlink:href="https://github.com/Xundi007/EsamuRFTAndroid">
- Android kliens
- </link>
- </para>
- </listitem>
- </itemizedlist>
- <table frame='all'><title>Nyersanyagok fellelhetősége</title>
- <tgroup cols='3' align='left' colsep='1' rowsep='1'>
- <colspec colname='c1'/>
- <colspec colname='c2'/>
- <colspec colname='c3'/>
- <thead>
- <row>
- <entry align="center">Nyersanyag</entry>
- <entry align="center">Latitude</entry>
- <entry align="center">Longitude</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>Hús</entry>
- <entry>47.542942</entry>
- <entry>21.639459</entry>
- </row>
- <row>
- <entry>Víz</entry>
- <entry>47.543260</entry>
- <entry>21.640283</entry>
- </row>
- <row>
- <entry>Gabona</entry>
- <entry>47.545015</entry>
- <entry>21.640026</entry>
- </row>
- <row>
- <entry>Gyümölcs</entry>
- <entry>47.545531</entry>
- <entry>21.640060</entry>
- </row>
- <row>
- <entry>Fa</entry>
- <entry>47.544516</entry>
- <entry>21.639070</entry>
- </row>
- <row>
- <entry>Kő</entry>
- <entry>47.546004</entry>
- <entry>21.639580</entry>
- </row>
- <row>
- <entry>Vas</entry>
- <entry>47.541169</entry>
- <entry>21.639610</entry>
- </row>
- <row>
- <entry>Homok</entry>
- <entry>47.541514</entry>
- <entry>21.638607</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </listitem>
- <listitem>
- <para>Aktuális gps koordináta és nyersanyagok közti különbség számolása. Egy bizonyos hatósugárban notificationt dob az alkalmazás a felhasználó számára</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>A feladatban részt vevők:</para>
- </listitem>
- <listitem>
- <para>Ozsváth Jonathán</para>
- </listitem>
- <listitem>
- <para>A Fekete Sándor által fejlesztett programot fejlesztettem tovább. A GPSActivity-n elindítjuk a GPSService-t, majd a service-ben a lekérdezett gps adatok alapján távolságot számol
- a json fáljban megadott nyersanyagoktól. Ha valamelyik nyersanyag (jelenleg 15 méteres) környezetébe ér, akkor értesítést küld a felhasználó számára.</para>
- </listitem>
- <listitem>
- <para>
- <link xlink:href="https://github.com/JonathanOzsvath/EsamuRFTAndroid">
- Forrás kód
- </link>
- <link xlink:href="https://drive.google.com/open?id=0Byr79JRLHxp1eDdHQ0tLbDZxSFE">
- Apk fájl
- </link>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Hibakezelések, tesztelések (nincs net, nincs gps, stb...)</para>
- </listitem>
- <listitem>
- <para>Google Vision API vagy Mobile Vision API kipróbálása</para>
- <itemizedlist>
- <listitem>
- <para>A feladatban részt vevők:</para>
- <para>Domokos László</para>
- </listitem>
- <listitem>
- <para>Github link:
- <link xlink:href="https://github.com/domokoslaci94/RFT-test">link</link>
- </para>
- <para>
- A repo több próba projektet tartalmaz. Az általam készített projekt a Mobil-vision-test mappában található. Az alkalmazás felhasználói felülete 3 gombbol és egy képből áll. Lehetőség van kép választásra arc detektálására és az arcot körülvevő négyzet kirajzolására. Az arcok detektálását a com.google.android.gms.vision.face.FaceDetector osztály detect metódusa végzi ennek paraméterül kell átadni egy Frame objektumot ami tartalmazza a képet leíró bitmapat. A detectálás eredménye egy SparseArray ami Face objektumokat tartalmaz. A Face objektumról többek között a pozíciot, arc magasságot és arc szélességet is le lehet kérni. Ezeknek az adatoknak a felhasználásaval könnyedén megtudjuk adni a kirajzolandó négyzet adatait. A detektálás lassú folyamat így detektálás előtt a képet átméretezem.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>UI tervezése</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>Inventory</para>
- <para>A feladatban részt vevők: Kokas István</para>
- <para>Github link:
- <link xlink:href="https://github.com/Pisti03/EsamuRFTAndroid.git">
- link
- </link>
- </para>
- <para>
- A különböző menük közötti átjárást lenyitható menü helyett a képernyő aljára helyezett gombokkal oldottam meg. A gombok egyelőre csak az android studioban elérhető alap gombok, melyek később le lesznek cserélve, csak az elrendezés volt a lényeg. Továbbá ekészítettem egy lehetséges inventoryt, ahol a leendő itemek számát láthatjuk és majd innen érhetjük el a recepteket. Az inventoryt egy egyszerű GridView segítségével oldottam meg, melyhez elkészítettem egy adaptert amely egy itemeket tartalmazó listából feltölti az inventoryt az itemek képével, nevével és darabszámával. A gombok elhelyezését és az inventory prototípusának két változatát az alábbi 2 kép szemlélteti:
- </para>
- <para>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/inventory1.png" scale="25"/>
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/inventory2.png" scale="25"/>
- </imageobject>
- </inlinemediaobject>
- </para>
- </listitem>
- <listitem>
- <para>Minimap és swipe</para>
- <para>A feladatban részt vevők: Iványi Dániel, Kokas István</para>
- <para>Github link:
- <link xlink:href="https://github.com/Sleis/EsamuRFTAndroid.git">
- link
- </link>
- </para>
- <para>
- Elkészítettünk egy minimapet, amely indításkor beáll a user gps által bemért utolsó pozíciójára. A user pozíciójának követése még megoldásra váró feladat, a térkép a kezdeti pozíción marad újraindításig. A minimapre ráhelyeztünk egy láthatatlan gombot, így a minimapre kattintva a nagytérkép jön be. Továbbá elkezdtük a menük fragmentté alakítását és ezek között swipe-pal és gombokkal egyaránt válthatunk. Jelenleg 3 menü között válthatunk swipe-pal: inventory, base, recepies.
- </para>
- <para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/minimap.png" scale="25"/>
- </imageobject>
- </mediaobject>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Egyéb feladatok (specifikálása később)</para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </section>
- <section>
- <info>
- <title>Desktop alkalmazás</title>
- </info>
- <para>
- Klasszikus RTS nézet, ahol az épülő város látható, néhány épülettel. Ezekhez az épületekhez
- gyűjthetünk erőforrásokat a mobil alkalmazással. Az alkalmazás funkciói:
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>térkép, hol találhatóak az erőforrások,</para>
- </listitem>
- </itemizedlist>
- </para>
- <para>A feladat koordinátora: Takács Tamás</para>
- <para>
- <emphasis role="strong">A feladatban részt vevők: </emphasis>
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>Takács Tamás</para>
- </listitem>
- <listitem>
- <para>Balogh Ádám</para>
- </listitem>
- <listitem>
- <para>Badó Gergely József</para>
- </listitem>
- <listitem>
- <para>Szilágyi István Tamás</para>
- </listitem>
- <listitem>
- <para>Veres Dávid</para>
- </listitem>
- <listitem>
- <para>Lipusz Péter Dávid</para>
- </listitem>
- </itemizedlist>
- <para>
- <emphasis role="strong">Részfeladatok: </emphasis>
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>Játéklogika fejlesztés</para>
- <para>Játékbeli funkcionalitások elkészítése, üzletilogika.</para>
- </listitem>
- <listitem>
- <para>HUD/GUI fejlesztés</para>
- <para>Játék menü, gombok és a hozzáuk tartozó interakció kezelése.</para>
- </listitem>
- <listitem>
- <para>C++-os hálózati kommnikáció fejlesztése</para>
- <para>Kommunikáció megvalósítása a Firebase, Azure vagy saját protokoll alapú szerverrel.</para>
- </listitem>
- <listitem>
- <para>Modellezés és animálás</para>
- <para>Blenderben való modellek készítése épületek, egységek és egyéb grafikus játékelemek.</para>
- </listitem>
- </itemizedlist>
- <section>
- <info>
- <title>GitHub repository</title>
- </info>
- <para>
- <link xlink:href="https://github.com/DeeGort/UDRFT-UE-Client">
- UDRFT-UE-Client
- </link>.
- </para>
- </section>
- <section>
- <info>
- <title>A fejlesztési folyamat</title>
- </info>
- <section>
- <info>
- <title>Kezdet</title>
- </info>
- <para>
- <informalfigure>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/ue4_test.jpg" scale="25"/>
- </imageobject>
- <caption>
- <para>
- Kezdeti kép egy eldobható prototípusról.
- </para>
- </caption>
- </mediaobject>
- </informalfigure>
- </para>
- </section>
- <section>
- <info>
- <title>C++-os hálózati kommnikáció fejlesztési folyamata</title>
- </info>
- <section>
- <info>
- <title>Google Firebase-alapú kapcsolat implementálása C++ API-val</title>
- </info>
- <para>
- Felvetés szerin a Google Firebase C++ API-ja lehetőséget nyújthat a Desktop UE4 alkalmazással való hálózati kommunikálásra, azonban ez az API nem erre a célra lett kifejlesztve.
- </para>
- <para>
- <quote>The Firebase C++ SDK provides a C++ interface on top of Firebase for iOS and Android.</quote>
- <link xlink:href="https://firebase.google.com/docs/cpp/setup">API doc</link>
- </para>
- <para>
- Unreal Engine 4-ben lehet azonban Androidra deployolni,
- de teljesen más mint egy java-ban írt Andorid alkalmazás készítése és ez eléggé megnehezítheti a dolgot.
- Az SDK előfeltételei sem olyanok amik fennállnak egy Unreal Engine 4 project esetén.
- </para>
- <para>
- Fórumokon lehet találni próbálkozásokat, de megoldást nem sikerült találni.
- A probléma ismert mivel a Unity-re már létezik egy Beta megoldás, de sajnos Unreal Engine 4-re még nem,
- de a jövőben lehetséges, hogy lesz.
- </para>
- <para>
- Nem zárom ki, hogy nem oldható meg a probléma a C++ API-val, de hosszas utánajárás után arra jutottam,
- hogy ez nagyon sok időt venne igénybe és nem lenne szép megvalósítás, és további problémákat is felvethet.
- </para>
- <section>
- <info>
- <title>Konklúzió</title>
- </info>
- <para>
- Nagyobb és időigényesebb erőfeszítés lenne, működésre bírni a Google Firebase-t a C++ API segítségével,
- mint amennyi rendelkezése áll.
- </para>
- </section>
- <section>
- <info>
- <title>Lehetéges megoldás</title>
- </info>
- <para>
- Firebase REST API
- </para>
- <para>
- A Firebase tehát még nincs elvetve, a Desktop alkalmazásnál. A Firebase REST API további utánajárást igényel.
- Lásd következő szekció.
- </para>
- </section>
- </section>
- <section>
- <info>
- <title>Google Firebase-alapú kapcsolat REST API-val manuálisan</title>
- </info>
- <para>
- Első lépésben be kell szerezni a Firebase-es accounton lévő adatbázisnak az API key-ét.
- </para>
- <para>
- API key a firebase.google.com-on a <emphasis>Konzol / Project Setting / Web API Key</emphasis> helyen érhető el,
- de a projektnek a google.services.json fájlban is megtalálható.
- </para>
- <para>
- A firebase-es adatbázisban minden értéke elérhető egy végponton ha a .json-t a végére írjuk az URL-nek. Pl.:
- <emphasis role="strong">https://<firebase-project>.firebaseio.com/Test1.json</emphasis>
- Ezeket authentikálva tudjuk elérni, amit az URL kiegészítésével érjük el egy authentikált felhasználó tokenjével.
- </para>
- <para>
- Egy végpontról történő érték lekérése, authentikált felhasználó tokennel:
- </para>
- <para>
- <emphasis role="strong">https://<firebase-project>.firebaseio.com/<végpont.json>?auth=<authentikált felhasználó tokenje></emphasis>
- </para>
- <para>
- Az authentikált felhasználó tokenjét a következő módon szerezhetjük be, ami esetünkben a logint jelenti.
- </para>
- <para>
- A tokent egy HTTPS POST response-jában kapjuk vissza az "idToken"-hez tartozó értékként.
- Az URL amire postolni kell: <emphasis role="strong">https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=<API key></emphasis>
- A headerben meg kell adni a következőket: "Accept: application/json", "Content-Type: application/json".
- A body a felhasználó nevet és jelszavát tartalmazza majd a json-ben:
- </para>
- <blockquote>
- <literallayout>
- {
- "email": <felhasznalonev>,
- "password": <jelszo>,
- "returnSecureToken": "true"
- }
- </literallayout>
- </blockquote>
- </section>
- <section>
- <info>
- <title>Google Firebase-alapú kapcsolat implementálása REST API-val C++ Demo</title>
- </info>
- <para>
- Az órán bemutatott demó program, ami megvalósítja a REST-es kommunikációt C++-szal az előző szekció szerint.
- A program csak demózás célból jött létre, csak valid adattal működik helyesen, hibákra nincs felkészítve.
- </para>
- <para>
- A program bekéri az API keyt, felhasználónevet és a jelszót, majd lekér/generáltat egy tokent.
- A visszakapott tokennel authentikálva egy megadott végpontról lekér az értéket.
- </para>
- <para>
- A program futtatásához fordítani kell a libcurlt-t a következő lírás szerint windowson:
- <link xlink:href="http://www.codepool.biz/build-use-libcurl-vs2015-windows.html">libcurl fordítása windowon</link>
- </para>
- <para>
- <link xlink:href="https://github.com/DeeGort/Simple-CPP-Firebase-REST-API/">GitHub Repository</link>
- </para>
- </section>
- <section>
- <info>
- <title>Google Firebase-alapú kapcsolat implementálása UE4-ben REST API-val</title>
- </info>
- <para>
- Hamarosan.
- </para>
- </section>
- </section>
- </section>
- <section>
- <info>
- <title>A modellezési folyamat</title>
- </info>
- <section>
- <info>
- <title>Cél</title>
- </info>
- <para>
- A folyamat célja olyan modellek megalkotása, melyek az asztali alkalmazás látványvilágát színesítik majd.
- </para>
- </section>
- <section>
- <info>
- <title>Egy modell elkészülésének folyamata</title>
- </info>
- <para>
- A modellek megalkotásához a jól ismert és ingyenes, Belnder nevű modellező programot használjuk, mely biztosít számunkra minden olyan eszközt, ami egy-egy elképzelt modell megalkotásához szükséges.
- </para>
- <para>
- Első lépésként szükség van egy ötletre, egy elképzelésre, hogy mégis mi az a dolog, amit még nem alkottunk meg, és jól nézne ki, ha megjelenne a játék világában.
- </para>
- <para>
- Amint megvan a konkrét elképzelés, hogy mit szeretnénk elkészíteni, érdemes rákeresni mondjuk az adott tárgy képére az interneten, vagy akár egyszerűen csak körülnézni a saját környezetünkben, és kicsit tanulmányozgatni a dolgot, eközben már gondolva a konkrét modellezésre, megtervezni azt, hogy mit hogyan fogunk megvalósítani.
- </para>
- <para>
- A Blender használatakor érdemes egy, a korábban említett képek közül egyet elmenteni és beállítani a programban egy adott nézethez tartozó háttérként, mert azt egy vezérvonalként használva könnyedén meg tudunk formálni egy adott modellt.
- </para>
- <para>
- A modellek megalkotásakor nálunk az általános irányelv az volt, hogy minél kifejezőbbre sikerüljön elkészíteni egy modellt, ugyanakkor igyekezzünk annak poligonszámát minimalizálni. Ez tipikusan igaz volt a kör és gömb alakú alakzatok generálásakor, ahol a felosztást úgy próbáltuk megválasztani, hogy az minél alacsonyabb legyen, de mégse legyen feltűnően szögletes az objektum. Például a későbbiekben látható íj modell húrja egy egyszerű háromszög alapú hasáb, ami nekünk tökéletesen elegendű, hiszen az asztali alkalmazáson belül távolról fel sem fog tűnni a felhasználó számára a különbség.
- </para>
- <para>
- Közös megállapodás szerint nem használunk textúrákat egyik modell esetén sem, csupán egyszerű színeket, melyek helyes megválasztása ugyanolyan látványos és kifejező tud lenni.
- </para>
- </section>
- <section>
- <info>
- <title>Pár kép a modellekről</title>
- </info>
- <para>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/arrow.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/axe.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/bench.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/bow.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/chair.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/shield.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/street_lamp.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/sword.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/table.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/tree.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/arrow2.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/barrel.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/bow2.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/castle.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/catapult.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/cauldron.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/chest.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/dagger.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/factory.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/smithy.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="images/wall.jpg" scale="35" />
- </imageobject>
- </inlinemediaobject>
- </para>
- </section>
- </section>
- </section>
- </chapter>
- <chapter>
- <info>
- <title>Backend</title>
- </info>
- <para>
- Fő feladatként megemlíthetjük a userkezelést, erőforrás-gazdálkodást, stb. Konkrétabb irányok,
- melyeket ki kell próbálni (ezek közül választjuk majd a számunkra ideálisat):
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>Google Firebase</para>
- </listitem>
- <listitem>
- <para>Microsoft Azure</para>
- </listitem>
- <listitem>
- <para>Saját szerveres backend</para>
- </listitem>
- </itemizedlist>
- Az a) és b) pontokat laboron egyeztettük, itt (is) az első lépés a licenc szempontú felhasználhatóság
- vizsgálata (lásd esamu doksi licencmérnökség részt). Gyors protók formájában szemléltessük a
- funkciókat (pl adatbázisba kommitolás egy egyszerű Java vagy C++ parancssoros progi formájában). A
- desktop ill. mobil alkalmazásba ezután illeszthető.
- A saját szerveres backend hamarosan élesedik, az irodai gépemen (formális engedély van a
- tanszékvezetőmtől, egyeztetek a rendszergazdákkal). Itt fő feladat egy enterprise java alapú
- erőforrásmegosztás (pl. Glassfish clustering) alkalmazhatóságának vizsgálata, természetesen élesítve
- a szerveren, egyúttal userkezelés, ....
- </para>
- <section>
- <info>
- <title>Webes alkalmazás szerver és asztali kliens</title>
- </info>
- <para>
- A feladat egy szerver és egy kliens program megírása java nyelven. A kliens protocol buffers használatával
- adatokat küld a szervernek, ami lementi a kapott adatokat MongoDB-be. A szervernek minél több kliens
- egyidejű kiszolgálását ki kell bírnia.
- <itemizedlist mark='opendcircle'>
- <listitem>
- <para>Maven</para>
- </listitem>
- <listitem>
- <para>GlassFish</para>
- </listitem>
- <listitem>
- <para>MongoDB</para>
- </listitem>
- <listitem>
- <para>Java Socket</para>
- </listitem>
- <listitem>
- <para>Multithreading</para>
- </listitem>
- </itemizedlist>
- Az alkalmazás szerver része java servlet-ekre épít. Maven-el egy war fájlt készítünk belőle, amelyet
- a szerver gépen már futó GlassFish szerverre telepítünk fel (deploy). Az elkészült szerver alkalmazást a
- szerver gép a http://localhost:8080/glassfish/welcome címen érheti el.
- A welcome page-en 3 gomb található. A "Toggle socket server" első megnyomása elindítja a socket szervert
- ami ezután egy megadott porton a kliensek csatlakozását. Minden kliens kiszolgálására egy külön szálat indít,
- majd ismét a megadott portra figyel és újabb kliensekre vár. A kliensektől ObjectStream-en keresztül
- kapja meg az adatokat, melyeket a protocol buffers által generált osztály beolvas és átalakít.
- Ezután a generált osztály objektumánk segítségével létrehozzuk a tényleges,lementhető objektumot,
- melyet át is adunk a MongoDB-nek mentésre.
- Mivel a kommunikáció ObjectStream-el történik, a kliens egy saját ExitSignal osztály példányának átküldésével jelzi,
- hogy több adatot már nem fog küldeni. A szerver ennek hatására kilép az adat-olvasó ciklusból, küld egy szöveges
- válaszüzenetet a kliensnek, majd az aktuális klienst kiszolgáló szál leáll.
- A "Toggle socket server" gomb ismételt megnyomásának hatására a socket szerver abbahagyja a megadott portra figyelést
- és leáll. Azonban a még futó kliens-kiszolgálásokat ez nem szakítja meg.
- Megjegyzés, hogy az ExitSignal szerializálható osztály számára egy serialVersionUID explicit megadása kötelező,
- ugyanis ennek elhagyása esetén automatikusan generálódni fog egy, környezet függő módon. Tehát ha a class-t Windows
- és Linux alatt is lefordítjuk, különböző JDK verzióval, a generált serialVersionUID szinte biztos, hogy el fog térni,
- így szerver oldalon az objektum deszerializációja kivételt fog dobni.
- Ha az adatátvitel közben a kliens vagy a szerver valamilyen okból leáll, a másik fél ezt a kivételt lekezeli és egy
- üzenettel jelzi.
- A kliens alkalmazás egy egyszerű java socket program saját main metódussal, elindítása független a felhasznált
- web-es technológiáktól. Kliens oldalon az adatátvitelt user inputtal (szöveg beírása és enter, vagy akár csak enter)
- meg lehet állítani, mely hatására a kliens elküldi az exit signal-t, majd leáll.
- A welcome page-en a maradék két gomb "Clean database" és a "Saved data count". Előbbi kitörli az adatbázisba a kliensek
- által bepakolt összes element, utóbbi pedig kiírja, hogy jelenleg mennyi lementett adat van az adatbázisban.
- </para>
- <para>
- Az alkalmazás github-linkje:
- https://github.com/joey11111000111/GlassFish-with-Java-and-maven
- </para>
- <para>A feladat koordinátora: Kovács Tamás</para>
- <itemizedlist>
- <listitem>
- <para>Kovács Tamás</para>
- </listitem>
- <listitem>
- <para>Pintér Dávid</para>
- </listitem>
- <listitem>
- <para>Turi Lajos</para>
- </listitem>
- </itemizedlist>
- </section>
- <section>
- <info>
- <title>Google Firebase</title>
- </info>
- <para>A feladat koordinátora: </para>
- <para>A feladatban részt vevők:</para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>Kovács Ádám</para>
- </listitem>
- <listitem>
- <para>Jánosi György</para>
- </listitem>
- </itemizedlist>
- <para>
- Példaprogram a következőkre: Firebase Authentication, Realtime Database.
- Google bejelentkezéssel, kép feltöltéssel.
- </para>
- <para>
- <link xlink:href="https://github.com/kovi77/firebaseExample">GitHub Repository</link>
- </para>
- <section>
- <info>
- <title>A fejlesztési folyamat</title>
- </info>
- <section>
- <info>
- <title>Kezdet</title>
- </info>
- </section>
- <section>
- <info>
- <title>Google Firebase példaprogram</title>
- </info>
- <para>
- A Firebase használatóhoz szükséges Google Account majd egy Google Project, amit regisztrálunk a Firebase konzolban.
- Itt a bejentkezési lehetőségeket kell még beállítani, és szükség van egy Google API Key-re.Ebből kapjuk meg a .json fájlunkat.
- </para>
- <para>
- Az implementálása osztályok importálásával történik, a Gradle, és az AndroidManifest beállítása után.
- </para>
- <para>
- A példaprogram lehetővé tesz bejelentkezést Email és jelszó párossal, valamit Google Account-tal.
- Bejelentkezés utáni Activity-ben lehetőségünk van két mezőt kitölteni és képet készíteni, amiket a Firebase adatbázisában töltünk fel.
- A feltöltött képet, nevet, kort vissza is hívjuk az adatbázisból.A képfeltöltés Base64 kódolással történik.
- Az adabázisban minden felhasználó egyedi azonosítóval rendelkezik,
- aminek leszármazott gyermekei a mentett adatok. Az adabázis írásához és olvasásához bejelentkezés szükséges.
- </para>
- <para>
- (update)
- </para>
- <para>
- A kép az adabázis helyett a storage-ba kerül,függetlenül a felhasználóktól, a későbbi letölthetőség okán.
- </para>
- </section>
- <section>
- <info>
- <title>Jelenlegi helyzet</title>
- </info>
- <para>
- A példaprogram átemelése az Esamu android prototípusba meg történt. Átmenetileg használva az ott implementált bejelentkezéssel,
- ahoz, hogy a lekért koordinátákat menteni tudjuk az adatbázisba, felhasználókként.
- </para>
- <para>
- Ez utóbbi ki lett egészítve a resource managementtel, ahol különböző nyersanyagokat tudunk hozzáadni a firebase adatbázishoz.
- Az adatbázis kommunikáció egy android serviceben van megvalósítva.
- </para>
- <para>
- <link xlink:href="https://github.com/gyuri0/EsamuRFTAndroid">GitHub Repository</link>
- </para>
- </section>
- </section>
- </section>
- <section>
- <info>
- <title>Microsoft Azure</title>
- </info>
- <para>A feladat koordinátora: </para>
- <para>A feladatban részt vevők: Jánosi György</para>
- <para>
- Az elképzelés egy Azure Cloud Service létrehozása, amely egy RESTful-hoz hasonló módon kommunikál a klienssel,
- megtámogatva egy adatbázissal.
- Sajnos az Azure student verziójában az Azure Cloud Service-nek nincs ingyenes verziója.
- </para>
- </section>
- </chapter>
- <chapter>
- <info>
- <title>Egyéb feladatok</title>
- </info>
- <para>
- TODO
- </para>
- <section>
- <info>
- <title>Tesztelés</title>
- </info>
- <para>
- Alkalmazások, backend tesztelése.
- </para>
- <para>A feladat koordinátora: Bodonyi Andrea</para>
- <para>A feladatban részt vevők: </para>
- <section>
- <info>
- <title>A tesztelői folyamat</title>
- </info>
- <para></para>
- </section>
- </section>
- </chapter>
- <chapter>
- <info>
- <title>Próbálkozások a gépi tanulás témaköréből</title>
- </info>
- <para>
- A feladatban részt vevők: Kovács Roland, Besenczi Renátó
- </para>
- <section>
- <info>
- <title>Samu fejlesztések</title>
- </info>
- <para>
- </para>
- </section>
- <section>
- <info>
- <title>OpenCV neurális hálók</title>
- </info>
- <para>
- Pár szót a Cascading Classifierekről
- A Cascadolás(Cascading) egy formája a többrészes tanulási módszereknek(gép tanulás, machine learning) több különböző Classifier("osztályzó?") láncolatán alapulva, a tanulás folyamata alatt felhasználva az aktuálisan előző classifier outputját az aktuálisan következő classifierhez.
- A Cascading egy többlépcsős(stages) tanulási módszer.
- A Cascading classifier tanítása több ezer "pozitív" mintával az adott objektumról és tetszőleges "negatív" képekkel történik hasonló méretekben. Miután a classifiert betanítottuk a kép adott területén alkalmazva észlelhetjük a kérdéses objektumot. Ahoz hogy a kérdéses objektumot az(egy) egész képen keressük, a "kereső ablakkal"(egy NxN-es négyzet) végigpásztázzuk a kép minden területét.
- Ezt a folyamatot leggyakrabban a képfeoldogozás területén(image processing) használják
- </para>
- <para>
- OpenCV Cascade Classifier Training
- A munka a cascade classifierekkel két fő részre bontható: tanulás(training) és észlelés(detection). Az OpenCV-ben két felhasználható alkalmazás van a cascade classifier tanítására: opencv_haartraining és opencv_traincascade. Az utóbbi az újabb. C++-ban lett írva és a 2.x OpenCV verziótól jelent meg. Lehetőség nyílik LBP(Local Binary Pattern) és Haar(Haar-like) feautre-ök kinyíerésére, ahol is az LBP sokkal gyorsabb a Haar-nál de ez nem minden esetben jelenti azt is, hogy rosszabb teljesítményt nyújt.
- </para>
- <section>
- <info><title>A folyamat</title></info>
- <para>
- Mielőtt elkezdjük tanítani a cascade classifierünket össze kell gyűjteni a "pozitív" képeket amiket felakarunk majd ismerni, mellé "negatív" képeket amiken biztosan nem szerepelnek a felismerni kívánt objektumok. Az összegyűjtött képek méretarányai nem(vagy minimálisan különbözhetnek).
- Én személyszerint egy C++ban megírt programmal fekete-fehér képeket készítettem az RGB képekből és amit szükséges volt méretarányosan átméreteztem és kivágtam a pozitív képekről az érintett területet, hogy lehetőség szerint csak a felismerni kívánt objektum szerepeljen a képen.
- Egy már előttem már megírt PERL script-el és az OpenCV beépített programjával pozitív mintákat csinálunk
- perl bin/createsamples.pl positives.txt negatives.txt samples 1700 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1
- -maxyangle 1.1 maxzangle 0.5 -maxidev 40 -w 24 -h 24"
- Ez után egy python scripttel egybe olvasszuk őket az opencv által felismerhető bináris fájba(.vec)
- python ./tools/mergevec.py -v samples/ -o samples.vec
- </para>
- <para>
- És most jöhet a cascade training:
- opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt -numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1200 -numNeg 500 -w 24 -h 24 -mode ALL -precalcValBufSize 512 -precalcIdxBufSize 512
- Számítógéptől függően egy 20 lépéses training több órát vagy akár több napot is igénybe vehet. Előny ha az ember CUDA-val felépített OpenCV-t használ mert akkor automatikusan GPU-n történik a folyamat.
- </para>
- </section>
- </section>
- <section>
- <info>
- <title>TensorFlow</title>
- </info>
- <para>
- </para>
- </section>
- </chapter>
- </part>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement