Operacijski sustav Android, kojeg je prvobitno razvila tvrtka Android, Inc., temelji se na operacijskom sustavu Linux. Arhitektura operacijskog sustava Android sastoji se od nekoliko slojeva. To su: Linux jezgra, Programske knjižnice, Radno okruženje Android, Sloj aplikacijskog okvira, Aplikacijski sloj. S jednog vrlo osnovnog gledišta, lako je primjetiti da se svaka Android aplikacija sastoji od dva ključna dijela. Prvi dio uključuje takozvane “Java datoteke”, dok se drugi odnosi na grafičko korisničko sučelje oblikovano u jeziku XML. Struktura Android aplikacija stablastog je oblika. Neki od važnijih direktorija Android aplikacija su: java/, res/, Gradle Scripts/, Manifests/. Svaka Android aplikacija napravljena je od nekoliko komponenti koje mogu komunicirati s drugim komponentama unutar jedne ili između više različitih aplikacija. Te komponente su: Aktivnosti, Usluge, Primatelj namjera, Pružatelj sadržaja. REST je arhitekturni stil koji nudi standarde za komunikaciju između računala na internetu. Važno svojstvo sustava koji prate REST standard jest da oni ne ovise o stanju komponenti s kojima komuniciraju, (engl. “stateless”), što znači da poslužitelj ne mora znati ništa o stanju klijenta i obrnuto. Pri korištenju REST arhitekturnog stila klijenti šalju zahtjeve poslužitelju za dohvaćanjem nekog resursa, a poslužitelj odgovara na te zahtjeve. Zahtjev se obično sastoji od nekoliko dijelova. To su: HTTP operacija, zaglavlje, putanja do resursa i tijelo. Postoje četiri glavne HTTP operacije. To su: GET, PUT, POST, DELETE. Odgovori koji su pristižu od poslužitelja sadrže statusni kod, koji se koristi kako bi se klijenta obavijestilo o uspješnosti izvršavanja operacije. Najpopularniji statusni kodovi su: 200 – OK, 201 – CREATED, 400 – BAD REQUEST, 403 – FORBIDDEN, 404 – NOT FOUND, 500 – INTERNAL SERVER ERROR. JSON je jednostavni format za prijenost podataka. Obično se koristi kako bi se podatci prenjeli s klijenta na poslužitelj i obrnuto. JSON je poprilično jednostavan i lako razumljiv. Node.js je JavaScript radno okruženje otvorenog koda koje se može koristiti za gotovo bilo koju vrstu projekata. Node.js se temelji na događajima (engl. event- driven), neblokirajuć je i stoga ne preopretečuje sustav na kojem se izvodi (engl. lightweight). MongoDB je multiplatformska baza podataka orjentirana na rad s dokumentima koju je prvobitno razvila tvrtka MongoDB, inc. pod SSPL licencom. MongoDB se kvalificira kao NoSQL baza podataka koja pohranjuje podatke u neformalnom obliku sličnom JSON formatu. Objekti koji su pohranjeni u bazi podataka mapiraju se direktno na objekte u programskom kodu, stoga je uvijek moguće raditi samo s predefiniranim razredima objekata. MongoDB je baza podataka za koju je karakteristična visoka dostupnost, te mogućnost horizontalnog skaliranja. OpenCV (Open Source Computer Vision Library) je multiplatformska knjižnica otvorenog koda iz domene računalnog vida. Prvu inačicu izradio je Intel, a izdana je pod BSD 3-Clause licencom. Knjižnica OpenCV sadrži više od 2500 optimiranih algoritama, što uključuje i određen dio namjenjen za računalni vid i strojno učenje. OpenCV4Android knjižnica je verzija OpenCV knjižnice koja je prilagođena i optimirana za rad na mobilnim uređajima s operacijskim sustavom Android. LED Pattern Detector je mobilna aplikacija za operacijski sustav Android koja se koristi za određivanje pogreške uređaja prema frekvenciji treptanja ugrađenih LED izvora. Aplikacija se sastoji od tri aktivnosti. To su: StartupActivity, MainActivity i ResultsActivity. StartupActivity je aktivnost zadužena za proces sinhronizacije s udaljenom bazom podataka. MainActivity je aktivnost koja implementira sučelje CvCameraViewListener2 iz programske knjižnice OpenCV, čiji je zadatak da obrađuje okvire koje je kamera zabilježila. Podijenjena je u šest različitih modova. To su: InitialMode, LedDetectingMode, ManualCalibrationMode, MeasuringMode, PreAutoCalibrationMode, PreManualCalibrationMode. Zadatak aktivnosti ResultsActivity poprilično je jednostavan, a to je da izračuna frekvenciju treptanja LED izvora na temelju izmjerenog broja treptanja i duljine trajanja mjerenja, te da potom dohvati (iz lokalne baze podataka) i prikaže opis odgovarajuće pogreške. Izrada ovog rada veoma me se dojmila prvenstveno zbog toga što je obogatila moje znanje za jedno novo, veliko iskustvo dizajniranja aplikacije koja se sastoji od dva ključna dijela (korisničkog i poslužiteljskog), te ono još važnije, izrada ovog rada omogućila mi je susret s korištenjem modernih i općeprihvaćenih tehnologija kojima se predviđa još veći rast i svjetla budućnost. The Android Operating System is based on the Linux Operating System. It was originally developed by Android, Inc. The Android Operating System architecture consists of several layers. These are: Linux Kernel, Libraries, Android Runtime, Application Framework, Applications. From a very basic point of view, it is easy to notice that every single Android application consists of two key parts. The first part includes so-called “Java documents”, while the second part refers to the design of the graphical user interface (GUI) which is designed in XML (Extensible markup language) language. Android application directory has a tree-shaped structure. Some of the more important directories are: java/, res/, Gradle Scripts/, Manifests/. Each Android application is made up of several components that can communicate with other components within the same or other applications as needed. These are: Activities, Services, Broadcast receiver, Content provider. REST is an architectural style for providing standards between computer systems on the web. A very important feature of the systems that follow the REST paradigm is that they are stateless which means that the server does not need to know anything about the client state and vice versa. When using the REST architecture, clients send requests in order to modify or retrieve resources and servers send responses to those requests. A request generally consists of several parts, such as: An HTTP verb, a header, a path to source, a message body containing data. There are four basic HTTP verbs that are used in the requests: GET, PUT, POST, DELETE. Responses from the server contain status codes to alert the client to information about the success of the operation. The most popular status codes are: 200 – OK, 201 – CREATED, 400 – BAD REQUEST, 403 – FORBIDDEN, 404 – NOT FOUND, 500 – INTERNAL SERVER ERROR. JSON is a lightweight format for storing and transporting data. JSON is often used when data is sent from the server to the client and vice versa. JSON is simple and easy to understand. Node.js is an open-source and cross-platform JavaScript runtime environment built on Chrome’s V8 JavaScript engine. It can be used for almost any kind of project. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight. MongoDB is a cross-platform document-oriented database program developed by MongoDB, inc. under SSPL licence. It is classified as a NoSQL database. MongoDB stores data in flexible, JSON-like documents. The MongoDB document model maps directly to the objects in your application code, so it is always possible to work with predifined object classes. Due to the fact that MongoDB is a distributed database at its core, it has high availability and horizontal scaling possibility. OpenCV (Open Source Computer Vision Library) is an open source and cross- platform computer vision software library. It is originally developed by Intel and released under the BSD 3-Clause License. OpenCV was built to accelerate the use of machine perception in the commercial products and to provide a common infrastructure for computer vision applications. The OpenCV library consists of more than 2500 optimized algorithms, which includes a comprehensive set of computer vision and machine learning algorithms. The OpenCV4Android Library is a version of the OpenCV library that is customized and optimized for work on mobile devices with Android Operating System. LED Pattern Detector is a mobile application designed for the Android Operating System that is used to determine the device error according to the frequency of blinking of its certain LED light source. The whole application consists of three activities. That is StartupActivity, MainActivity and ResultsActivity. StartupActivity is an activity that handles remote database synchronization process. MainActivity is an activity that implements OpenCV’s CvCameraViewListener2 interface and whose main task is to process each camera frame. It is separated to six different modes. These are: InitialMode, LedDetectingMode, ManualCalibrationMode, MeasuringMode, PreAutoCalibrationMode, PreManualCalibrationMode. ResultsActivity’s task is quite simple. It calculates LED source blinking frequency based on the total blinks number and the measuring duration, after which it displays the corresponding description of the calculated frequency which was obtained from the local database. Making this paper truly impressed me because it has enriched my knowledge for a great new design experience that consists of two large parts, the client and the server. More importantly, I have learned a lot about using modern technologies from the domain of computer vision that is anticipated even greater growth and the prospective future.