Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 57.79 KB | None | 0 0
  1. <part xmlns="http://docbook.org/ns/docbook" version="5.1" xml:lang="hu"
  2.      xmlns:xlink="http://www.w3.org/1999/xlink"
  3.      xmlns:xi="http://www.w3.org/2001/XInclude">
  4.     <title>Alkalmazás</title>
  5.     <partintro>
  6.         <para>
  7.         </para>
  8.     </partintro>
  9.     <chapter>
  10.         <info>
  11.             <title>Frontend</title>
  12.         </info>
  13.         <para>
  14.             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
  15.             összeér.
  16.         </para>
  17.         <section>
  18.             <info>
  19.                 <title>Android alkalmazás</title>
  20.             </info>
  21.             <para>
  22.                 Android development, a use case az alábbi képen. Erről egy gyors eldobható protó hamarosan elérhető. A feladat a
  23.                 protó forkolása, javítása. A tényleges feladatok itt, issue-kban jelennének meg. Az alkalmazás célja az
  24.                 épülő városhoz nyersanyagok (fa, kő, stb.) vadászata kezdetben, majd komplexebb, tudást igénylő
  25.                 feladatok esetén pl. villamosmérnökök előadására beülni. Az alkalmazásban funkciói:
  26.                 <itemizedlist mark='opencircle'>
  27.                     <listitem>
  28.                         <para>térkép, hol találhatóak az erőforrások,</para>
  29.                     </listitem>
  30.                     <listitem>
  31.                         <para>base, a városunk jelenlegi állapota látható (ugyanúgy, mint a desktop alkalmazásban),</para>
  32.                     </listitem>
  33.                     <listitem>
  34.                         <para>camera, fotó készítése,</para>
  35.                     </listitem>
  36.                     <listitem>
  37.                         <para>quests, a gyűjtendő erőforrások listája, leírása,</para>
  38.                     </listitem>
  39.                     <listitem>
  40.                         <para>receptek, a következő épülethez, tudásszinthez szükséges erőforrások leírása.</para>
  41.                     </listitem>
  42.                 </itemizedlist>
  43.             </para>
  44.             <para>A feladat koordinátora: Besenczi Renátó</para>
  45.             <itemizedlist>
  46.                 <listitem>
  47.                     <para>Besenczi Renátó</para>
  48.                 </listitem>
  49.                 <listitem>
  50.                     <para>Domokos László</para>
  51.                 </listitem>
  52.                 <listitem>
  53.                     <para>Németh Dániel Viktor</para>
  54.                 </listitem>
  55.                 <listitem>
  56.                     <para>Szabó Bence</para>
  57.                 </listitem>
  58.                 <listitem>
  59.                     <para>Jakab Ádám</para>
  60.                 </listitem>
  61.                 <listitem>
  62.                     <para>Kokas István</para>
  63.                 </listitem>
  64.                 <listitem>
  65.                     <para>Abai Richárd</para>
  66.                 </listitem>
  67.                 <listitem>
  68.                     <para>Iványi Dániel</para>
  69.                 </listitem>
  70.                 <listitem>
  71.                     <para>Török Antal</para>
  72.                 </listitem>
  73.                 <listitem>
  74.                     <para>Csermely Attila</para>
  75.                 </listitem>
  76.                 <listitem>
  77.                     <para>Kádár Gergely</para>
  78.                 </listitem>
  79.                 <listitem>
  80.                     <para>Halmai Bianka Zsófia</para>
  81.                 </listitem>
  82.                 <listitem>
  83.                     <para>Szőcs Gábor</para>
  84.                 </listitem>
  85.                 <listitem>
  86.                     <para>Fekete Sándor</para>
  87.                 </listitem>
  88.                 <listitem>
  89.                     <para>Ozsváth Jonathán</para>
  90.                 </listitem>
  91.             </itemizedlist>
  92.             <section>
  93.                 <info>
  94.                     <title>A fejlesztési folyamat</title>
  95.                 </info>
  96.                 <para>
  97.                     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
  98.                     implementálja, illetve a Questekhez illusztrálja a GUI elképzelést. A Quest valamint a Recepies menüben az adatokat az DataContent
  99.                     osztállyal tudjuk feltölteni.
  100.                     A feladat tárolója: <link xlink:href="https://github.com/rbesenczi/esamurftandroid">itt</link> elérhető.
  101.                     A teendők első listája az alábbi:
  102.                     <itemizedlist mark='opencircle'>
  103.                         <listitem>
  104.                             <para>Loginactivity készítése, mely Facebook és Google bejelentkezést is lehetővé tesz (optionálisan LinkedIn).</para>
  105.                             <itemizedlist mark='opencircle'>
  106.                                 <listitem>
  107.                                     <para>A feladatban részt vevők:</para>
  108.                                 </listitem>
  109.                                 <listitem>
  110.                                     <para>Halmai Bianka Zsófia</para>
  111.                                     <para>
  112.                                         <link xlink:href="https://github.com/Dreamfire/RFT_Login_Facebook.git">
  113.                                             Egy egyszerű facebook login.
  114.                                         </link>
  115.                                     </para>
  116.                                 </listitem>
  117.                                 <listitem>
  118.                                     <para>Németh Dániel Viktor</para>
  119.                                     <para>
  120.                                         <link xlink:href="https://github.com/nemethd13/EsamuRFTAndroid.git">
  121.                                             Facebook autentikáció megvalosítása.
  122.                                         </link>
  123.                                     </para>
  124.                                 </listitem>
  125.                                 <listitem>
  126.                                     <para>Szőcs Gábor</para>
  127.                                     <para>
  128.                                         <link xlink:href="https://github.com/szocs08/RFT-Google-Auth">
  129.                                             Egy egyszerű Google authentication.
  130.                                         </link>
  131.                                     </para>
  132.                                 </listitem>
  133.                                 <listitem>
  134.                                     <para>Török Antal</para>
  135.                                     <para>
  136.                                         <link xlink:href="https://github.com/anti234/EsamuRFTGoogleFacebookLogin.git">
  137.                                             Facebook és google autentikáció megvalosítása, és adatok lekérése a facebook vagy google felhasználótól.
  138.                                         </link>
  139.                                     </para>
  140.                                 </listitem>
  141.                                 <listitem>
  142.                                     <para>Kosztur Norbert</para>
  143.                                     <para>
  144.                                         <link xlink:href="https://github.com/KoszturNorbert/rft_app">
  145.                                             Egy fragment alapú Facebook login megoldás androidban.
  146.                                             Bejelentkezés után lekérdezi a Facebook-tól a felhasználó nevét, és email címét.
  147.                                         </link>
  148.                                     </para>
  149.                                 </listitem>
  150.                             </itemizedlist>
  151.                         </listitem>
  152.                         <listitem>
  153.                             <para>Az EsamuRFTService osztály behuzalozása, tehát Networking, Firebase vagy sajátszerverrel kapcsolat.</para>
  154.                         </listitem>
  155.                         <listitem>
  156.                             <para>Protobuf alapú adatkommunikáció saját szerverrel.</para>
  157.                             <itemizedlist mark='opencircle'>
  158.                                 <listitem>
  159.                                     <para>A feladatban részt vevők:</para>
  160.                                 </listitem>
  161.                                 <listitem>
  162.                                     <para>Jakab Ádám</para>
  163.                                 </listitem>
  164.                                 <listitem>
  165.                                     <para>A protobuf még nincs kész, de sima string alapó kommunikáció már megy a saját forkomban.</para>
  166.                                 </listitem>
  167.                                 <listitem>
  168.                                     <para>
  169.                                         <link xlink:href="https://github.com/Adiss/RFTAndroidServerClient/tree/master/AndroidPCServer/src/hu/experiment_team">
  170.                                         PC szerver.
  171.                                     </link>
  172.                                     </para>
  173.                                 </listitem>
  174.                                 <listitem>
  175.                                     <para>
  176.                                         <link xlink:href="https://github.com/Adiss/EsamuRFTAndroid">
  177.                                             Android kliens
  178.                                         </link>
  179.                                     </para>
  180.                                 </listitem>
  181.                             </itemizedlist>
  182.                         </listitem>
  183.                         <listitem>
  184.                             <para>Képküldés Protobuffal vagy egyéb módon saját szerverre vagy Firebase-re</para>
  185.                             <itemizedlist mark='opencircle'>
  186.                                 <listitem>
  187.                                     <para>A feladatban részt vevők:</para>
  188.                                     <para>Abai Richárd</para>
  189.                                 </listitem>
  190.                                 <listitem>
  191.                                     <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>
  192.                                     <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>
  193.                                 </listitem>
  194.                                 <listitem>
  195.                                     <para>
  196.                                         <link xlink:href="https://github.com/rabai/proto-test">
  197.                                             Protobuf objektum kezelés (lásd readme a lépésekről)
  198.                                         </link>
  199.                                     </para>
  200.                                     <para>A Protobuff objektumok egyszerű előállítására az alábbi plugint használtam:
  201.                                         <link xlink:href="https://github.com/os72/protoc-jar-maven-plugin">
  202.                                             protoc-jar-maven-plugin
  203.                                         </link>
  204.                                         , mely buildelés közben elvégzi a pom-ban megadott elérésekre a generálást. Licencelése: Apache 2.0.
  205.                                     </para>
  206.                                 </listitem>
  207.                             </itemizedlist>
  208.                         </listitem>
  209.                         <listitem>
  210.                             <para>Háttérben futó folyamat, mely nyomon követi a GPS helyadatok változását.</para>
  211.                             <itemizedlist mark='opencircle'>
  212.                                 <listitem>
  213.                                     <para>A feladatban részt vevők:</para>
  214.                                 </listitem>
  215.                                 <listitem>
  216.                                     <para>Fekete Sándor</para>
  217.                                 </listitem>
  218.                                 <listitem>
  219.                                     <para>A helyadatok lekérdezése működik, az adatok további feldolgozásra rendelkezésre állnak.</para>
  220.                                 </listitem>
  221.                                 <listitem>
  222.                                     <para>
  223.                                         <link xlink:href="https://github.com/Xundi007/EsamuRFTAndroid">
  224.                                             Android kliens
  225.                                         </link>
  226.                                     </para>
  227.                                 </listitem>
  228.                             </itemizedlist>
  229.                             <table frame='all'><title>Nyersanyagok fellelhetősége</title>
  230.                                 <tgroup cols='3' align='left' colsep='1' rowsep='1'>
  231.                                     <colspec colname='c1'/>
  232.                                     <colspec colname='c2'/>
  233.                                     <colspec colname='c3'/>
  234.                                     <thead>
  235.                                         <row>
  236.                                             <entry align="center">Nyersanyag</entry>
  237.                                             <entry align="center">Latitude</entry>
  238.                                             <entry align="center">Longitude</entry>
  239.                                         </row>
  240.                                     </thead>
  241.                                     <tbody>
  242.                                         <row>
  243.                                             <entry>Hús</entry>
  244.                                             <entry>47.542942</entry>
  245.                                             <entry>21.639459</entry>
  246.                                         </row>
  247.                                         <row>
  248.                                             <entry>Víz</entry>
  249.                                             <entry>47.543260</entry>
  250.                                             <entry>21.640283</entry>
  251.                                         </row>
  252.                                         <row>
  253.                                             <entry>Gabona</entry>
  254.                                             <entry>47.545015</entry>
  255.                                             <entry>21.640026</entry>
  256.                                         </row>
  257.                                         <row>
  258.                                             <entry>Gyümölcs</entry>
  259.                                             <entry>47.545531</entry>
  260.                                             <entry>21.640060</entry>
  261.                                         </row>
  262.                                         <row>
  263.                                             <entry>Fa</entry>
  264.                                             <entry>47.544516</entry>
  265.                                             <entry>21.639070</entry>
  266.                                         </row>
  267.                                         <row>
  268.                                             <entry></entry>
  269.                                             <entry>47.546004</entry>
  270.                                             <entry>21.639580</entry>
  271.                                         </row>
  272.                                         <row>
  273.                                             <entry>Vas</entry>
  274.                                             <entry>47.541169</entry>
  275.                                             <entry>21.639610</entry>
  276.                                         </row>
  277.                                         <row>
  278.                                             <entry>Homok</entry>
  279.                                             <entry>47.541514</entry>
  280.                                             <entry>21.638607</entry>
  281.                                         </row>
  282.                                     </tbody>
  283.                                 </tgroup>
  284.                             </table>
  285.                         </listitem>
  286.  
  287.                         <listitem>
  288.                             <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>
  289.                             <itemizedlist mark='opencircle'>
  290.                                 <listitem>
  291.                                     <para>A feladatban részt vevők:</para>
  292.                                 </listitem>
  293.                                 <listitem>
  294.                                     <para>Ozsváth Jonathán</para>
  295.                                 </listitem>
  296.                                 <listitem>
  297.                                     <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
  298.                                     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>
  299.                                 </listitem>
  300.                                 <listitem>
  301.                                     <para>
  302.                                         <link xlink:href="https://github.com/JonathanOzsvath/EsamuRFTAndroid">
  303.                                             Forrás kód
  304.                                         </link>
  305.                                         <link xlink:href="https://drive.google.com/open?id=0Byr79JRLHxp1eDdHQ0tLbDZxSFE">
  306.                                             Apk fájl
  307.                                         </link>
  308.                                     </para>
  309.                                 </listitem>
  310.                             </itemizedlist>
  311.                         </listitem>
  312.  
  313.                         <listitem>
  314.                             <para>Hibakezelések, tesztelések (nincs net, nincs gps, stb...)</para>
  315.                         </listitem>
  316.                         <listitem>
  317.                             <para>Google Vision API vagy Mobile Vision API kipróbálása</para>
  318.                             <itemizedlist>
  319.                                 <listitem>
  320.                                     <para>A feladatban részt vevők:</para>
  321.                                     <para>Domokos László</para>
  322.                                 </listitem>
  323.                                 <listitem>
  324.                                     <para>Github link:
  325.                                         <link xlink:href="https://github.com/domokoslaci94/RFT-test">link</link>
  326.                                     </para>
  327.                                     <para>
  328.                                         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.
  329.                                     </para>
  330.                                 </listitem>
  331.             </itemizedlist>
  332.                         </listitem>
  333.                         <listitem>
  334.                             <para>UI tervezése</para>
  335.                             <itemizedlist mark='opencircle'>
  336.                                 <listitem>
  337.                                     <para>Inventory</para>
  338.                                     <para>A feladatban részt vevők: Kokas István</para>
  339.                                     <para>Github link:
  340.                                         <link xlink:href="https://github.com/Pisti03/EsamuRFTAndroid.git">
  341.                                             link
  342.                                         </link>
  343.                                     </para>
  344.                                     <para>
  345.                                         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:
  346.                                     </para>
  347.                                     <para>
  348.                                         <inlinemediaobject>
  349.                                             <imageobject>
  350.                                                 <imagedata fileref="images/inventory1.png" scale="25"/>
  351.                                             </imageobject>
  352.                                         </inlinemediaobject>
  353.                                         <inlinemediaobject>
  354.                                             <imageobject>
  355.                                                 <imagedata fileref="images/inventory2.png" scale="25"/>
  356.                                             </imageobject>
  357.                                         </inlinemediaobject>
  358.                                     </para>
  359.                                 </listitem>
  360.                                 <listitem>
  361.                                     <para>Minimap és swipe</para>
  362.                                     <para>A feladatban részt vevők: Iványi Dániel, Kokas István</para>
  363.                                     <para>Github link:
  364.                                         <link xlink:href="https://github.com/Sleis/EsamuRFTAndroid.git">
  365.                                             link
  366.                                         </link>
  367.                                     </para>
  368.                                     <para>
  369.                                         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.
  370.                                     </para>
  371.                                     <para>
  372.                                         <mediaobject>
  373.                                             <imageobject>
  374.                                                 <imagedata fileref="images/minimap.png" scale="25"/>
  375.                                             </imageobject>
  376.                                         </mediaobject>
  377.                                     </para>
  378.                                 </listitem>
  379.                             </itemizedlist>
  380.                         </listitem>
  381.                         <listitem>
  382.                             <para>Egyéb feladatok (specifikálása később)</para>
  383.                         </listitem>
  384.                     </itemizedlist>
  385.                 </para>
  386.             </section>
  387.         </section>
  388.         <section>
  389.             <info>
  390.                 <title>Desktop alkalmazás</title>
  391.             </info>
  392.             <para>
  393.                 Klasszikus RTS nézet, ahol az épülő város látható, néhány épülettel. Ezekhez az épületekhez
  394.                 gyűjthetünk erőforrásokat a mobil alkalmazással. Az alkalmazás funkciói:
  395.                 <itemizedlist mark='opencircle'>
  396.                     <listitem>
  397.                         <para>térkép, hol találhatóak az erőforrások,</para>
  398.                     </listitem>
  399.                 </itemizedlist>
  400.             </para>
  401.             <para>A feladat koordinátora: Takács Tamás</para>
  402.             <para>
  403.                 <emphasis role="strong">A feladatban részt vevők: </emphasis>
  404.             </para>
  405.             <itemizedlist mark='opencircle'>
  406.                 <listitem>
  407.                     <para>Takács Tamás</para>
  408.                 </listitem>
  409.                 <listitem>
  410.                     <para>Balogh Ádám</para>
  411.                 </listitem>
  412.                 <listitem>
  413.                     <para>Badó Gergely József</para>
  414.                 </listitem>
  415.                 <listitem>
  416.                     <para>Szilágyi István Tamás</para>
  417.                 </listitem>
  418.                 <listitem>
  419.                     <para>Veres Dávid</para>
  420.                 </listitem>
  421.                 <listitem>
  422.                     <para>Lipusz Péter Dávid</para>
  423.                 </listitem>
  424.             </itemizedlist>
  425.             <para>
  426.                 <emphasis role="strong">Részfeladatok: </emphasis>
  427.             </para>
  428.             <itemizedlist mark='opencircle'>
  429.                 <listitem>
  430.                     <para>Játéklogika fejlesztés</para>
  431.                     <para>Játékbeli funkcionalitások elkészítése, üzletilogika.</para>
  432.                 </listitem>
  433.                 <listitem>
  434.                     <para>HUD/GUI fejlesztés</para>
  435.                     <para>Játék menü, gombok és a hozzáuk tartozó interakció kezelése.</para>
  436.                 </listitem>
  437.                 <listitem>
  438.                     <para>C++-os hálózati kommnikáció fejlesztése</para>
  439.                     <para>Kommunikáció megvalósítása a Firebase, Azure vagy saját protokoll alapú szerverrel.</para>
  440.                 </listitem>
  441.                 <listitem>
  442.                     <para>Modellezés és animálás</para>
  443.                     <para>Blenderben való modellek készítése épületek, egységek és egyéb grafikus játékelemek.</para>
  444.                 </listitem>
  445.             </itemizedlist>
  446.  
  447.             <section>
  448.                 <info>
  449.                     <title>GitHub repository</title>
  450.                 </info>
  451.                 <para>
  452.                     <link xlink:href="https://github.com/DeeGort/UDRFT-UE-Client">
  453.                         UDRFT-UE-Client
  454.                     </link>.
  455.                 </para>
  456.             </section>
  457.  
  458.             <section>
  459.                 <info>
  460.                     <title>A fejlesztési folyamat</title>
  461.                 </info>
  462.                     <section>
  463.                         <info>
  464.                             <title>Kezdet</title>
  465.                         </info>
  466.                         <para>
  467.                             <informalfigure>
  468.                                 <mediaobject>
  469.                                     <imageobject>
  470.                                         <imagedata fileref="images/ue4_test.jpg" scale="25"/>
  471.                                     </imageobject>
  472.                                     <caption>
  473.                                         <para>
  474.                                             Kezdeti kép egy eldobható prototípusról.
  475.                                         </para>
  476.                                     </caption>
  477.                                 </mediaobject>
  478.                             </informalfigure>
  479.                         </para>
  480.                     </section>
  481.                     <section>
  482.                         <info>
  483.                             <title>C++-os hálózati kommnikáció fejlesztési folyamata</title>
  484.                         </info>
  485.                         <section>
  486.                             <info>
  487.                                 <title>Google Firebase-alapú kapcsolat implementálása C++ API-val</title>
  488.                             </info>
  489.                             <para>
  490.                                 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.
  491.                             </para>
  492.                             <para>
  493.                                 <quote>The Firebase C++ SDK provides a C++ interface on top of Firebase for iOS and Android.</quote>
  494.                                 <link xlink:href="https://firebase.google.com/docs/cpp/setup">API doc</link>
  495.                             </para>
  496.                             <para>
  497.                                 Unreal Engine 4-ben lehet azonban Androidra deployolni,
  498.                                 de teljesen más mint egy java-ban írt Andorid alkalmazás készítése és ez eléggé megnehezítheti a dolgot.
  499.                                 Az SDK előfeltételei sem olyanok amik fennállnak egy Unreal Engine 4 project esetén.
  500.                             </para>
  501.                             <para>
  502.                                 Fórumokon lehet találni próbálkozásokat, de megoldást nem sikerült találni.
  503.                                 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,
  504.                                 de a jövőben lehetséges, hogy lesz.
  505.                             </para>
  506.                             <para>
  507.                                 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,
  508.                                 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.
  509.                             </para>
  510.                             <section>
  511.                                 <info>
  512.                                     <title>Konklúzió</title>
  513.                                 </info>
  514.                                 <para>
  515.                                     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,
  516.                                     mint amennyi rendelkezése áll.
  517.                                 </para>
  518.                             </section>
  519.                             <section>
  520.                                 <info>
  521.                                     <title>Lehetéges megoldás</title>
  522.                                 </info>
  523.                                 <para>
  524.                                     Firebase REST API
  525.                                 </para>
  526.                                 <para>
  527.                                     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.
  528.                                     Lásd következő szekció.
  529.                                 </para>
  530.                             </section>
  531.                         </section>
  532.                         <section>
  533.                             <info>
  534.                                 <title>Google Firebase-alapú kapcsolat REST API-val manuálisan</title>
  535.                             </info>
  536.                             <para>
  537.                                 Első lépésben be kell szerezni a Firebase-es accounton lévő adatbázisnak az API key-ét.
  538.                             </para>
  539.                             <para>
  540.                                 API key a firebase.google.com-on a <emphasis>Konzol / Project Setting / Web API Key</emphasis> helyen érhető el,
  541.                                 de a projektnek a google.services.json fájlban is megtalálható.
  542.                             </para>
  543.                             <para>
  544.                                 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.:
  545.                                 <emphasis role="strong">https://&lt;firebase-project&gt;.firebaseio.com/Test1.json</emphasis>
  546.                                 Ezeket authentikálva tudjuk elérni, amit az URL kiegészítésével érjük el egy authentikált felhasználó tokenjével.
  547.                             </para>
  548.                             <para>
  549.                                 Egy végpontról történő érték lekérése, authentikált felhasználó tokennel:
  550.                             </para>
  551.                             <para>
  552.                                 <emphasis role="strong">https://&lt;firebase-project&gt;.firebaseio.com/&lt;végpont.json&gt;?auth=&lt;authentikált felhasználó tokenje&gt;</emphasis>
  553.                             </para>
  554.                             <para>
  555.                                 Az authentikált felhasználó tokenjét a következő módon szerezhetjük be, ami esetünkben a logint jelenti.
  556.                             </para>
  557.                             <para>
  558.                                 A tokent egy HTTPS POST response-jában kapjuk vissza az "idToken"-hez tartozó értékként.
  559.                                 Az URL amire postolni kell: <emphasis role="strong">https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=&lt;API key&gt;</emphasis>
  560.                                 A headerben meg kell adni a következőket: "Accept: application/json", "Content-Type: application/json".
  561.                                 A body a felhasználó nevet és jelszavát tartalmazza majd a json-ben:
  562.                             </para>
  563.                             <blockquote>
  564.                             <literallayout>
  565. {
  566.     "email": &lt;felhasznalonev&gt;,
  567.     "password": &lt;jelszo&gt;,
  568.     "returnSecureToken": "true"
  569. }
  570.                         </literallayout>
  571.                         </blockquote>
  572.                         </section>
  573.                         <section>
  574.                             <info>
  575.                                 <title>Google Firebase-alapú kapcsolat implementálása REST API-val C++ Demo</title>
  576.                             </info>
  577.                             <para>
  578.                                 Az órán bemutatott demó program, ami megvalósítja a REST-es kommunikációt C++-szal az előző szekció szerint.
  579.                                 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.
  580.                             </para>
  581.                             <para>
  582.                                 A program bekéri az API keyt, felhasználónevet és a jelszót, majd lekér/generáltat egy tokent.
  583.                                 A visszakapott tokennel authentikálva egy megadott végpontról lekér az értéket.
  584.                             </para>
  585.                             <para>
  586.                                 A program futtatásához fordítani kell a libcurlt-t a következő lírás szerint windowson:
  587.                                 <link xlink:href="http://www.codepool.biz/build-use-libcurl-vs2015-windows.html">libcurl fordítása windowon</link>
  588.                             </para>
  589.                             <para>
  590.                                 <link xlink:href="https://github.com/DeeGort/Simple-CPP-Firebase-REST-API/">GitHub Repository</link>
  591.                             </para>
  592.                         </section>
  593.                         <section>
  594.                             <info>
  595.                                 <title>Google Firebase-alapú kapcsolat implementálása UE4-ben REST API-val</title>
  596.                             </info>
  597.                             <para>
  598.                                 Hamarosan.
  599.                             </para>
  600.                         </section>
  601.                     </section>
  602.             </section>
  603.            
  604.             <section>
  605.                 <info>
  606.                     <title>A modellezési folyamat</title>
  607.                 </info>
  608.                 <section>
  609.                     <info>
  610.                         <title>Cél</title>
  611.                     </info>
  612.                     <para>
  613.                         A folyamat célja olyan modellek megalkotása, melyek az asztali alkalmazás látványvilágát színesítik majd.
  614.                     </para>
  615.                 </section>
  616.                 <section>
  617.                     <info>
  618.                         <title>Egy modell elkészülésének folyamata</title>
  619.                     </info>
  620.                     <para>
  621.                         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.
  622.                     </para>
  623.                     <para>
  624.                         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.
  625.                     </para>
  626.                     <para>
  627.                         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.
  628.                     </para>
  629.                     <para>
  630.                         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.
  631.                     </para>
  632.                     <para>
  633.                         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.
  634.                     </para>
  635.                     <para>
  636.                         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.
  637.                     </para>
  638.                 </section>
  639.                 <section>
  640.                     <info>
  641.                         <title>Pár kép a modellekről</title>
  642.                     </info>
  643.                     <para>
  644.                         <inlinemediaobject>
  645.                             <imageobject>
  646.                                 <imagedata fileref="images/arrow.jpg" scale="35" />
  647.                             </imageobject>
  648.                         </inlinemediaobject>
  649.                         <inlinemediaobject>
  650.                             <imageobject>
  651.                                 <imagedata fileref="images/axe.jpg" scale="35" />
  652.                             </imageobject>
  653.                         </inlinemediaobject>
  654.                         <inlinemediaobject>
  655.                             <imageobject>
  656.                                 <imagedata fileref="images/bench.jpg" scale="35" />
  657.                             </imageobject>
  658.                         </inlinemediaobject>
  659.                         <inlinemediaobject>
  660.                             <imageobject>
  661.                                 <imagedata fileref="images/bow.jpg" scale="35" />
  662.                             </imageobject>
  663.                         </inlinemediaobject>
  664.                         <inlinemediaobject>
  665.                             <imageobject>
  666.                                 <imagedata fileref="images/chair.jpg" scale="35" />
  667.                             </imageobject>
  668.                         </inlinemediaobject>
  669.                         <inlinemediaobject>
  670.                             <imageobject>
  671.                                 <imagedata fileref="images/shield.jpg" scale="35" />
  672.                             </imageobject>
  673.                         </inlinemediaobject>
  674.                         <inlinemediaobject>
  675.                             <imageobject>
  676.                                 <imagedata fileref="images/street_lamp.jpg" scale="35" />
  677.                             </imageobject>
  678.                         </inlinemediaobject>
  679.                         <inlinemediaobject>
  680.                             <imageobject>
  681.                                 <imagedata fileref="images/sword.jpg" scale="35" />
  682.                             </imageobject>
  683.                         </inlinemediaobject>
  684.                         <inlinemediaobject>
  685.                             <imageobject>
  686.                                 <imagedata fileref="images/table.jpg" scale="35" />
  687.                             </imageobject>
  688.                         </inlinemediaobject>
  689.                         <inlinemediaobject>
  690.                             <imageobject>
  691.                                 <imagedata fileref="images/tree.jpg" scale="35" />
  692.                             </imageobject>
  693.                         </inlinemediaobject>
  694.  
  695.                         <inlinemediaobject>
  696.                             <imageobject>
  697.                                 <imagedata fileref="images/arrow2.jpg" scale="35" />
  698.                             </imageobject>
  699.                         </inlinemediaobject>
  700.                         <inlinemediaobject>
  701.                             <imageobject>
  702.                                 <imagedata fileref="images/barrel.jpg" scale="35" />
  703.                             </imageobject>
  704.                         </inlinemediaobject>
  705.                         <inlinemediaobject>
  706.                             <imageobject>
  707.                                 <imagedata fileref="images/bow2.jpg" scale="35" />
  708.                             </imageobject>
  709.                         </inlinemediaobject>
  710.                         <inlinemediaobject>
  711.                             <imageobject>
  712.                                 <imagedata fileref="images/castle.jpg" scale="35" />
  713.                             </imageobject>
  714.                         </inlinemediaobject>
  715.                         <inlinemediaobject>
  716.                             <imageobject>
  717.                                 <imagedata fileref="images/catapult.jpg" scale="35" />
  718.                             </imageobject>
  719.                         </inlinemediaobject>
  720.                         <inlinemediaobject>
  721.                             <imageobject>
  722.                                 <imagedata fileref="images/cauldron.jpg" scale="35" />
  723.                             </imageobject>
  724.                         </inlinemediaobject>
  725.                         <inlinemediaobject>
  726.                             <imageobject>
  727.                                 <imagedata fileref="images/chest.jpg" scale="35" />
  728.                             </imageobject>
  729.                         </inlinemediaobject>
  730.                         <inlinemediaobject>
  731.                             <imageobject>
  732.                                 <imagedata fileref="images/dagger.jpg" scale="35" />
  733.                             </imageobject>
  734.                         </inlinemediaobject>
  735.                         <inlinemediaobject>
  736.                             <imageobject>
  737.                                 <imagedata fileref="images/factory.jpg" scale="35" />
  738.                             </imageobject>
  739.                         </inlinemediaobject>
  740.                         <inlinemediaobject>
  741.                             <imageobject>
  742.                                 <imagedata fileref="images/smithy.jpg" scale="35" />
  743.                             </imageobject>
  744.                         </inlinemediaobject>
  745.                         <inlinemediaobject>
  746.                             <imageobject>
  747.                                 <imagedata fileref="images/wall.jpg" scale="35" />
  748.                             </imageobject>
  749.                         </inlinemediaobject>
  750.                     </para>
  751.                 </section>
  752.             </section>
  753.            
  754.         </section>
  755.     </chapter>
  756.     <chapter>
  757.     <info>
  758.         <title>Backend</title>
  759.         </info>
  760.         <para>
  761.             Fő feladatként megemlíthetjük a userkezelést, erőforrás-gazdálkodást, stb. Konkrétabb irányok,
  762.             melyeket ki kell próbálni (ezek közül választjuk majd a számunkra ideálisat):
  763.             <itemizedlist mark='opencircle'>
  764.                 <listitem>
  765.                     <para>Google Firebase</para>
  766.                 </listitem>
  767.                 <listitem>
  768.                     <para>Microsoft Azure</para>
  769.                 </listitem>
  770.                 <listitem>
  771.                     <para>Saját szerveres backend</para>
  772.                 </listitem>
  773.             </itemizedlist>
  774.             Az a) és b) pontokat laboron egyeztettük, itt (is) az első lépés a licenc szempontú felhasználhatóság
  775.             vizsgálata (lásd esamu doksi licencmérnökség részt). Gyors protók formájában szemléltessük a
  776.             funkciókat (pl adatbázisba kommitolás egy egyszerű Java vagy C++ parancssoros progi formájában). A
  777.             desktop ill. mobil alkalmazásba ezután illeszthető.
  778.             A saját szerveres backend hamarosan élesedik, az irodai gépemen (formális engedély van a
  779.             tanszékvezetőmtől, egyeztetek a rendszergazdákkal). Itt fő feladat egy enterprise java alapú
  780.             erőforrásmegosztás (pl. Glassfish clustering) alkalmazhatóságának vizsgálata, természetesen élesítve
  781.             a szerveren, egyúttal userkezelés, ....
  782.         </para>
  783.  
  784.         <section>
  785.             <info>
  786.                 <title>Webes alkalmazás szerver és asztali kliens</title>
  787.             </info>
  788.             <para>
  789.                 A feladat egy szerver és egy kliens program megírása java nyelven. A kliens protocol buffers használatával
  790.                 adatokat küld a szervernek, ami lementi a kapott adatokat MongoDB-be. A szervernek minél több kliens
  791.                 egyidejű kiszolgálását ki kell bírnia.
  792.                 <itemizedlist mark='opendcircle'>
  793.                     <listitem>
  794.                         <para>Maven</para>
  795.                     </listitem>
  796.                     <listitem>
  797.                         <para>GlassFish</para>
  798.                     </listitem>
  799.                     <listitem>
  800.                         <para>MongoDB</para>
  801.                     </listitem>
  802.                     <listitem>
  803.                         <para>Java Socket</para>
  804.                     </listitem>
  805.                     <listitem>
  806.                         <para>Multithreading</para>
  807.                     </listitem>
  808.                 </itemizedlist>
  809.                 Az alkalmazás szerver része java servlet-ekre épít. Maven-el egy war fájlt készítünk belőle, amelyet
  810.                 a szerver gépen már futó GlassFish szerverre telepítünk fel (deploy). Az elkészült szerver alkalmazást a
  811.                 szerver gép a http://localhost:8080/glassfish/welcome címen érheti el.
  812.                 A welcome page-en 3 gomb található. A "Toggle socket server" első megnyomása elindítja a socket szervert
  813.                 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,
  814.                 majd ismét a megadott portra figyel és újabb kliensekre vár. A kliensektől ObjectStream-en keresztül
  815.                 kapja meg az adatokat, melyeket a protocol buffers által generált osztály beolvas és átalakít.
  816.                 Ezután a generált osztály objektumánk segítségével létrehozzuk a tényleges,lementhető objektumot,
  817.                 melyet át is adunk a MongoDB-nek mentésre.
  818.                 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,
  819.                 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
  820.                 válaszüzenetet a kliensnek, majd az aktuális klienst kiszolgáló szál leáll.
  821.                 A "Toggle socket server" gomb ismételt megnyomásának hatására a socket szerver abbahagyja a megadott portra figyelést
  822.                 és leáll. Azonban a még futó kliens-kiszolgálásokat ez nem szakítja meg.
  823.                 Megjegyzés, hogy az ExitSignal szerializálható osztály számára egy serialVersionUID explicit megadása kötelező,
  824.                 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
  825.                 és Linux alatt is lefordítjuk, különböző JDK verzióval, a generált serialVersionUID szinte biztos, hogy el fog térni,
  826.                 így szerver oldalon az objektum deszerializációja kivételt fog dobni.
  827.                 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
  828.                 üzenettel jelzi.
  829.                 A kliens alkalmazás egy egyszerű java socket program saját main metódussal, elindítása független a felhasznált
  830.                 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)
  831.                 meg lehet állítani, mely hatására a kliens elküldi az exit signal-t, majd leáll.
  832.                 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
  833.                 által bepakolt összes element, utóbbi pedig kiírja, hogy jelenleg mennyi lementett adat van az adatbázisban.
  834.             </para>
  835.             <para>
  836.                 Az alkalmazás github-linkje:
  837.                 https://github.com/joey11111000111/GlassFish-with-Java-and-maven
  838.             </para>
  839.             <para>A feladat koordinátora: Kovács Tamás</para>
  840.             <itemizedlist>
  841.                 <listitem>
  842.                     <para>Kovács Tamás</para>
  843.                 </listitem>
  844.                 <listitem>
  845.                     <para>Pintér Dávid</para>
  846.                 </listitem>
  847.                 <listitem>
  848.                     <para>Turi Lajos</para>
  849.                 </listitem>
  850.             </itemizedlist>
  851.         </section>
  852.  
  853.         <section>
  854.             <info>
  855.                 <title>Google Firebase</title>
  856.             </info>
  857.             <para>A feladat koordinátora: </para>
  858.             <para>A feladatban részt vevők:</para>
  859.  
  860.             <itemizedlist mark='opencircle'>
  861.                 <listitem>
  862.                     <para>Kovács Ádám</para>
  863.                 </listitem>
  864.                 <listitem>
  865.                     <para>Jánosi György</para>
  866.                 </listitem>
  867.             </itemizedlist>
  868.  
  869.             <para>
  870.                 Példaprogram a következőkre: Firebase Authentication, Realtime Database.
  871.                 Google bejelentkezéssel, kép feltöltéssel.
  872.             </para>
  873.             <para>
  874.                 <link xlink:href="https://github.com/kovi77/firebaseExample">GitHub Repository</link>
  875.             </para>
  876.             <section>
  877.                 <info>
  878.                     <title>A fejlesztési folyamat</title>
  879.                 </info>
  880.                     <section>
  881.                         <info>
  882.                             <title>Kezdet</title>
  883.                         </info>
  884.                     </section>
  885.                         <section>
  886.                             <info>
  887.                                 <title>Google Firebase példaprogram</title>
  888.                             </info>
  889.                             <para>
  890.                                 A Firebase használatóhoz szükséges Google Account majd egy Google Project, amit regisztrálunk a Firebase konzolban.
  891.                                 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.
  892.                             </para>
  893.                             <para>
  894.                                 Az implementálása osztályok importálásával történik, a Gradle, és az AndroidManifest beállítása után.
  895.                             </para>
  896.                             <para>
  897.                                 A példaprogram lehetővé tesz bejelentkezést Email és jelszó párossal, valamit Google Account-tal.
  898.                                 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.
  899.                                 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.
  900.                                 Az adabázisban minden felhasználó egyedi azonosítóval rendelkezik,
  901.                                 aminek leszármazott gyermekei a mentett adatok. Az adabázis írásához és olvasásához bejelentkezés szükséges.
  902.                             </para>
  903.                             <para>
  904.                                 (update)
  905.                             </para>
  906.                             <para>
  907.                                 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.
  908.                             </para>
  909.                         </section>
  910.             <section>
  911.                 <info>
  912.                    <title>Jelenlegi helyzet</title>
  913.                 </info>
  914.                 <para>
  915.                     A példaprogram átemelése az Esamu android prototípusba meg történt. Átmenetileg használva az ott implementált bejelentkezéssel,
  916.                     ahoz, hogy a lekért koordinátákat menteni tudjuk az adatbázisba, felhasználókként.
  917.                 </para>
  918.                 <para>
  919.                     Ez utóbbi ki lett egészítve a resource managementtel, ahol különböző nyersanyagokat tudunk hozzáadni a firebase adatbázishoz.
  920.                     Az adatbázis kommunikáció egy android serviceben van megvalósítva.
  921.                 </para>
  922.                 <para>
  923.                     <link xlink:href="https://github.com/gyuri0/EsamuRFTAndroid">GitHub Repository</link>
  924.                 </para>
  925.             </section>
  926.             </section>
  927.         </section>
  928.  
  929.         <section>
  930.             <info>
  931.                 <title>Microsoft Azure</title>
  932.             </info>
  933.             <para>A feladat koordinátora: </para>
  934.             <para>A feladatban részt vevők: Jánosi György</para>
  935.  
  936.             <para>
  937.                 Az elképzelés egy Azure Cloud Service létrehozása, amely egy RESTful-hoz hasonló módon kommunikál a klienssel,
  938.                 megtámogatva egy adatbázissal.
  939.                 Sajnos az Azure student verziójában az Azure Cloud Service-nek nincs ingyenes verziója.
  940.             </para>
  941.         </section>
  942.     </chapter>
  943.     <chapter>
  944.         <info>
  945.             <title>Egyéb feladatok</title>
  946.         </info>
  947.         <para>
  948.             TODO
  949.         </para>
  950.         <section>
  951.             <info>
  952.                 <title>Tesztelés</title>
  953.             </info>
  954.             <para>
  955.                 Alkalmazások, backend tesztelése.
  956.             </para>
  957.             <para>A feladat koordinátora: Bodonyi Andrea</para>
  958.             <para>A feladatban részt vevők: </para>
  959.             <section>
  960.                 <info>
  961.                     <title>A tesztelői folyamat</title>
  962.                 </info>
  963.                 <para></para>
  964.             </section>
  965.         </section>
  966.     </chapter>
  967.     <chapter>
  968.         <info>
  969.             <title>Próbálkozások a gépi tanulás témaköréből</title>
  970.         </info>
  971.         <para>
  972.             A feladatban részt vevők: Kovács Roland, Besenczi Renátó
  973.         </para>
  974.         <section>
  975.             <info>
  976.                 <title>Samu fejlesztések</title>
  977.             </info>
  978.             <para>
  979.             </para>
  980.         </section>
  981.         <section>
  982.             <info>
  983.                 <title>OpenCV neurális hálók</title>
  984.             </info>
  985.             <para>
  986.                 Pár szót a Cascading Classifierekről
  987.  
  988.     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.
  989.     A Cascading egy többlépcsős(stages) tanulási módszer.
  990.     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.
  991.     Ezt a folyamatot leggyakrabban a képfeoldogozás területén(image processing) használják
  992. </para>
  993. <para>
  994.     OpenCV Cascade Classifier Training
  995.    
  996.     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.  
  997. </para>
  998. <section>
  999. <info><title>A folyamat</title></info>
  1000. <para>
  1001.    
  1002.     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).
  1003.     É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.
  1004.    
  1005.     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
  1006.  
  1007.     perl bin/createsamples.pl positives.txt negatives.txt samples 1700 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1
  1008.     -maxyangle 1.1  maxzangle 0.5 -maxidev 40 -w 24 -h 24"
  1009.  
  1010.  
  1011.     Ez után egy python scripttel egybe olvasszuk őket az opencv által felismerhető bináris fájba(.vec)
  1012.  
  1013.     python ./tools/mergevec.py -v samples/ -o samples.vec
  1014. </para>
  1015.  
  1016. <para>
  1017. És most jöhet a cascade training:
  1018.    
  1019.     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
  1020.    
  1021.     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.
  1022.             </para>
  1023.             </section>
  1024.         </section>
  1025.         <section>
  1026.             <info>
  1027.                 <title>TensorFlow</title>
  1028.             </info>
  1029.             <para>
  1030.             </para>
  1031.         </section>
  1032.     </chapter>
  1033. </part>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement