Specializarea Informatic ă [607126]
1
Ministerul Educației Na ționale si Cercetării
Științ ifice
Universitatea ”OVIDIUS” Constanț a
Facultatea de Matematică ș i Informatic ă
Specializarea Informatic ă
Sistem informatic pentru optimizarea traficului
Lucrare de licență
Coordonator științ ific:
Conf. univ. dr. Sburlan Dragoș
Absolvent: [anonimizat]
2
Cuprins
Lista Figurilor
1. Motivaț ie
1.1 Despre Android
1.2 Componentele unei aplicaț ii Android
1.3 Utilizarea resurselor externe
1.4 Rezumat
2. Starea actuală a domeniului
2.1 Principiu asemană tor
3. Soluția propusă
3.1 OpenCV Manager
3.2 Java OpenCV Loader
3.3 Structura
3.4 Clasificator Casacadă
4. Prezentarea aplicaț iei
4.1 Android Studio
4.2 Baza de date
4.3 Rezultat final
4.4 Ce modificări pot aduce aplicaț iei
4.5 Concluzii
5. Bibliografie
3
Lista figurilor
1. Android Logo
2. MCP
3. Arhitectura de software a sistemului Android
4. Exemplu zâmbet
5. OpenCV logo
6. Model de utilizare OpenCV Manager
7. Arhitectura OpenCV
8. Prima rulare a aplicaț iei
9. Rularea cu OpenCV Manager
10. Rulare cu OpenCV Manager și libră riile specific e
11. Funcț ionarea Cascadei
12. Android Studio Logo
13. Fiat 500L Detectat
14. Maș ina din viitor
4
Motivaț ie
Trăim în secolul XXI, cunoscut ș i ca secolul vitezei . Putem ajunge oriunde în lume
într-un timp foarte scurt. Î n 1873, autorul francez Jule s Verne scria cartea: “Ocolul
pământului î n 80 de zile” , un roman de aventură pentru copii. Dacă acțiunea s -ar
întampla î n prez ent titlul ar fi “Ocolul pământului în 24 de ore”. De atunci și până acum
omul a evoluat și a construit, maș ini supe r rapide, trenuri de mare viteză ș i avioane
supersonice.
Am evo luat foarte mu lt. Avem acces la orice informaț ie la orice oră cu ajutorul
internetului. Putem folosi tehnologia pentru a scuti drumuri inutile în diferite locaț ii
pentru a rezolva diverse probleme. Putem comunica foarte ușor cu persoane aflate la
celălalt colț al lumii. Cu toate acestea omul are totuși din ce î n ce mai puț in timp. Unde
sunt serile de c are ne povest eau bunicii noștrii, cele în care aveau timp să stea la povești
până târziu în cerdacul din faț a casei.
Datorită populariză rii tuturor inven țiilor și accesul uș or la ele, a vem un numă r
mare de avioane ce trebuie gestionate pentru a obține un optim și un fl ux cât mai rapid
în aer oporturi. O gestiune foarte bună a navelor și resurselor în porturi. Și bine înț eles
locul unde se pie rde foarte mult timp este in mașină. Traficul în marile oraș e ale lumii
este foarte mare. Pe lângă încurajarea populaț iei de a folosi mijloace de transport in
comun sau bicilete. Avem nevoie să gestionă m foarte bine arterele existente.
De câ nd eram mic a m fost pasionat de tot ceea ce înseamnă infrastructură. Știu
că îmi plăceau jocuri le în care simulam construcția unui oraș. Îmi p lăcea să fiu primar. Și
mereu î n acele jocuri principala problemă devenea traficul. Mă apucam să construiesc
străzi noi chiar dacă demolam jumătate de oraș. Construiam metrouri ș i tot felul de
pasaje subteran e sau supraterane. Deviam căi ferate și aș a mai departe. Totodată mi -a
plăcut să dau o mână de ajutor la orice, unde am putut. Un alt vis al meu este să ajung in
ministerul transporturilor să ajut la o mai bună infrastructură . Doar astfel îmi pot ajuta
țara.
Logistica este importantă nu doar î n acest do meniu . Este importantă in orice tip
de transport: rutier, feroviar s au maritim; este nevoie de soluții software care să
monitorizeze si să gestioneze câ t mai bine resursele.
5
Proiectul meu poate ajuta la decong estionarea traficului in marile orașe. Datori tă
statisticilor făcute cu ajutorul aplicaț iei se pot modifica semafoare treceri de pietoni. Pot
fi construite benzi speciale pentru m ijloacele de transport în comun si aș a mai departe.
Cred că prin tehnologizare putem ajunge să avem o viață mai buna î n ma rile orașe ș i nu
numai. T raficul nu este singura problemă a omenirii. Dar sper că aplicația construită va
ajuta la un trai mai bun.
6
Despre Android
Android este un sistem de operare pentru telefoanele mobile dezvoltat de către cei
de la Google bazat pe Linux kernel și destinat în principal pentru telefoanele mobile cu
touchscreen dar și pentru tablete. Interfața este în principaș bazată pe manipularea directă,
folosind gesturi tactile ce corespund diferitor acțiuni din viața reală cum ar fi glisarea,
apăsarea sau ciupirea. Un alt mod de operare este prin introducerea datelor cu ajutorul
tastaturii virtuale. Pe lângă dispozitivele cu ecran tactil, cei de la Google au dezvoltat
sisteme de operare si pentru televizoare, mașini sau ceasuri int eligente, fiecare cu o
interfață adaptată. Variante de Android există și pentru laptopuri, console, camere foto și
multe alte dispozitive.
.
Codul sursă Android a fost lansat de Google ca fiind liber. Acest sitem este foarte
popular în rândul producător ilor de dispozitive deoarece este gata, ieftin și poate rula
atât pe dispozitive simple ce nu au multe resurse la dispoziție cât și pe cele ultra
avansate de ultimă generație. Natura sa deschisă a încurajat o comunitate mare de
dezvoltatori și entuziaști s ă utilizeze codul disponibil ca bază pentru diferite proiecte.
7
Variația extinsă a dispozitivelor ce rulează face ca actualizările să ajungă foarte târziu pe
unele dispozitive sau chiar deloc pe altele.
Scurt Istoric:
Android Inc. a fost fondată în Palo Al to, California în Octombrie 2003 de către
Andy Rubin, Rich Miner, Nick Sears și Chris White. Rubin a descris proiectul Android
drept ” un potențial extraordinar în dezvoltarea dispozitivelor mobile inteligente, care
sunt mai conștiente de locația și prefer ințele proprietarului său”. Intențiile inițiale ale
companiei au fost de a dezvolta un sistem de operare avansat pentru camerele digitale,
și aceasta a fost baza terenului său pentru investitori în aprilie 2004.
Compania a decis apoi că piața camerelor fot o nu era suficient de mare pentru
obiectivele sale și, cinci luni mai târziu, și -a redirecționat eforturile și a lansat Android ca
sistem de operare pentru telefon care să rivalizeze cu Symbian și Microsoft Windows
Mobile.
În Iulie 2005, Google a achizițio nat Android Inc. pentru suma de 50 de milioane
de dolari americani. Angajații săi cheie, inclusiv Rubin, Miner și White, s -au alăturat
companiei Google ca parte a achiziției. Un prim prototip a fost lansat, acesta semănând
foarte mult cu un telefon blackBe rry, fără ecran tactil dar cu o tastatură QWERTY, însă
lansarea de Iphone în anul 2007 de către cei de la Apple a însemnat pentru cei de la
Android că trebuie să construiască și ei ceva asemănător.
Începând cu 2008, Android a înregistrat numeroase actualiz ări care au
îmbunătățit treptat sistemul de operare, adăugand noi caracteristici și remedierea
erorilor din versiunile anterioare. Fiecare lansare majoră este denumită în ordine
alfabetică după un desert primele dintre ele denumindu -se ”Cupcake” , ”Donut” ,
”Eclair” sau ”Froyo”. Motivul pentru care au ales aceste denumiri este ”Deoarece aceste
dispozitive ne fac viața atât de dulce”.
În 2010, Google a lansat seria de dispozitive Nexus, o linie în care Google a
colaborat cu diferiți producători de dispozitiv e pentru a produce noi dispozitive și a
introduce noi versiuni Android.
Google a introdus telefoanele inteligente Pixel si Pixel XL în Octombrie 2016,
comercializate ca fiind primele telefoane făcute de către ei. Acestea au înlocuit seria
Nexus. Aceștia au afirmat curând că spre finalul anului 2017 va fi lansat un nou model
Pixel.
8
Platforma hardware:
Android a fost proiectat pentru a fi compatibil cu o gamă largă de componente
hardware. Aceasta constituie o caracteristică importantă, întrucât permite
producătorilor să conceapă și să integreze elementele necesare dispozitivului Android,
făcându -l atractiv atât în rândul programatorilor cât și al consumatorilo r.
Fiind o platformă destinată dezvoltării de aplicații pentru telefoane mobile, în
realizarea ei s -a avut în vedere conservarea energiei acumulatorului precum și
gestionarea în mod eficient a resurselor de memorie existente.
Așa cum apare în , majoritat ea dispozitivelor Android au utilizat încă de la început
procesoare ARM, cunoscute a fi destul de puternice, raportat la consumul mic de
energie. Cu toate acestea,
unele corporațiile care au portat Android pe alte platforme au ales să folosească
propriile lor CPUuri (ex: Intel a utilizat propriul lor procesor Atom).
Pentru a nu suprasolicita procesorul, designerii de celulare au realizat o
componentă separată care să gestioneze complexitatea comunicării mobile. Modem -ul
baseband și radioul sunt sisteme har dware și software care furnizează dispozitivelor
Android o conexiune la telefonia mobilă, lucru ce permite atât transfer de voce, cât și de
date.
La telefoanele inteligente întâlnim două tipuri de memorie: memorie cu acces
aleator (RAM) și memorie nevolat ilă flash NAND. Conform, memoria RAM este folosită
de sistem pentru încărcarea, executarea și manipularea diferitelor părți ale sistemului
de operare, iar cea flash pentru stocarea sistemului de operare precum și a datelor
dorite de utilizator.
Datorită limitării impuse de spațiul restrâns, cele două tipuri de memorie sunt
combinate într -o singură componentă, cunoscută sub numele de pachet multicip (MCP).
9
Necesarul de memorie RAM pentru dispozitivele ce rulează minim Android
5.1 variază de la 512 MB RAM pentru ecrane cu o densitate normală până la 1,8 GB RAM
pentru ecrane cu o densitate mare. Recomandat pentru Android 4.4 este să aibă cel
puțin 512 MB de memorie RAM, în timp ce pentru dispozitivele de tip ”low RAM” este
recomandat un minim de 340 de M B.
Dispozitivele Android includ multe componente hardware opționale, inclusiv
camera foto/video, GPS, senzori de orientare, controale dedicate jocurilor,
accelerometre, giroscoape, barometre, magnetometre, senzori de proximitate, senzori
de presiune sau te rmometre. Unele componente nu sunt necesare, dar au devenit
standard pentru anumite dispozitive, și se aplică cerințe suplimentare dacă sunt
prezente. Deoarece Android a fost dezvoltat inițial ca un sistem de operare pentru
telefon, au fost necesare echipa mente fizice precum microafoane sau difuzoare. În timp,
funcția de telefon a devenit opțională.
Există mulți utilizatori ce folosesc acest sistem de operare și pe clasicele PC -uri,
fiind compatibil cu o tastatură clasică și cu un mouse. În plus față de dis ponibilitatea lor
de pe dispozitivele disponibile în comerț, versiunile similare ale componentelor Android
de pe PC sunt disponibile gratuit. Academia Chineză de inginerie a remarcat că
10
majoritatea companiilor de stat folosesc ca sistem de operare Android după o interdicție
privind utilizarea Windows 8 pe PC -urile guvernamentale.
Una dintre cele mai interesante componente hardware este sistemul de
poziționare globală (GPS) care este oferit gratis în pachetul de bază. Acesta nu identifică
doar locația telef onului, folosindu -se de sateliții GPS, dar oferă și aplicațiilor posibilitatea
de a accesa și de a se folosi de aceste informații.
Pe lângă rețeaua de telefonie mobilă existentă, Android permite conectarea la
internet prin activarea opțiunii Wireless, cât și conectarea la alte telefoane sau
dispozitive externe, prin activarea opțiunii Bluetooth.
Majoritatea telefoanelor prezintă un card de memorie detașabil care este
cunoscut prin numele de card SD (Secure Digital). La fel ca memoria flash, cardurile SD
sunt tipuri de memorie nevolatilă ce utilizează tehnologia flash NAND. Fiind concepute
ca elemente portabile, acestea aderă la anumite specificații fizice, făcând posibil
interoperabilitatea cu celelalte dispozitive.
Acest aspect constituie una dintre not ele distinctive vis -a-vis de telefoanele
Apple, care nu prezintă card SD, cidoar memorie flash cu o capacitate de la 4 GB la 32
GB. Această alegere făcută de producătorii Android nu este doar o soluție mai ieftină ci
și practică, acest card putând fi utili zat și de către alte telefoane.
Ecranul este interfața sistemului de operare pentru interacțiunea cu utilizatorul,
fiind important nu doar pentru impactul pe care îl produce din punct de vedere vizual,
cât și pentru răspunsul pe care îl oferă la atingere. Acesta este într -o continuă
dezvoltare urmărindu -se creșterea rezoluției, a luminozității, precum și capacității de
răspuns la stimulii externi.
Camera telefonului și -a depășit atribuțiile cunoscute de a face poze sau de a
filma, utilizând celelalte componente hardware pentru a -și lărgi aria de utilitate.
Majoritatea dispozitivelor combină funcționalitatea acesteia pentru a înregistra pe lângă
data și timpul la care s -a realizat o poză sau un video și coordonatele GPS la momentul
utilizării acesteia. Datele multimedia pot fi cu ușurință încărcate pe web și partajate cu
alte persoane. Interesantă este ut ilizarea acestei comoponente în domeniul realității
augmentate, camera putând fi folosită pentru a identifica un produs pe baza codului de
bare sau a un ei clădiri pe baza coordonatelor geografice sau a unor etichete.
Tastatura a fost și ea înlocuită cu una ce încorporează tehnologia touch screen.
Aceasta se poate adapta după poziția telefonului și poate suporta mai multe limbi,
11
exist ând și posibilitatea utilizării unor sisteme ce au rolul de a prezice cuvintele ce
urmează a fi scrise.
Durata de viață a bateriei constituie încă o problemă datorită aplicațiilor existente ce
sunt mari
consumatoare de energie. Se dorește depășirea acestui neajuns, existând ce rcetări în
acest se ns, după cum apare în [6], ce urmăresc realizarea unor baterii din ce în ce mai
puternice sau încărcarea bateriei fără utilizarea vreunui cablu, un exemplu fiind
încărcarea în timpul mișcării.
Majoritatea dispozitivelor Android oferă su port pentru USB (Universal Serial Bus)
cu ajutorul căruia telefoanele pot fi conectate la un calculator. Prin cablu s e poate
realiza atât încărcarea bateriei, cât și accesarea memoriei SD sau a consolei Linux de pe
dispozitiv.
Android poate detecta și schimba poziția ecranului, în funcție de felul în care
telefonul este ținut sau rotit, acest lucru fiind posibil datorită existenței unui
accel erometru care detectează aceste schimbări. Noile versiuni suportă și un giroscop,
care este mult mai senzitiv decât un accelerometru, aspect ce a dus la dezvoltarea
jocurilor pe această platformă.
Ultimele componente hardware sunt constituite de difuzorul și microfonul
telefonului, care la fel cași celelalte părți sunt perfecționate de la o versiune la alta.
Unele dispozitive prezintă d ouă sau trei microfoane, care combinate cu software -ul
Android au abilitatea d e a detecta și elimina zgomotul de fundal pentru a oferi o calitate
mai bună a sunetului.
Sistemul de operare
Pe partea de sus a kernel -ului Linux, există middleware -ul, bibliotecile și API -urile
scrise în C și software -ul aplicației care rulează pe un cadru de aplicații care include
biblioteci compatibile cu Java. Dezvoltarea kernel -ului Linux continuă independent de
bazele de c oduri sursă ale Android.
Până la versiunea 5.0, Android a folosit Dalvik pe post de mașină virtuală, cu
procesare în timp real bazată pe urmăriri. Urmărind principiul JIT bazat pe urme, Dalvik
efectuează compilația și execuția nativă a segmentelor de cod f recvent selectate de
fiecare dată când este selectată o aplicație.
12
Pentru biblioteca java, platforma Android utilizează un subset al proiectului
Apache Harmony, care a fost întrerupt acum. În Decembrie 2015, Google a anunțat că
următoarea versiune de Andro id va trece la o implementare Java bazată pe OpenJDK.
Biblioteca standard C, Bionic, a fost dezvoltată de Google în mod specific pentru
Android, ca o derivare a codului BSD standard al bibliotecii. Bionic în sine a fost proiectat
cu câteva caracteristici m ajore specifice kernelul -ului Linux. Principalele avantaje ale
utilizării Bionic în locul bibliotecii GNU C sau uClibc sunt timpul de așteptare mai mic
datorită faptului că a fost conceput pentru microprocesoare cu frecvență mai joasă.
Urmărind un model de licențiere diferit, spre sfârșitul anului 2012, Google a
schimbat stiva Bluetooth în Android de la BlueZ cu licența GPL la licența BlueDroid cu
licență Apache.
Android are o comunitate activă de dezvoltatori și entuziaști care utilizează codul
sursă Android open Source Project(AOSP) pentru a dezvolta și a distribui propriile
versiuni modificate ale sistemului de operare.
13
Componentele unei aplicaț ii Android:
În această secțiune sunt prezentate componentele slab cuplate ce formează o
aplicație Android, modul cum acestea interacționează și felul cum acestea sunt legate
prin intermediul fișierului manifest al programului din care fac parte.
Clasele de baza:
Următoarele șase elemente furnizează scheletul pe baza căruia este construită o
aplicație:
Activities (Activități) Fiecare ecran din program este o extensie a clasei Activity.
Activitățile utilizează elemente de vizualizare (Views) pentru a forma o interfață grafică
care afișează informații și răspunde la acțiunile util izatorului.
Services (Servicii) Componentele serviciilor rulează în fundal și trimit date
activităților ce permit actualizarea informațiilor expuse și declanșar ea de notificări
atunci când un eveniment așteptat are loc. Acestea pot rula chiar și atunci c ând
activitățile nu sunt active sau vizibile.
Content Providers (Furnizori de conținut) Furnizorii de c onținut sunt utilizați
pentru a administra și partaja bazele de date ale aplicației. Asta înse amnă că fiecare
aplicație poate expune date ce pot fi utilizate ulterior de alte aplicații.
Intents Cu ajutorul acestor resurse este posibilă difuzarea de mesaje la nivel de
sistem, către o activitate sau un serviciu țintă, manifestându -se astf el intenția de a avea
o acțiune efectuată.
Broadcast Rec eivers (Consumatori de intenții difuzate) Dacă se crează sau se
înregistrează un Broadcast Receiver, aplicația va începe să aștepte intențiile difuzate ce
prezintă criterial specificat și va răspunde la acțiunile acestora.
Widgets Componente vizuale ce pot fi adăugate pe ecranul telefonului mobil .
14
Notifications (Notificări) Notificările sunt utilizate în sco pul atenționării
utilizatorilor asupra unui eveniment așteptat, fără ca activitățile curente să -și piardă
focalizarea sau să fie întrerupte.
Fisierul Manifest:
Fiecare proiect Android include un fișier manifest, AndroidManifest.xml, ce
permite definirea structurii și meta datei aplicației, componentele și cerințele acesteia.
Acesta include noduri pentru fiecare dintre componentele prezentate mai sus (activități,
servicii ș.a.), filtre pentru intenții (intent filters) și permisiuni ce determină modul cum
acestea interacționează. Fișierul manifest permite totodată specificarea de meta dată cu
privire la aplicația curentă (iconițe și teme folosite), precum și noduri de nivel înalt ce
includ setări de securitate, teste și cerințe hardware ale aplicației.
Manifestul este format dintr -o rădăcină reprezentată de eticheta <manifest> ce
specifică prin atributul xmlns:android elementele de securitate ce sun t utilizate în cadrul
fișierului, prin atributele android:versionCode și android:versionName versiunea
aplicației, iar prin android:package pachetul principal al aplicației.
Următoarea listă oferă o perspectivă asupra nodurilor ce pot fi specificate în
fișierul manifest șirolul acestora în construcția aplicației:
uses -sdk marchează versiunea SDK ce trebuie să fie dispo nibilă pe un dispozitiv
Android pentru ca aplicația să funcționeze precum și versiunea pe care s -a realizat și
testat aplicația
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.facebook.meetyou"
android:versionCode="1"
android:versionName="1.0" >
uses -configuration specifică o combinație dintre meca nismele de intrare
suportate de aplicație, acestea făcând referire la tastatura disponibi lă, la modul de
navigare într -o fereastră, și la modul de atingere.
<uses -configuration android:reqTouchScreen=["finger"]
android:reqNavigation=["trackball"]
android:reqHardKeyboard=["true"]
15
android:reqKeyboardType=["qwerty" />
uses -feature ilustrează cerințele hardware ale aplicației și împiedică instalarea
acesteia pe un dispozitiv ce nu respectă aceste condiții
<uses -feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
supports -screens en umeră dimensiunile ecranelor pe care aplicația le suportă
<supports -screens android:smallScreens=["false"]
android:normalScreens=["true"]
android:largeScreens=["true"]
android:anyDensity=["false"] />
application este un nod singular ce specifică meta data aplicației precum și
componentele acesteia, constituind un container pentru noduri precum activity, service,
receiver sau provider.
activity este un nod necesar pentru fiecare activitate ce ru lează în interio rul
aplicației, fiecare nod de acest tip având posibilitatea specificării prin intermediul
nodului fiu.
<intent -filter> a elementelor intent ce pot lansa această activitate.
<activity android:name="com.facebook.android" />
<intent -filter >
<action android :name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent -filter>
</activity>
service desemnează un serviciu din aplicație:
<service
android:label="@string/send_coordinates"
android:name="service.SendC oordinates" />
provider specifică fiecare din furnizorii de date ale aplicației
16
<provider android:permission="com.paad.MY_PERMISSION"
android:name=".MyContentProvider"
android:enabled="true"
android:authorities="com.paad.myapp.MyContentProvider">
</provider>
reveiver are rolul de a înregistra un Broadcast Receiver, fără a fi nevoie de a lansa
aplicația mai întâi
<receiver android:name="sms.SmsReceiver">
<intent -filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent -filter>
</receiver>
uses -permission stabilește permisiunile hardware de care are nevoie aplicația
pentru a putea fi utilizată așa cum este așteptat și vor fi afișate utilizatorului înainte de a
fi instalată
<uses -permission android:name="android.permission .INTERNET" />
permission este utilizată pentru restricționarea accesului unei alte aplicații la o
component a sa. Pentru a avea acces la aceste elemente protejate, celelalte aplicații vor
trebui să includă în manifestul lor noduri de tip uses -permission
<permission android:name="com.paad.DETONATE_DEVICE"
android:protectionLevel="dangerous"
android:label="Self Destruct"
android:description="@string/detonate_description">
</permission>
instrumentation oferă un cadru de testare pentru componentele aplicației la momentul
execuției. Acestea oferă mijloace de monitorizare a aplicației și a interacțiunii cu
resursele
sistemului.
<instrumentation android:label="My Test"
android:name=".MyTestClass"
17
android:t argetPackage="com.paad.aPackage">
</instrumentation>
Utilizarea resurselor externe
Mediul de programare Android oferă posibilitatea separării codului de celelalte
resurse statice reprezentate prin imagini, șiruri de caractere, culori, animații sau teme ,
lucru ce permite o menținere, actualizare și administrare a aplicației mult mai eficientă.
Crearea de resurse
Resursele aplicației sunt stocate în directorul res/ din ierarhia proie ctului. Acest
dosar este format din mai multe subdirectoare ce desemnează tipurile de resurse
existente: values (valori), drawable, drawable -hdpi, drawable -ldpi, drawable -mdpi,
(resurse imagini pentru afișări DPI înalte, medii sau joase), layout (aspect) și menu
(meniu). Când are loc build -ul aplicației, aceste resurs e vor fi compilate și incluse în
pachetul aplicației, generându -se în același timp și un fișier R.class ce conține referințe
la fiecare resursă inclusă în proiect.
Crearea de resurse valori
Valorile suportate includ șiruri de caractere, culori, dimensiuni , vectori de
numere întregi sau vectori de șiruri de caractere și sunt păstrate independent în
directoare separate.
Resurse String
Resursele de tip șir de caractere au ca etichetă elementul <string> și suportă
stilizarea utilizând elemente sp ecifice limbajului HTML6. Totodată este posibilă utilizarea
de elemente string parametrizate și manipularea lor în cadrul codului utilizând metoda
String.format.
18
<string name="remove_group" formatted="false">Are you sure you want to
remove %1$s as your group?</string>
String message = String.format(getString(R.string.remove_group),
group.getName());
Resurse Color
Pentru definirea unei resurse de tip culoare, este necesară utilizarea tag-ului
<color>, specificarea numelui, precum și a codului potrivit u tilizând una dintre notațiile:
#RGB
#RRGGBB
#ARGB
#AARRGGBB ,unde A desemnează gradul de transparență, iar R, G, B valorile
culorilor roșu, verde și albastru.
<color name="opaque_blue">#00F</color>
Dimensiuni
Dimensiunile sunt utilizate atunci când se dorește crearea unor constante în ceea ce
privește frontierelor unui layout sau dimensiunea unui font de scriere. Pentru
specificarea unei resurse de dimensiune se utilizează eticheta <dimen>, urmat de
valoarea și scala de măsurare a acesteia:
px (pixelii unui ecran)
in (inci)
pt (puncte fizice)
mm (milimetri)
dp (pixeli independenți de densitate)
sp (pixeli independenți de scală)
<dimen name="standard_border">5dp</dimen>
Stiluri ș i teme:
19
Resursele pentru stiluri oferă posibilitatea realizării unei aplicații cu un aspect
consistent realizat prin intermediul definirii de culori și fonturi după cum urmează:
<style name="BaseText">
<item name="android:textSize">14sp</item>
<item name= "android:textColor">#111</item>
</style>
Elemente desenate (Drawables)
Resursele Drawable includ bitmaps, fișiere NinePatch, precum și componente
complexe de tip Drawable ce ilustrează modul cum trebuie să se comporte un element
vizual atunci când anumite acțiuni precum focalizarea sau atingerea au loc.
<?xml version="1.0" encoding="utf -8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android: state_pressed="true"
android:drawable="@drawable/accept_pressed" /> <! – apăsat –>
<item android:state_focused="true"
android:drawable="@drawable/accept_pressed" /> <! – focalizat –>
<item android:drawable="@drawable/accept" /> <! —stare normală –>
</sel ector>
Layout
Resursele Layout permit decuplarea reprezentării vizuale a aplicației de modul cum
utilizatorul acționează cu aceasta. Cel mai des mod de utilizare este definirea interfeței
grafice a unei activități.
Odată definit, aspectul unei activități poate fi setat în metoda onCreate prin apelarea
funcției
setContentView.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_pare nt">
<TextView
android:layout_width="fill_parent"
20
android:layout_height="wrap_content"
android:text="Hello World!/>
</LinearLayout >
Animaț ii
Android suportă două tipuri de animație. Animațiile Tweened pot fi folosite pentru a
roti, muta, întinde sau a fa ce un element de vizualizare să dispară, iar animațiile Frame –
By-Frame permit crearea unei animații ce afișează o serie de elemente de tip Drawable.
<animation -list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/rocket1" android:duration="500" />
<item android:drawable="@drawable/rocket2" android:duration="500" />
<item android:drawable="@drawable/rocket3" android:duration="500" />
</animation -list>
Meniuri
Meniurile reprezintă o alt ă formă de decuplare a interfeței grafice de modul de
interacționare cu utilizatorul, fiind posibilă atât definirea de meniuri de activitate, cât și
de context, fiecare meniu fiind memorat într -un fișier separat.
<?xml version="1.0" encoding="utf -8"?>
<me nu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_refresh"
android:title="Refresh" />
<item android:id="@+id/menu_settings"
android:title="Settings" />
</menu>
21
Crearea de resurse pentru diferite limbi
Una dintre motivele imperioase de externalizare a resurselor este me canismul
dinamic de selectare a resurselor. Utilizându -se o ierarhie de directoare, se pot crea
diferite valori corespunzătoare limbii și locației dispozitivului hardware utilizat. Android
va face la momentul rulării o alegere dinamică a resurselor ce urmează a fi folosite, pe
baza următorilor calificatori.
Codul țării și a rețelei mobile (MCC/MNC7) O listă cu codurile disponibile poate fi
accesata la adresa http://en.wikipedia.org/wiki/Mo bile_Network_Code (e.g.
mcc234 -mnc20)
Limba și Regiunea Limba este specificată prin 2 litere mici ISO 639 -1 ce desemnează
codul limbii, urmat opțional de regiune definită prin litera r, urmat de doua
majuscule ISO
3166 -1-alpha -2 (en -rUS)
Rezumat
Acest capitol oferă o privire de ansamblu asupra platformei Android atât din punct
de vedere hardware, cât și software. Deși unele componente variază de la un
producător la altul, structura este comună pentru fiecare dintre aceste dispozitive.
Telefonul poate fi privit asemenea unui mini computer, prezentând un procesor de
tip ARM și doua tipuri de memorie, combinate într -o singură componentă, numită
pachet multicip (MCP).
Conexiunea la rețeaua mobilă este realizată de către modem -ul baseband și radioul
existent,conectarea la internet prin activarea opțiunii Wireless, iar la alte telefoane sau
dispozitive externe prin activarea opțiunii Bluetooth sau USB. Pe lângă acestea întâlnim
o cameră performantă, un ecran touch screen și un sistem de localizare GPS.
Sistemul de operare este bazat pe nucleul Linux 2.6 și oferă software -ul necesar
pentru a coordona atât partea hardware, cât și aplicațiile Android. Librăriile sunt
accesate de programatori prin intermediul API -ului existent, iar rularea programelor se
realizează pe mașinile virtuale Dalvik.
22
Din punct de vedere structural, o aplicație Android este compusă din două elemente
principale: clasele ce descriu funționalitatea programului și resursele constituite din
aspecte, imagini, șiruri de caractere sau cul ori ce descriu interfața programului.
Definirea structurii și metadatei aplicației, componentele și cerințele acesteia sunt
precizate în fișierul manifest al aplicației, fișier fără de care o aplicație nu poate rula.
23
Starea actuala a domeniului
Aplicația este una ce se foloseș te de un dispozitiv mobil c u un sistem de operare
Android și o cameră foto/video. Este ușor de utilizat. Tot ce trebuie să facem este să
pornim dispozitivul. Vom regăsi în meniu aplicația “OpenCVCamera”. O pornim și pe
aceasta și observăm pe ecran că este pornită camera foto/video.
Așezam telefonul într -un punct fix orientat către șosea. Observăm că fiecare
mașină ce se afla in baza de date este încadrată într -un chenar. Asta înseamnă că a fost
numărată .
Pe baza numără torii pe diferite interval e de timp se poate face o analiză a
trafic ului rutier pe artera respectivă .
Principiu asemănă tor
Detectarea obiectelor nu este nimic nou. Mult e camere foto au integrat un
sistem ce detectează fețe sau zâmbete ce sunt î ncadrate. A cestea sunt binevenite
pentru ușurarea vieții de zi cu zi. Cu toții vrem să imortalizăm momentele frumoase din
viață noastră și nu ne dorim o poză în care să avem feț e posomorâ te. Tocmai de aceea
un astfel de sistem face poza doar atunci când toate persoanele ce se află în cadru
zâmbesc.
24
Există diferite aplicații ce fac acest lucru î n diferite domenii. Una din cele mai
populare este Pl@ntNet. Cu ajutorul acestei aplicaț ii putem identifica diferite plante.
După cum spun și dezvoltatorii aceasta este utilă nu doar fermerilor ci și persoanelor
pasionate de natură sau care au diferite curiozități în ceea ce priveș te flora din jurul
lor.
Un lucru inte resant la această aplicație este faptul că utilizatorii o pot
îmbunătății prin adăugarea de noi specii î n baza de date odată cu descoperirea lor.
Alte soft -uri asemănătoare sunt folosite de către cei din poliție pentru
detectarea hoț ilor, criminalilor sau teroriștilor. Din pă cate randame ntul acestora nu
este foarte bun deoarce rata de succes este de sub 50 de procente.
Cu ajutorul unei camere ș i a unui algoritm bine scris putem detecta multe
lucruri.
Un exemp lu concret poate fii cel ce o să î l prezint acum, cel de detectare al
muchiilor folosin d un simplu cod C++:
#include " opencv2/core/utility.hpp "
#include " opencv2/imgproc.hpp "
#include " opencv2/imgcodecs.hpp "
#include " opencv2/highgui.hpp "
#include <stdio.h>
using namespace cv;
using namespace std;
int edgeThresh = 1;
int edgeThreshScharr=1;
Mat image, gray, blurImage, edge1, edge2, cedge;
const char* window_name1 = "Edge map : Canny default (Sobel gradient)";
const char* window_name2 = "Edge map : Canny with custom gradient (Scharr)";
// define a trackbar callback
static void onTrackbar(int, voi d*)
25
{
blur(gray, blurImage, Size(3,3));
// Run the edge detector on grayscale
Canny (blurImage, edge1, edgeThresh, edgeThresh*3, 3);
cedge = Scalar::all (0);
image. copyTo (cedge, edge1);
imshow (window_name1, cedge);
Mat dx,dy;
Scharr (blurImage,dx, CV_16S ,1,0);
Scharr (blurImage,dy, CV_16S ,0,1);
Canny ( dx,dy, edge2, edgeThreshScharr, edgeThreshScharr*3 );
cedge = Scalar::all (0);
image. copyTo (cedge, edge2);
imshow (window_name2, cedge);
}
static void help()
{
printf(" \nThis sample demonstrates Canny edge detection \n"
"Call: \n"
" /.edge [image_name – Default is ../data/fruits.jpg] \n\n");
}
const char* keys =
{
"{help h||}{@image |../data/fruits.jpg|input image name}"
};
int main( int argc, const char** argv )
26
{
CommandLineParser parser(argc, argv, keys);
if (parser. has("help"))
{
help();
return 0;
}
string filename = parser. get<string>(0);
image = imread (filename, 1);
if(image.empty())
{
printf( "Cannot read image file: %s \n", filename.c_str());
help();
return -1;
}
cedge. create (image.size(), image.type());
cvtColor (image, gray, COLOR_BGR2GRAY );
// Create a window
namedWindow (window_name1, 1);
namedWindow (window_name2, 1);
// create a toolbar
createTrackbar ("Canny threshold default", window_name1, &edgeThresh, 100,
onTrackbar);
createTrackbar ("Canny threshold Scharr", window_name2, &edgeThreshScharr, 400,
onTrackbar);
// Show the image
27
onTrackbar(0, 0);
// Wait for a key stroke; the same function arranges events processing
waitKey (0);
return 0;
}
Cu puțină imaginație ș i instrumentele ne cesare se pot crea multe aplicații de
recunoaș tere a obiectelor.
28
Solutia propusa
Principalul utilitar folosit în dezvoltarea aplicaț iei mele este OpenCV( Open
Source Computer Vision Library). Acesta a fost lansat î n anul 2000 iar ultima versiune
stabilă este 3.2.0 apă ruta la data de 23 Decembrie 2016.
Soft-ul este gratuit ș i poate fii folos it de catre oricine. Acesta conține libră rii
pentru C, C++, Java sau Phyton și suportă diferite sisteme de operare precum Windows,
Linux, MAC OS, IOS sau Android.
Versiunea pe care eu am folosito este 2.4.9 folosind pachetul pentru Android.
OpenCV Manager
Este un serviciu Android or ientat spre administrarea binară a bibliotecii OpenCV
pe dispozitivele utilizatorilor finali. Permite partajar ea bibliotecii dinamice OpenCV între
aplicațiile de pe același dispozitiv. Managerul oferă urmă toarele avantaje:
29
1. Mai puțină utilizare a memoriei. Toate aplicațiile folosesc acele ași librării
binare și nu păstrează părțile native î n interior
2. Specificaț ii hardware o ptimizate pentru orice platformă suportată
3. Librării OpenCV de î ncredere. Toate pachetele sunt publicate in Google Play
4. Update -uri regulate.
Model de utilizare pentru utilizatorul final:
Lansă ri ult erioare ale aplicaț iilor OpenCV
1. Orice aplicaț ie ce necesită OpenCV se descarcă fara probleme din magazinul
Google Play.
2. Aplicația rulează normal la prima rulare.
3. Dacă versiunea de openCV necesară nu este instalată, OpenCV M anger
sugerează instalarea unei versiuni compatibile din magazinul Google Play.
30
4. După instalare, aplicația rulează cu succes.
Arhitectura OpenCV Manager
Managerul f luxului de lucru:
Începâ nd cu versiunea 1.7 importante pachete pentru OpenCV Manager a u fost
construite. Fiecare pachet are ca țintă un dispozitiv specific.
Prima rula re a aplicației fără OpenCV Manager sau libră rii OpenCV.
31
Cu ajutorul OpenCV Manager dar fără libră riile specific e:
32
Cu ajutorul OpenCV Manager și libră riile necesare deja instalate:
Java OpenCV Loader
Această clasă ne ajută la iniț ializarea metodelo r din libră riile OpenCV.
Boolean initDebug()
Tipul returnat este de tip Boolean. Acesta returneaza adevărat daca a fost
incărcat cu succes.
Boolean initAsync()
Incarcă și initializează libră riile OpenCV cu ajutorul OpenCV Manager
Parametrii:
Version: – specifică versiunea de OpenCV
AppContext – contextul aplicaț iei pentru conectarea la serviciu
Callback – obiect ce implementează LoaderCallbackInterface pentru a ma nevra
statutul conexiunii.
Callback In Java Activity
Un cod de baza pentru a implementa functia BaseLoaderCallback:
33
public class MyActivity extends Activity implements HelperCallbackInterface
{
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, “OpenCV loaded successfully ”);
// Create and set View
mView = new puzzle15View(mAppContext);
setContentView(mView);
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
/** Call on every app lication resume **/
@Override
protected void onResume()
{
34
Log.i(TAG, “Called onResume ”);
super.onResume();
Log.i(TAG, “Trying to load OpenCV library ”);
if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this,
mOpenCVCallBack))
{
Log.e(TAG, “Cannot connect to OpenCV Manager ”);
}
}
Clasa InstallCallbackInterface
String getPackageName() – dă nume pachetului instalat
Void install() – instalează pachetele ce au fost aprobate
Void cancel() – instala rea pachetelor a fost intreruptă
Void wait_install() – așteaptă instalarea pachetelor
Structura
OpenCV ar e o structură modulară, ceea ce înseamna că are mai mu lte pachete
incluse intr -o libră rie statică . Aceste module sunt:
core – un modul compact ce defineș te structur ile de bază, inclusiv matrici si
funcții de bază folosite de t oate modulele
imgproc – un modul de proces are de imagine ce include filtru de imagini lineare și
neliniare, transformă ri geometrice(redimensionare etc.) conversie de culori, histograme
etc.
35
video – un modul de analiză video ce include mișcare, și că utare de obiecte pe
fundal
calib3d – un modul de bază ce conține multiple transformă ri geom etrice una sau
mai multe calibrări ale camerei, estimează poziția unui obiect, mai mulți algoritmi de
core spondență și elemente 3D de reconstrucți e.
features2d – modul de detectare, descriere si mapare
objdetect – detectarea de obiecte și instanț e din clase predefinite precum : fețe,
ochi, oameni, maș ini etc.
highgui – o interfață ușor de utilizat pentru captu ră video si foto
gpu – un algoritm de accelerare GPU din diferite module ale OpenCV .
Clasifica tor Cascadă
Detectorul de obiecte a fost inițial propus de către Paul Viola si perfecționat de
către Rainer Lienhart.
Pentru î nceput, un cla sificator trebuie antrenat cu câ teva poze a obiectului ce
trebuie detectat , mașini în cazul de față , numite exemple pozitive ce trebuie să aibe
toate o dimensiune egală(20×20) ș i o serie de imagini ne gative, obiecte ce nu reprezintă
ceea ce noi căută m. Dimenisune a imaginilo r negative trebuie să fie egală cu cele
pozitive.
După ce clasificatorul este antrenat poate fii aplicat pe d omeniul de care suntem
interesaț i. Acesta va returna 1 in cazul în care obiectul a fost găsit, și 0 î n caz contrar.
Pentru a căuta obiectul în înt reaga imagine, puteți muta fereastra de căutare pe imagine
și puteți verifica fiecare locație folosind clasificatorul. Clasif icatorul este proiectat astfel
încat sa poată fi uș or redimensionat pentru a putea gă si obiectele de int ers la diferite
dimensiuni ceea ce este mult mai eficient decât redimensionarea imaginii în sine. Deci
pentru a gă si un obie ct cu o dimensiune necunoscută î n imagine, p rocedura de scanare
ar trebui făcută de mai multe ori la scă ri diferite.
36
Termenul de ‘cascadă” înseamnă prezenț a mai multor clasificatori simpli î ntr-unul
singur ce sunt ulterior aplicaț i unei singure regiuni de interes până când este îndeplinit
obiectivul să u este respins.
Termenul de “amplificat” înseamnă că în fiecare etapă a cascadei, clasificatorii
devin complexi și sunt construiți din clasificatori de bază folosind una din cele patru
tehnici de amplificare di ferite. Î n prezent sunt acceptate Adaboost Discrete, Real
Adaboost, Adaboost Gentle si Logitboost. Clasificatorii de luare a deciziilor cu cel puțin
două Frunze. Caracteristicile Haar sunt intrările în clasificatorii de bază și se calculează
după cum este definit mai jos. Algoritmul curent utilizează următoarele caracteristici ca
Haar:
Caracteristica utilizată într -un anumit clasificator este specificată p rin forma sa
(1a, 2b etc.), poziția în regiunea de interes și scara (această scală nu este aceeași cu cea
utilizată la etapa de detecție, deși aceste două scale sunt multiplicate ).
De exemplu, în cazul caracteristicii liniei a treia (2c) răspunsul se d efinește ca
diferența dintre suma pixelilor de imagine sub dreptunghiul care acoperă întreaga
caracteristică (cele două benzi albe și banda neagră în mijloc) și Suma pixe lilor de
imagine sub banda neagră înmulțită cu 3 pentru a compensa diferențele dintre
dime nsiunile zonelor. Sumele valorilor pixelilor de pe o regiune dreptunghiulară sunt
calculate rapid utilizând imagini integrale .
37
Clasa FeatureEvaluator
Clasa de bază pentru valorile caracteristicilor de calcul în clasificatorii î n cascadă.
Class CV_EXPORTS FeatureEvaluator
{
public:
enum { HAAR = 0, LBP = 1 }; // supported feature types
virtual ~FeatureEvaluator(); // destructor
virtual bool read(const FileNode& node);
virtual Ptr<FeatureEvaluator> clone() const;
virtual int getFeatureTyp e() const;
virtual bool setImage(const Mat& img, Size origWinSize);
virtual bool setWindow(Point p);
virtual double calcOrd(int featureIdx) const;
virtual int calcCat(int featureIdx) const;
static Ptr<FeatureEvaluator> create(int type);
};
Obiectul CascadeClassifier::detectMultiScale
Detectează obiecte de dimensiuni diferite în imaginea de intrare. Obiectele
detectate sunt returnate ca o listă de dreptunghiuri.
Sintaxa in C++:
void CascadeClassif ier::detectMultiScale(const Mat& image , vector<Rect>&
objects , double scaleFactor =1.1, int minNeighbors =3, int flags =0, Size minSize =Size(),
Size maxSize =Size())
38
Parametri:
Cascade – clasificator cascadă (numai OpenCV 1.x API). Acesta poate fi încărcat
din fișierul XML sau YAML utilizând Load (). Atunci cand cascada nu mai este
necesara, aceasta se elibereaza folosind cvReleaseHaarClassifierCascade(&
cascada)
Image – matricea de tip CV_8U ce conține locaț ia unde au fost detectate
obiectele
Objects – Vectorul de dreptunghi uri unde fiecare dreptunghi conț ine obiectul
detectat
scaleFact or – parametrul ce specifică cât de mult a fost redusă dimensiunea
imaginii
minNeighbors – parametrul care definește numărul de vecini pe care fiecare
dreptunghi candidat trebuie să îl păstreze
Flags – Parametrul cu același înțeles pentru o cascadă veche ca și în funcția
cvHaarDetectObjects. Nu est e folosit pentru o nouă cascadă
minSize – minimul posibil al obiectului căutat. Obiectele mai mici gă site sunt
ignorate
maxSize – maximul posibil al obiectului căutat. Obiectele mai mari gă site sunt
ignorate
Obiectul CascadeClassifier::setImage
Setează o imagine pentru a fi detectată
Sintaxa in C++: bool CascadeClassifier::setImage(Ptr<FeatureEvaluator>& feval ,
const Mat& image )
Parametri:
Feval – Indicator la evaluatorul de caracteristici utilizat pentru caracteristicile de
calcul.
Image – matricea de tip CV_8U ce conț ine loca ția unde au fost detectate
obiectele
39
Obiectul groupRectangles
Grupeaza dreptunghiurile candidatului obiect.
Sintaxa in C++: void groupRectangles(vector<Rect>& rectList , int groupThreshold ,
double eps=0.2)
Parametri:
rectList – Intrare / ieșire vector de dreptunghiuri. Vectorul de ieșire include
dreptunghiuri reținute și grupate.
groupThreshold – Numărul minim posibil de dreptunghiuri minus 1. Pragul este
utilizat într -un grup de dreptunghiuri pentru a -l păstra.
Eps – Diferența definită între laturile dreptunghiurilor pentru a le îmbina într -un
grup.
Funcția este o împachetare pentru partiția de funcții generice. Acesta definește
toate dreptunghiurile de intrare utilizând criteriile de echivalență dreptunghiulară care
combină dreptunghiuri cu dimensiuni definite și locații definite . Similaritatea este
definită de eps. Când eps = 0, nu se face nici o grupa re.
40
Prezentarea aplicatiei
Android Studio
Platforma utilizată a fost Android Studio avâ nd atașată libră ria OpenCV. Acesta
este IDE -ul oficial folosit de că tre cei de la G oogle pentru dezvoltarea aplicațiilor ce
rulează pe dispozitivele cu sistem de operare Android.
Anunțat în Mai 2013 și lansat in D ecemb rie 2014, acesta a ajuns de curând ș i la
versi unea a 3 a. Datorita faptului că proiectul meu a început încă de anul trecut, eu am
folosit versiunea a 2 a.
Fiind gratuit, ș i accesibil tututor este faptul pent ru care am optat pentru el. După
instalare si câteva configurp ri necesare, acesta este gata să ruleze.
41
Baza de date
Baza de date necesară acestei aplicații este constituită dintr -un set de p oze cu
mașini. Acestea se află într -un fiș ier de tip XML.
XML
Extensible Markup Language (XML) este un meta -limbaj de marcare recomandat
de Consorțiul Web pentru crearea de alte limbaje de marcare, cum ar fi XHTML , RDF,
RSS, MathML , SVG, OWL etc. Aceste limbaje formează familia de limbaje XML.
Ideea de proiectare XM L, subliniază simplitatea, generalitatea și utilitatea
acestuia pe internet. Este un format de date contextual cu suport puternic prin Unicode
pentru diferite limbi umane. Deși proiectarea XML se concentrează pe documente,
limbajul este folosit pe scară la rgă pentru reprezentarea structurilor de date arbitrare.
Datele XML pot fi utilizate în limbajul HTML, permit o identificare rapidă a
documentelor cu ajutorul motoarelor de căutare. Cu ajutorul codurilor javascript , php
etc. fișierele XML pot fi înglobate în paginile de internet, cel mai elocvent exemplu este
sitemul RSS care folosește un fișier XML pentru a transporta informaț iile dintr -o pagină
web către mai multe pagini web.
Avantaje:
1. extensibilitate (se pot defini noi indicatori dacă este nevoie)
2. validitate (se verifică corectitudinea structurală a datelor )
3. oferă utilizatorilor posibilitatea de a -și reprezenta datele într -un mod
independent de aplicație
4. XML este simplu și accesibil (sunt fișiere text create pentru a structura, stoca și a
transporta informația)
5. poate fi editat, modificat foarte ușor (necesită doar un editor text simplu precum
notepad, wordpad etc.)
Ce este XML?
După cum sugerează și numele, este un sistem extensibil de marcare, adică, mai
simplu, este un sistem de marcare similar cu HTML, doar că este mult mai bun și mai
dinamic, diferența esențială fiind că tagurile nu sunt definite, programatorul fiind
liber să experimenteze.
42
Ce nu este XML?
Poate este dificil de înțeles, dar fișierele XML nu fac nimic, sunt doar secvențe de
text create pentru a structura, depozita și transporta informație, de exemplu:
<notita>
<dela>Ioana</dela>
<catre>Ale x</catre>
<mesaj>Te Iubesc!</mesaj>
</notita>
În cadrul exemplului anterior se poate observa cum sunt create anumite taguri,
spre deosebire de limbajul HTML unde tagurile trebuiau să fie cunoscute pentru a putea
fi interpretate, în sistemul XML autorul poate defini propriile taguri pe care urmează să
le manipuleze dupa gustul și necesitățile proprii.
Apelare
Fișierele XML trebuie să se afle pe dispozitivul de pe care dorim să rulam
aplicaț ia. Acestea se citesc cu ajutorul secventei de cod:
casca deClassifier = new
CascadeClassifier(Environment.getExternalStoragePublicDirectory(Environment.DIRECT
ORY_DOWNLOADS)+"/cascade.xml");
43
Rezultat final
După pornire aplicația trebuie să deschidă camera și să caute maș ini. Aceste
imagini pozitive cu maș ini se afla in fisierul XML. Rezultatul este acesta:
Putem observa cum mașina este încadrată într -un dreptunghi. Semn că modelul
se află î n baza de date.
Ce modificări pot aduce aplicaț iei
Numărarea mașinilor si menținerea informațiilor într -un fișier este utilă .
Clasificarea acestora pe intervale de timp.
44
Detectare a nu doar a autovehiculelor ci ș i a pietonilor.
Pentru ca o astfel de aplicație să fie utilă este necesară actualizarea bazei de date
săptămâ nal cu fiecare model de au tovehicul ce este lansa t pe piață .
Concluzii
Consider aplicația mea utilă deoarece aceasta poate ajuta la decongestionarea
traficului în marile oraș e ale lumii. A stfel putem avea o lume mai bună prin mai puțin
timp petrecut î n traf ic și mai mult timp pentru noi ș i pentru fam iliile noastre.
Totuș i nu trebuie să uităm și de celelalte soluț ii pentru un trafic mai lejer precum
utilizarea mijloacelor de transport î n comun, utilizarea bicicletei sau chiar mersul pe jos.
45
Bibliografie
http://coding -robin.de/2013/07/22/train -your -own -opencv -haar -classifier.html
https://www.cs.auckland.ac.nz/~m.rezaei/Tutorials/Creating_a_Cascade_of_Haar –
Like_Classifiers_Step_by_Step.pdf
https://www.youtube.c om/watch?v=nv4MEliij14
https://en.wikipedia.org/wiki/OpenCV#/media/File:OpenCV_Logo_with_text_svg_ver
sion.svg
http://www.sony.com.au/article/287612/section/product/product/dsc -h50
http://docs.opencv.org/2.4.9/index.html
https://android -developers.googl eblog.com/2014/12/android -studio -10.html
https://www.skoda -storyboard.com/en/press -releases/skoda -looks -future -skoda –
vision -e-study -celebrates -world -premiere -volkswagen -group -night -shanghai/
46
http://www.phonearena.com/news/Googles -Android -OS-Past -Present -and-
Future_id21273
https://web.archive.org/web/20110205190729/http://www.businessweek.com/tech
nology/content/aug2005/tc20050817_0949_tc024.htm
http://www.pcworld.com/article/2034723/android -founder -we-aimed -to-make -a-
camera -os.html
https://www.nytimes.com/2015/05/28/technology/personaltech/a -murky -road –
ahead -for-android -despite -market -dominance.html
http://www.pcworld.com/article/254539/original_android_prototype_revealed_duri
ng_google_oracle_trial.html
https://web.archive.org/web/20120513061624/http://reviews.cnet.co.uk:80/mobile –
apps/best -custom -roms -for-the-samsung -galaxy -s2-50007658/
http://xmll ondon.com/2013/presentations/fennell/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Specializarea Informatic ă [607126] (ID: 607126)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
