Dezvoltarea de Agenti Inteligenti Pentru Realizarea de Prezentari Panoramice
CUPRINS
CAP.I INTRODUCERE
I.1. Obiective (cum am ajuns si cum am realizat <pers a IIIa >)
I.2. Structura lucrării
CAP. II AGENȚI INTELIGENȚI
În inteligența artificială, o entitate autonomă ce observă prin senzori, acționează asupra unui mediu folosindu-se de elementele de acționare și care orientează activitatea spre atingerea unor obiective aprioric alese, se numește agent intelligent. Acesta poate să învețe sau să ultilizeze informațiile deja deținute pentru a-și atinge obiectivele. Un agent intelligent poate fi simplu sau foarte complex, un exemplu ar fi o mașină reflex cum ar fi un termostat, dar pot fi mult mai asemănători unei ființe umane, se poate comporta ca o comunitate de oameni ce desfășoară activități în comun pentru atingerea scopului.
O altă definiție a agenților inteligenți este una mai schematică, ca un sistem funcțional abstract ce se aseama unui program de calculator. Din acest motiv, aceștia pot fi uneori numiți agenți abstracți inteligenți pentru a se face o diferența în implementările lor reale ca sisteme biologice, informatice sau organizații. Alte definiții subliniază termenul de autnom și de aici se preferă utilizarea lui în descrierea agenților inteligenți. Alții precum Russell și Norvig, consideră că acest comportament regizat este esența inteligenței și de aici preferă să utilizeze termenul împrumutat din economie de ,,agent rațional”.
Agenții inteligenți din inteligența artificială sunt strâns legați de agenții din economie. Versiuni ale acceptiunii de agent inteligent se studiază în diferite științe precum cele cognitive, în etică, filosofia rațiunii practice, dar și în multe modelări socio-cognitive, simulări sociale interdisciplinare de calculator.
Agenții inteligenți sunt legați, de asemenea, de agenții software( programe autonome de calculatoare ce îndeplinesc sarcini în numele utilizatorului). În informatică, prin definițiile lui Russell și Norvig, agentul inteligent este un termen folosit pentru a desemna un agent software ce posedă inteligență indiferent dacă acesta este sau nu rațional. Un exemplu ar fi programele autonome utilizate pentru asistență operator sau cele de data mining(deseori numite roboți) cărora li se spune și ,,agenți inteligenți”.
II.1. Istoric
W. McCulloch și W. Pitts în 1943 derulează primele cercetări în domenil Inteligentei Artificiale, ce propuneau modelul unor neuroni artificiali, fiecare fiind caracterizat ca fiind fie activ fie pasiv. Neuronul, se putea activa doar dacă primea un număr suficient de stimuli de la neuronii vecini. Modelul era bazat pe logică propozitionala propusă de Russell și Whitehead, pe fiziologia de bază și funcționarea neuronilor în creier, precum și pe teoria lui Turing a computatiei. Modelul arată că o rețea de neuroni interconectați puteau realiza orice funcție computațională și că utilizarea structurilor simple de rețea puteau reda toate conexiunile logice. McCulloch și Pitts sugereaza că fenomenul de învățare putea fi anifestat de anumite rețele neuronale.
În anii 1950 Alan Turing și Claude Shannon scriau pentru mașinile von Neumann programne de șah. În același timp, în 1951, Marvin Minsky și Dean Edmonds, doi studenți ai departamentului de matematică al Universității Princeton, construiau primul calculator bazat pe o rețea neuronală.
O altă figura importantă a Inteligenței Artificiale , John McCarthy, a fost formată tot la Princeton. După ce a absolvit, acesta s-a mutat la colegiul Darthmouth, care urma să devină locul oficial al nașterii Inteligenței Artificiale. Pentru a canaliza cercetările americane ce priveau teoria automatelor, rețelele neuronale și studiul inteligenței, McCarthy i-a convins pe Claude Shannon, Nathanael Rochester și Claude Shannon să îl ajute. Aceștia au organizat pentru două luni în 1956 un atelier de lucru la Colegiul Dartmouth. Printre cei 10 participanți se numără și Ray Solomon de la MIT, Arthur Samuel de la IBM, Oliver Selfridge de la MIT și Trechard More de la Princeton.
Acest atelier nu a dus la nicio descoperire nouă, dar a ajutat ca cercetătorii să se cunoască între ei. În următorii 20 de ani, aceste personalități urmate de elevii lor, colegii de la MIT, CMU, Stanford și IBM au dominat acest domeniu. Convenția lui McCarthy de a adopta numele dat acestui domeniu, Inteligență Artificială, este, poate, singurul lucru rămas de la acest atelier pentru cel mai mult timp.
În 1958, mutarea ulterioară a lui McCarthy la MIT, a adus multe contribuții într-un singur an. Limbajul la nivel înalt Lisp, creat în laboratorul Memo nr.1 de la MIT, a devenit limbajul dominant de programare în inteligența artificială. În același an, McCarthy publică o carte intitulată ,,Programe cu bun simt”, în care descria un program ipotetic privit ca primul sistem complet de inteligență artificială numit ,,Advice Talker”. Acesta se folosea de cunoștințele deja dobândite pentru a soluționa probleme. Spre deosebire de alte programe deja existente, era construit pentru folosirea cunoștințelor generale ale lumii. Ca exemplu, putea arăta cum niște axiome simple dădeau programului posibilitatea de a genera un plan pentru a ajunge la aeroport ca să prinzi un avion. Programul era construit ca într-o rulare obișnuită să poată acceptă noi axiome, lucru care îi dădea posibilitatea de a strânge noi cunoștințe în domenii neatinse până atunci, dar fără o reprogramare. Înglobarea principiilor centrale ale modului în care este reprezentată informația dar și raționamentul, adică, utilitatea reprezentării explicicta și formală a lumii și a modului în care un agent poate influență lumea dar și posibilitatea de a lucra cu aceste reprezentări utilizând procese deductive era o caracteristică a acestui program. Uimitor este cum, după mai bine de 40 de ani, atât de multe idei din lucrarea prezentată în 1958 sunt relevante încă și astăzi.
În prima parte a cercetării inteligenței artificiale s-a ridicat ideea rezolvării de probleme folosind mecanisme generale de căutare ce legau pași elemetari de logică pentru găsirea soluțiilor complete. Abordările au fost numite metode slabe deoarece utilizau prea puține informații despre domeniu. Performanțele acestor metode sunt de asemenea slabe pentru mai multe domenii complexe. Programul DENDRAL creat în 1969 de Buchanan la Stanford, era un exemplu al acestei abordări. Programul a fost important deoarece era primul ce prezența informția-intensivă. Se folosea de anumite reguli ce aveau un scop precis. Mai târziu se dorea ca sistemele să încorporeze modul de reprezentare al programului Advice Talker al lui McCarthy și anume o separare perfectă a informației, ce era reprezentată sub forma unor reguli de raționament și comportament.
Personalități de la Stanford alături de Feigenbaum, având aceste idei în minte, au inițiat HPP, ,,Heuristic Programming Project”, ce investiga limita noii metodologii a sistemelor expert, adică până unde se putea aplicarea în alte domenii de expertiză umană. În domeniul diagnosticării medicale s-a făcut următorul efect major. Dezvoltarea lui MYCIN pentru diagnosticarea infecțiilor sângelui a fost realizată de Feigenbaum, Dr.Edward Shortlife și Buchanan. Utilizând 450 de reguli, programul era capabil să desfășoare analize mult mai bine decât medicii primari, însă la același nivel cu anumiți experți. Au urmat alte abordări în domeniul diagnosticii medicale. Saul Amare, utilizând date explicite ale modului de îmbolnăvire, realizează un proiect de diagnosticare a bolilor pe calculatoare în biomedicină, la Universitatea Rutgers. În 1979 , un sistem cu raționament probabilistic numit PROSPECTOR generează publicitate enormă găsind un depozit mare de molibden, recomandând explorarea unui sit geologic.
Necesitatea cercetării acestui domeniu a fost demonstrată și pentru înțelegerea limbajului natural. Deși a existat un mare interes pentru sistemul SHRDLU al lui Winograd utilizat în înțelegerea limbajului natural, necesitatea analizei sintactice a cauzat unele probleme ce au apărut în cercetările anterioare ale domeniului mașinilor translatoare.
Sistemul LUNAR, construit de William Woods în 1973, dădea posibilitatea geologilor de a cere în engleză informații despre rocile aduse de pe misiunea lunară Apollo. Acest sistem a fost primul program utilizat de oameni, înafara autorilor, pentru accesarea bazelor de date.
Datorită utilizării unui număr foarte mare de aplicații ce foloseau scheme pentru reprezentarea informației, s-au dezvoltat în număr mare limbaje pentru facilitarea acestui lucru. Anumite limbaje se bazau pe logică, precum limbajul Prolog, popular în Europa iar Planner care era utilizat în America.
RI, a avut succes comercial fiind primul sistem expert. Dezvoltat la Digital Equipment Corporation de către McDermott și dat publicității în 1982. Utilizarea programului se făcea pentru configurarea cererilor destinate sistemelor de calcul, iar în 1986 i-a salvat companiei 40 de milioane pe an. În perioada aceea, orice companie mare, americană, avea un grup de angajați în inteligență artificială care cercetau aceste tehnologii.
Cartea ,,Probabilistic Resoning in Intelligent Systems”- Raționamentul Probabilistic în Sistemele Inteligente, publicată în 1988 de Judea Pearl, însemna o nouă acceptare a teoriei deciziei și probabilisticii în inteligența artificială și este urmată de o creștere a interesului simțit de Peter Cheeseman în articolul ,,În apărarea probabilității” – ,,În Defense of Probability”, apărut în 1985. Rețeaua bazată pe opinie ( părere ), ca formalism, a fost inventată în vederea posibilității unui raționament eficient în combinarea probelor nesigure.
Primul mare program ce învinge un mare maestru la șah, Arnold Denker, este HITECH, în 1989 la Berlin.
În 1993 este dezvoltat primul sistem capabil să conducă o mașină pe autostrada. Sistemul, pentru a stabili distanță se folosește de un sistem cu laseri și de un sonar și își strânge informațiile necesare de la camere video. Aceste date combinate cu experiență acumulată din încercări anterioare ajută la calcularea modului în care trebuie condusă mașină.
Pegasus, un program de recunoaștere a vorbirii, lansat în 1994, este utilizat pentru confirmarea rezervărilor, motiv pentru care scade prețul transportului cu autocarul. Deși un cuvânt din 10 este înțeles greșit, acesta are capacitatea de a-și reveni din aceste erori deoarece este capabil să înțeleagă formarea dialogurilor.
Metodologia și conținutul cercetărilor din inteligență artificială s-a schimbat în ultimii ani. Construirea pe teorii existente este mai obișnuită decât propunerea unora noi precum și bazarea pe rezultate experimentale solide și teroreme riguroase în detrimentul intuiției și dezvoltarea aplicațiilor relevante lumii reale decât exemple de jucării.
II.2. Clasificare
După gradul de inteligență și capacitatea percepută, Russell și Norvig grupează agenții în cinci clase:
1. Agenți simpli de reflex
2. Agenți de reflex bazați pe modele
3. Agenți bazați pe scop
4. Agenți bazați pe utilitate
5. Agenți de învățare
Agenții simpli de reflex acționează doar pe baza percepției actuale, ignorând istoricul percepției trecute. Funcția de agent se bazează pe regula condiției de acțiune: dacă există stare atunci există și o acțiune.
Această funcție agent este reușită doar atunci când mediul este complet observabil. Unii agenți reflex pot conține informații cu privire la starea lor actuală ce le permite eliminarea condițiilor în care servomotoarele sunt deja declanșate.
Buclele infinite sunt adesea invitabile pentru acești agenți, ce operează în medii parțial observabile. În cazul în care agentul poate alege aleator acțiunile sale este posibil să scape de buclele infinite.
Agenții de reflex bazați pe modele pot manipula un mediu parțial observabil. Starea actuală este stocată în interiorul agentului pentru menținerea unui fel de structură ce descrie acea parte a lumii ce nu poate fi văzută. Această cunoaștere despre „cum funcționează lumea” este numită un model al lumii, de unde și numele de agent bazat pe model.
Un agent de reflex bazat pe model trebuie să mențină un fel de model intern ce depinde de istora percepției și reflectă, prin urmare, cel puțin unele din aspectele neobservate ale stării actuale. Acesta alege o acțiune în același mod ca un agent simplu de reflex.
Agenții bazați pe scop extid și mai mult capacitățile agenților bazați pe modele, prin utilzarea informațiilor „poartă”. Informațiile scopului descriu acele situații de dorit. Acest lucru permite agentului să aleagă o modalitate din mai multe posibilități, selecția ajunge că o stare a porții. Căutarea și planificarea sunt subdomenii ale inteligenței artificiale destinate găsirii de secvențe de acțiune care realizează obiectivele agentului.
În unele cazuri, egentii bazați pe scop, par a fi mai puțin eficienți, fiind mai puțin flexibili, deoarece cunoașterea ce susține decizia este reprezentată în mod explicit și poate fi modificată.
Agenții bazați pe scop disting doar între stările scop sau non-scop. Este posibil să se definească o măsură a cât este de dorită o anumită stare. Această măsură poate fi obținută prin folosirea unei funcții a utilității care să mapeze o stare cu o utilitate a stării respective. O măsură mai generală a performanței ar trebui să permită o comparație între stările diferite ale lumii în funcție de cât de mulțumit va fi agentul de starea respectivă. Termenul de utilitate poate fi folosit pentru a descrie cât de fericit este agentul.
Un agent bazat pe utilitate rațională alege acțiunea care maximizează utilitatea așteptată a acțiunii. Agentul așteaptă să obțină, în medie, toate probabilitățile și utilitățile pentru fiecare rezultat. Un agent bazat pe utilitate trebuie să modeleze și să urmărească mediul sau, sarcinile care au fost implicate în mari procese de cercetare, reprezentare, raționament și învățare.
Învățarea este un avantaj ce permite agenților să funcționeze inițial în medii necunoscute și să devină mai competenți decât ar fi putut deveni de unul singur în momentul inițial. Cea mai importantă diferența este între „elemetul de învățare”, ce este responsabil pentru realizarea de îmbunătățiri, și „elementul de performanță”, ce este responsabil cu selecția acțiunilor externe.
Elementul de învățare folosește feedback-ul de la „critic” pentru a determina modul în care acționează agentul iar elementul de performanță determina modul în care ar putea acționa mai bine pe viitor. Elementul de performanță este ceea ce am considerat anterior a fi întregul agent: preia percepții și decide asupra acțiunilor.
Ultima componentă a agenților de învățare este „generatorul de probleme” care este responsabil pentru sugestia de acțiuni ce vor conduce către experiențe noi și pline de informații.
Alte clase de agenți:
Conform altor surse agenții ce vor fi menționați pot face parte că sub-agenți ai agenților inteligenți sau a agenților inteligenți compleți.
• Agenți de decizie – care sunt orientați spre luarea deciziilor;
• Agenții de intrare – care procesează intrările senzorilor – de exemplu agenți bazați pe rețele neuronale;
• Agenții de prelucrare – care rezolva o problema că recunoaștere a vorbirii;
• Agenții spațiali – care se referă la lumea fizică reală;
• Agenții mondiale – care încorporează o combinație a tuturor celorlalte clase de agenți pentru a permite comportamente autonome;s
• Agenți credibil – care prezintă o personalitate prin utilizarea unui caracter artificial (agentul este încorporat) pentru interacțiune;
• Agenți fizici – care este o entitate care percepte prin senzori și acționează prin elemente de acționare;
• Agenți temporali – care poate utiliza informații stocate în timp pentru a oferi instrucțiuni sau acte de date către un program de calculator sau ființă umană și poate să preia intrări de program pentru a-și regla următoarele sale comportamente.
II.3. Utilizări
Agenții inteligenți sunt programați ca asistenți online automați, în care ei fucntioneaza astfel încât să perceapă necesitățile clienților pentru realizarea unui serviciu clienți individual. Un astfel de agent este realizat la baza de un sistem de dialog, un avatar dar și de un sistem expert pentru a furniza o expertiză specifică utilizatorului.
CAP. III TEHNOLOGII INTERNET OF THINGS
Internetul Obiectelor (IO) reprezintă interconectarea dispozitivelor informatice de calcul, identificate în mod unic și integrate în infrastructura existentă a internetului. De obicei se așteaptă ca IO să ofere soluții de conectivitate avansată a dispozitivelor, sistemelor și serviciilor, care merg dincolo de comunicarea mașină-la-mașină și care acoperă o varietate de protocoale, domenii și aplicații.
Interconectarea acestor dispozitive integrate (inclusiv obiectele inteligente) este de așteptat să devină automată în aproape toate domeniile și în același timp să permită realizarea de aplicații avansate precum o rețea inteligenta.
Obiectele, în IO, se pot referi la o varietate de dispozitive precum implanturile de monitorizare cardiacă, trasponderele utilizate la ferme, scoicile electrice în apele de coasta, automobilele cu senzori integrați, sau dispozitivele ce asista pompierii în căutare și salvare.
Exemple curente în piață includ sistemele termostat inteligente și mașinile de spălat / uscătoarele ce utilizează WiFi pentru monitorizarea de la distanță. Pe lângă multitudinea de domenii noi accesate pentru conectarea la Internet, IO este de așteptat să genereze cantități mari de date din diverse locații ce sunt conectate la o viteză foarte mare făcând astfel necesară o mai bună indexare, stocare și procesare a acestor date.
Conceptul de internet al obiectelor este legat de modul unic de identificare și reprezentare virtuală a obiectelor într-o structura asemănătoare cu cea a Internetului.
Acest nou concept este o soluție inovatoare de realizare a unei aalize cantitative a tuturor lucrurilor care ne înconjoară. Condiția necesară a Internetulu obiectelor este aceea a identificării prin radiofrecvență (RFID).
Dacă toate obiectele și persoanele din viata reală ar fi echipate cu identificatori și smart-tag-uri, acestea ar putea fi gestionate și inventariate de calculatoare.
Oamenii au atenție, precizie și timp limitat iar din această cauza nu sunt foarte buni la stocarea și captarea informațiilor despre lumea înconjurătoare. O viziune alternativă asupra IO, din punctul de vedere al semanticii WEB, se concentrează în schimb pe a face toate lucrurile adresabile prin protocoale de nume deja existente, cum ar fi URI. Obiectele, în sine, pot fi referite în momentul de față prin alți agenți, de exemplu prin servere centralizate foarte puternice care acționează fără conversie pentru proprietarii lor umani.
Se consideră că internetul obiectelor este rețeaua de obiecte fizice care conțin tehnologii integrate pentru comunicare și simț și care pot să interacționeze cu starea lor interioară sau cu mediul extern.
IO este un concept revoluționar, aflat la început, dar care, în câțiva ani, va deveni un important subiect de cercetare.
Pentru dezvoltarea de aplicații IO este obligatoriu să se dezvolte o serie de tehnologii și soluții, în care software-ul gratuit și liber joacă un rol important , oferind atât arhitectură hardware și software ce permit dezvolatarea de aplicații open source pentru IO.
IO este compus din mai mulți senzori, platforme de aplicații, platforme de utilizatori și așa mai departe, creând un ecosistem comunitate. Un senzor este o componentă ce colectează și furnizeaa informații despre lucruri dintr-o zona specificată.
IO înseamnă să conectezi în timp real oameni și obiecte din lumea fizică reală împreună cu o rețea de detecție, raționament și acțiune. IO conectează oameni și lucruri, împreună cu aplicații și produse software.
III.1. M2M / REST/ MQTT
M2M
Machine to Machine (M2M) se referă la tehnologii ce permit masinilor sa comunice prin ambele sisteme wireless și prin cablu cu alte dispozitive de același tip . M2M este un termen larg, deoarece nu specifică rețele wireless sau prin cablu, informații sau tehnologii de utilizat. M2M este considerat o parte integrată a Internetului Obiectelor și aduce multiple beneficii pentru industrie și afaceri, deoarece are o gama largă de aplicații, cum ar fi în automatizări industriale, logistică, Smart Grid, Smart Cities, sănătate, apărare etc. mai ales petru monitorizare dar și cu scop de control.
În scopul sprijinirii dezvoltarii rapide și adopția în întreagă lume a IO, precum și a creșterii continue a tehnologiei M2M dar și a aplicațiilor sale la scară largă în viitor, este necesară o adoptare și implementare la nivel global a Protocolului Internet versiune 6(IPv6). Acesta este necesar deoarece toți senzorii și cititorii automați de identificatori necesari pentru a face IO o realitate au nevoie de un spațiu de adrese foarte mare. Chiar dacă nivelul ofertei actuale de adrese Ipv4 nu va fi epuizat curând, dimensiunea IPv4 în sine nu este suficient de mare pentru a susține cerințele viitoare ale IO.
M2M include cazul instrumentației industriale – ce cuprinde un dispozitiv ( cum ar fi un senzor) pentru a capta un eveniment ( cum ar fi temperatura, nivelul unui inventar etc.) care este transmis printr-o rețea (wireless, cu fir sau hibrid) la o aplicație (program software), ce convertește evenimentul captat în informații semnificative. Această comunicare a fost inițial realizată printr-o rețea de mașini la distanță care preiau informația și o distribuie către un hub central pentru analiză și o redirecționează către un computer personal.
Cu toate acestea, comunicarea modernă M2M s-a extins dincolo de o conexiune unu la unu și s-a transformat într-un sistem de rețele care transmite datele la computerele personale. Extinderea rețelelor IP din întreagă lume a făcut mult mai facilă comunicarea M2M și a redus cantitatea de energie și de timp necesară pentru ca informațiile să fie transmise între mașini.
Aceste rețele aduc noi oportunități de afaceri și legături între consumatori și producători în ceea ce privește produsele vândute.
Rețelele fără fir care sunt interconectate pot servi pentru a îmbunătăți producția și eficiența în diverse domenii, inclusiv utilaje care funcționează în construcția de mașini și care permit dezvoltatorilor de produse să afle când anumite produse trebuie să fie luate pentru întreținere și din ce motiv. Astfel de informații servesc la eficientizarea realizării de produse pe care consumatorii le cumpără și reușesc să le mențină la un standard de maximă eficientă.
Piață industrială a M2M trece printr-o transformare rapidă deoarece întreprinderile realizează din ce în ce mai mult valoarea conectării oamenilor, dispozitivelor, senzorilor și mașinilor dispersate geografic.
În ziua de azi, industriile de ulei și gaz, agricultură de precizie, domeniul militar, guvernul, industria de fabricație și utilitățile publice printre altele, folosesc tehnologiile M2M pentru o multitudine de aplicații. Companii cunoscute au permis tehnologiilor complexe și efeiciente să furnizeze funcționalități precum transmiterea mare de date, crearea de rețele mobile 3G/4G. Aceste caracteristici permit la scară largă dezvoltarea unei rețele de comunicații securizată în zone dificile, la distanță și greu accesibile.
MQTT
MQTT, denumită MQ Telemetry Transport este un protocol de mesaje bazat pe publică- înscrie, utilizat peste protocolul TCP/IP. Este destinat conectării locațiilor îndepărtate, unde este necesar un ,,small code footprint” și lățimea de bandă este limitată.
Acest model de mseaje necesită un broker de mesaje. Brokerul este responsabil pentru distribuirea de mesaje pentru clienții interesați, bazată pe topicul unui mesaj. Prima veriune a protocolului a fost lansată în 1999 de Andy Stanford-Clark și Arlen Niper de la Cirrus Link Solutions.
Specificațiile nu explică semnificația unui ,,small code footprint” și nici ce înseamnă lățime de bandă limitată. Astfel, disponibilitatea protocolului pentru utilizare depinde de context. În 2013, IBM, a prezentat MQTT v3.1 către OASIS cu doar câteva specificații schimbate față de inițial.
MQTT-SN este o variație a protocolului inițial pentru dispozitivele integrate ce nu utilizează rețele TCP/IP. Istoric, MQ vine de la coada de mesaje a produselor IBM. Cu toate acestea, coada în sine, nu este necesară ca un standard în toate situațiile.
Protocoale alternative includ ,,Advanced Message Queuing Protocol”, ,,IETF constrained Application Protocol” și XMPP.
MQTT Broker
Există mai mulți Brokeri de MQTT disponibili cum ar fi IBM Message Sight. Aceștia variază în funcționalități și unii dintre ei pot pune în aplicare caracteristici suplimentare pe partea de sus a standardului MQTT.
Aplicații în lumea reală
Facebook Messenger – Facebook a utilizat aspecte ale MQTT; Dar este neclar cât din MQTT este utilizat și pentru ce; Este de notat că MQTT este folosit mai mult ca o aplicație pentru telefon decât ca o aplicație pentru senzori.
Cea mai recentă versiune IECC scalabila, Delta Rail, utilizează pentru IECC Signaling Control System, MQTT pentru comunicații în diferite părți ale sistemului de semnalizare. Acesta oferă cadrul de comunicare compatibil cu standerdele CENELEC pentru comunicații esențiale de siguranță.
REST
Representational State Transfer este un stil de arhitectură software care constă în constrângeri și orientări de bună practică pentru crearea de servicii web scalabile. REST este un set controlat de constrângeri aplicate la proiectarea componentelor unui sistem hipermedia distribuit care pot ajută la proiectarea unei arhitecturi mai performante și ușor de întreținut.
REST a câștigat recunoștință pe web, ca o alternativă mai simplă a serviciilor ce se bazează pe SOAP și WSDL. Sistemele ce se bazează pe REST de obicei, dar nu întotdeauna, comunica peste HTTP cu aceleași verbe (GET, POST, PUT, DELETE etc.) utilizate de browserele web pentru a furniza pagini web și pentru a trimite date către sistemele distribuite.
Stilul arhitectural al serviciilor REST a fot dezvoltat de W3C Technical Architecture Group (TAG) în paralel cu HTTP 1.1, ce se baza pe existența design-ului HTTP 1.0.
World Wide Web reprezintă cea mai mare implementare a unui sistem ce se conformează stilului arhitectural REST. Un foarte cunoscut mod de reprezentare pentru interfețele REST utilizează resurse ce pot fi manipulate cu verbe standarde HTTP.
Proprietăți arhitecturale afectate de constrângerile arhitecturale REST:
– Performanță – interactiuneile componentelor pot fi factorii dominanți în performanța resimțită de utilizator și eficiența rețelei;
– Scalabilitatea de a permite un număr foarte mare de componente și interacțiuni între componente;
– Roy Fielding, unul dintre principalii autori ai specificațiilor HTTP, descrie efectul pe care îl au serviciile REST asupra scalabilitatii astfel : ,,Separarea pe care o fac serviciile REST între componente simplifică implementarea componentelor, reduce complexitatea semanticii conectorilor, îmbunătățește eficiența reglajelor de performanță și crește scalabilitatea componentelor de server.”
– Constrângerile aplicate sistemelor stratificate permit intermediarilor – proxy, gateway, firewall – să fie introduși la diferite puncte în comunicare fără a schimbă interfețele între componente, permițându-le astfel să asiste la traduceri în comunicații sau să îmbunătățească performanța dobândită prin scalare.
REST permite procesare intermediară prin constrângerile auto-descriptive aplicate mesajelor: interacțiunea este fără stare între cereri, metodele standard și tipurile de media sunt utilizate pentru a indică semantică și schimbul de informație.
• Simplitatea interfețelor
• Modificabilitatea componentelor pentru a satisface nevoile în schimbare (chiar în timp ce cererea se execută)
• Vizibilitatea comunicării între componente de către agenții de servicii
• Portabilitatea componentelor prin mutarea codului programului împreună cu datele
• Fiabilitatea este rezistența la eșec la nivel de sistem în prezența eșecurilor din componente, conectori sau date.
Constrângeri arhitecturale
Proprietățile arhitecturale ale serviciilor REST se realizează prin aplicarea de constrângeri specifice interacțiunilor componentelor, conectorilor și elementelor de date. Constrângerile formatelor REST sunt:
Client – server
O interfață uniformă separă clienții de servere. Această separare ajută, de exemplu, clienții, ce nu sunt interesați de stocarea datelor, ce se desfășoară în interiorul serverelor, așa că portabilitatea codului clientului este îmbunătățită. Serverele nu sunt preocupate de starea sau interfața clienților, așa că serverele sunt mai simple și mai scalabile. Serverele și clienții pot fi înlocuiți sau dezvoltați independent, atât timp cât interfața dintre ei nu este modificată.
Stateless
Comunicarea client-server este constrânsă în plus și de faptul că nici un client nu este stocat pe server între cereri. Fiecare cerere de la orice client conține toate informațiile necesare pentru ca serverul să răspundă cererii, iar starea cererii este stocată în client. Starea cererii poate fi transferată de către server către alt serviciu precum o bază de date și a menține o stare persistentă pentru o perioadă necesară validării autentificării.
Clientul începe să transmită cereri atunci când este gata să facă trecerea de la o stare la alta. În timpul în care mai multe cereri sunt vizibile, clientul este considerat a fi în tranziție. Reprezentarea fiecărei stări a aplicației constă în linkuri care pot fi utilizate și în momente ulterioare, atunci când clientul alege să inițieze o trecere către o stare nouă.
Cacheable
La fel ca și în World Wide Web, clienții pot stoca în cache răspunsurile. Răspunsurile trebuie, implicit sau explicit, să fie definite astfel încât să fie stocate în cache, pentru a preveni reutilizarea de date eronate de către clienți. Buna administrare a abilității de a stoca în cache elimina parțial sau complet unele interacțiuni client-server, prin asta îmbunătățindu-se performanța și scalabilitatea.
Sistemul stratificat
Un client nu poate spune dacă este sau nu conectat direct la serverul final sau la unul intermediar din rețea. Serverele intermediare pot îmbunătăți scalabilitatea sistemului prin impatirea încărcăturii informaționale și prin furnizarea de cache patajat. Ele pot să impună politici se securitate.
Cod la cerere
Serverele pot extinde temporar sau pot personaliza funcționalitățile unui client prin transferul de cod executabil. Exmple ale acestora pot include componente compilate precum applet-uri Java și scripturi client-side precum JavaScript. Cod la cerere este singura constrângere opțională a arhitecturii REST .
Interfața uniformă
Constrangerea unei interfețe uniforme este fundamentală pentru proiectarea oricărui serviciu REST. Această interfață simplifică și decuplează arhitectura, care permite fiecărei părți să evolueze independent. Cele 4 constrângeri pentru această interfață sunt:
– Identificarea resurselor : Resursele individuale sunt identificate în cereri, de exemplu utilizarea de URI în servicii REST bazate pe Web. Resursele în sine sunt conceptual separate de reprezentările ce sunt furnizate clientului. De exemplu, serverul poate trimite date din baza de date sub formă HTML, XML, sau JSON, nici o reprezentare care să fie internă serverului.
– Manipularea resurselor prin aceste reprezentări: când un client deține reprezentarea unei resurse, incluzând orice metadata atașată, are destulă informație pentru a modifica sau șterge resursa.
– Fiecare mesaj conține suficiente informații pentru a descrie modul de procesare al acestuia: de exemplu care parser să fie invocat poate fi specificat de către un tip de media al Internetului. Răspunsurile au de asemenea specificată abilitatea de a fi sau nu stocate în cache.
– Hipermedia ca motor al stărilor mașinii(HATEOAS): clienții fac tranziții ale stării doar prin acțiuni ce sunt identificate în mod dinamic în hipermedia de server. Cu excepția punctelor fixe de intrare, clientul nu presupune că orice acțiune disponibilă pentru anumite resurse sunt descrise în reprezentări anterioare furnizate de la server.
Se pot caracteriza aplicații ce sunt conform constrângerilor REST. Respectarea acestor cerințe și fiind în conformitate cu stilul arhitectural REST, se permit orice sisteme distrbuite hipermedia cu proprietăți non-funcționale dorite, precum performanță, scalabilitate, simplitate, vizibilitate, portabilitate și fiabilitate.
Aplicabilitate Web
API-urile serviciilor Web care aderă la constrângerile arhitecturii REST se numesc API-uri REST. API-urile REST bazate pe HTTP sunt definite de următoarele aspecte:
– Au o bază URI;
– Un tip media al Internetului ca format al unor date: de obicei JSON;
– Metode HTTP standard;
– Link-uri ce referă starea;
– Link-uri ce referă resursele conectate.
III.2. Tehnologii și echipamente de dezvoltare
Eclipse
Privire de ansamblu asupra platformei Eclipse
Platforma Eclipse este structurată ca subsiteme ce sunt implementate în unul sau mai multe plug-in-uri. Subsistemele sunt construite deasupra unui motor de execuție mic. Termenul workbench se referă la mediul de dezvoltare desktop. Workbench-ul își propune să atingă nivelul unui instrument integrat prin furnizarea unei paradigme comune pentru crearea, gestionarea și navigarea resurselor sptiului de lucru.
Fiecare fereastră a workbench-ului conține una sau mai multe perspective. Perspectivele conțin previzualizari și editoare și controlează ce apare în anumite meniuri și bare de instrumente. Mai multe fereastre workbench pot fi deschise în același timp. Proiectul JDT oferă instrumente de plug-in-uri care implementează Java IDE pentru a sprijini dezvoltarea oricăror aplicații Java.
Proiectele JDT permit Eclipse-ului să fie un mediu de dezvoltare pentru sine.
ADT- Android Development Tools este un plug-în pentru Eclipse IDE care extinde capacitățile acestuia de a crea noi proiecte Android, de a crea interfețe utilizator,pachete bazate pe Cadrul Android API, depanarea proiectelor utilizând instrumentele Android SDK tools și chiar a exportă fișiere semnate sau nesemnate în scopul distribuirii aplicației.
Senzorii de la un dispozitiv Android
Cele mai multe dispozitive Android au senzori integrați ce măsoară mișcarea, orientarea precum și diferite condiții de mediu. Acești senzori sunt capabili să furnizeze date brute de mare precizie și acuratețe și sunt utili în monitorizarea mișcărilor tri-dimensionale sau poziției, sau dacă se dorește urmărirea schimbărilor din mediul înconjurător din apropierea unui dispozitiv.
De exemplu, un joc, ar putea urmări informații de la senzorul gravitației pentru a deduce gesturi complexe ale utilizatorului precum înclinarea, rotația sau legănarea. În același mod, o aplicație de vreme s-ar putea folosi de senzorul de temperatura și umiditate al dispozitivului pentru a calcula și raporta pragul de umiditate, iar o aplicație de turism ar putea folosi senzorul de câmp geomagnetic și accelerometrul pentru a configura rulmentul unei busole.
Platforma Android suportă trei mari categorii de senzori:
• Senzori de mișcare: senzori ce măsoară forțele de accelerare și forțele de rotație de-a lungul a trei axe. Această categorie include accelerometre, senzori de gravitație, giroscop și senzori de rotație.
• Senzori de mediu: senzori ce măsoară diferiți paramatrii de mediu, cum ar fi temperatura ambiantă, pesiunea aerului, illuminarea și umiditatea. Această categorie include barometre, fotometrice și termometre.
• Senzori de poziție: senzori ce măsoară poziția fizică a unui dispozitiv. Această categorie include senzori de orientare și magnetometre.
Senzorii disponibili ai unui dispozitiv se pot accesa și poți obține date brute utilizând cadrul senzorilor Android. Acest cadru oferă mai multe clase și interfețe care ajută la efectuarea unei varietăți de sarcini legate de senzori. De exemplu, se poate utiliza cadrul de senzori pentru a realiza următoarele:
– Determinarea căror senzori sunt disponibili pe un dispozitiv;
– Determinarea capacităților unui senzor individual, precum intervalul maxim, producătorul, cerințele de putere și rezoluția;
– Obținerea de date brute și definirea ratei minime la care se pot obține date;
– Înregistrarea și retragerea monotorizarii schimbărilor senzorilor.
Cadrul senzorilor Android permite accesarea mai multor tipuri de senzori. Unii dintre acești senzori sunt bazați pe hardware iar alții pe software. Senzorii pe baza de hardware sunt componente fizice integrate în dispozitiv. Datele lor provin din măsurarea directă a proprietăților mediului, cum ar fi accelerarea, intensitatea câmpului geomagnetic sau schimbarea unghiulară.
Senzorii pe baza software nu sunt dispozitive integrate fizic, deși ei imită comportamentul celor pe baza hardware. Aceștia își procura datele de la unul sau mai mulți senzori hardware și sunt adesea numiți senzori virtuali sau sintetici. Senzorul de accelerare liniară și senzorul gravitației sunt exemplu de senzori bazați pe software.
Puține dispozitive Android au fiecare tip de senzor. De exemplu, cele mai multe dispozitive precum telefoanele și tabletele, au un accelerometru și un magnetometru, dar mult mai puține au barometre sau termometre. De asemenea, un dispozitiv poate avea mai muți senzori de un anumit tip. De exemplu, un dispozitiv poate avea doi senzori ai gravitației, fiecare pe un interval diferit.
GPS
În Android, serviciile bazate pe locație sunt furnizate de clasa LocationManager situată în pachetul android.location. Utilizând această clasa, la cerere, se pot obține actualizări periodice ale locației geografice a dispozitivului precum și date atunci când dispozitivul ajunge în proximitatea unei anumite locații.
Pentru a fi informat ori de câte ori există o schimbare în locație, trebuie înregistrată o cerere pentru schimbările locației astfel încât programul să poată fi notificat periodic. Doar afișarea latitudinii și longitudinii nu este foarte interesantă, motiv pentru care o utilizare a GPS-ului împreună cu Google Maps ar fi mult mai potrivită unei aplicații interactive.
Camera
Cadrul Android include suport pentru diferite camere foto și sunt disponibile diferite funcții ale camerei ce permit realizarea de poze și videoclipuri în aplicații. Există o simplă abordare în realizarea de poze și videoclipuri ce subliniază necesitatea creării unei experiențe personalizate pentru utilizator.
Înainte de instanțierea camerei într-o aplicație, ar trebui luate în considerare anumite întrebări despre modul în care aplicația urmărește să uilizeze camera:
• Este camera o necesitate pentru ca aplicația să ruleze și aceasta nu ar funcționa pe un dispozitiv ce nu prezintă această caracteristică? dacă da, atunci în manifest ar trebui declarată necesitatea camerei;
• Imagine rapidă sau camera personalizată? se va utiliza camera așa cum este sau se dorește utilizarea unei camere personalizate?
• Stocarea se va face astfel încât și galeria să poată utiliza imaginile/viseoclipurile sau după ce aplicația este dezinstalata acestea nu vor mai fi disponibile?
Noțiuni de baza
Cadrul Android suportă capturarea de imagini și videoclipuri utilizând android.hardware.camera2 API sau printr-un Intent de camera.
Filmând utilizând Intentul unei camere este un mod rapid de a realiza filmări scriind foarte puțin cod. Un Intent pentru captura video poate conține următoarele informații suplimentare:
• MediaStore.EXTRA_OUTPUT – Această setare necesită o adresa URI la care să fie salvat videoclipul. Este o setare opțională dar recomandată.
• MediaStore.EXTRA_VIDEO_QUALITY –Această valoare este 0 pentru o calitate slabă a videoclipului și 1 pentru o calitate superioară.
• MediaStore.EXTRA_DURATION_LIMIT –Această setare limitează timpul filmării.
• MediaStore.EXTRA_SIZE_LIMIT –Setează dimensiunea maximă, în octeti, pe care o poate avea un videoclip realizat.
BoofCV
BoofCV este o biblitecă open-source de la Java pentru realizarea în timp real a aplicațiilor pentru robotică și pentru procesarea la un alt nivel a informațiilor extrase din imagini. Scris de la zero, pentru ușurință în utilizare și de înalta performanță, de multe ori, acesta, depășește biblioteci native. Funcționalitatea include rutine opimizate pentru procesarea imaginilor, pentru urmărirea de caracteristici cât și pentru vizualizarea geometrică pe calculator. Lansat sub licență Apache pentru uz academic sau comercial.
BoofCV este organizat în mai multe pachete:
De procesare a imaginii: ce conține funcții frecvent utilizate de procesare a imaginii care lucrează direct pe pixeli;
– Caracteristici urmărite: conține algoritmi de extragere a caracteristicilor specifice pentru a fi utilizate la un nivel superior;
– Viziune geometrică: compusă din rutine pentru prelucrarea imaginilor extrase folosind geometria bidimensională sau tridimensională;
– Calibrare: dispune de rutine pentru determinarea parametrilor intrinseci și extrinseci ai camerei;
– Recunoaștere: se utilizează pentru recunoașterea și urmărirea obiectelor vizuale complexe;
– Vizualizare: conține rutine pentru redarea și afișarea caracteristicilor extrase;
– Dar și pentru intrări/ieșiri: ce conține rutine pentru citirea imaginilor de la diferite surse de intrare.
Singurul format video suportat de BoofCV este MJPEG și secvențele de imagini. MJPEG este un fomat video foarte simplu, alcătuit în cea mai mare parte de imagini JPEG concatenate. Includerea MJPEG în BoofCV este realizată pentru oferirea de suport video în applet-uri.
Suportul este de asemenea prevăzut pentru citirea secvențelor de imagini de la directoare. Terțe
biblioteci sunt necesare pentru citirea camerei web sau alte formate video. Suport pentru aceste terțe biblioteci poate fi găsite în directorul „boofcv/integration”. Cele mai utile sunt containerele Xuggler și Webcam Capture, utilizate pentru a citi fișiere video și camere web.
Bibliotecile care nu sunt compatibile pot fi folosite cu ușurință cu BoofCV, convertind imaginea de ieșire (de obicei o BufferedImage) într-o imagine stil BoofCV.
OpenCV
Aspecte practice ale unui sistem de vizualizare
– Afișarea imaginilor, Intrări/Ieșiri și apeluri de biblioteci
OpenCV
OpenCV a fost inițial dezvoltat Intel.
Codul de bază OpenCV
OpenCV este o bibliotecă de funcții C care imprementeaza atât operațiunile de infrastructură cât și funcții de prelucrare și vizualizare a imaginilor. Dezvoltatorii pot să adauge funcțiile lor în această biblioteca, de asemenea. Orice secvență de cod descrisă poate fi folosită de orice program ce utilizează OpenCV. Pentru utilizare este necesară cunoașterea apelului bibliotecii dar și a structurilor de date utilizate în OpenCV. Aceasta este o bibliotecă mare și complexă.
Structura de date IplImage
Aceasta este organizarea în memorie a datelor unei imagini. Imaginile în formă IplImage pot fi convertite în șiruri de pixeli, dar IplImage conține, de asemenea o mulțime de informații structurale despre datele imaginii, care pot redate sub mai multe forme.
Dacă fiecare pixel ocupă un octet, această structura este tot ceea ce ne trebuie. Cu toate acestea există mai multe tipuri de date ale unei imagini în OpenCV; pot fi int, float, double. Pot fi gri (pe un octet) sau color (RGB) pe 3 sau 4 octeti și tot așa. În cele din urmă unele formate pot avea originea în partea stânga sus (majoritatea) iar altele în stânga jos (Microsoft).
Citirea și scrierea imaginilor
Funcția de bază pentru citirea imaginilor este cvLoadImage care citește o imagine dintr-un fișier, calea acestuia fiind dată. Se pot citi imagini în mai multe formate: JPEG, BMP, PNM, PNG, TIF și acest lucru se face automat fără a preciza aprioric formatul. Acest lucru este determinat de conținutul fișierului în sine. Odată citit, un pointer la o structura IplImage este returnat care implicit va fi stocat într-o formă RGB 3 canale.
Afișarea imaginilor
În cazul în care compilatorul de baza C/C++ este utilizat de unul singur, atunci afișarea unei imagini este luată în calcul. Unul din marile avantaje ale lui OpenCV este că oferă modalități simple de apelare a unor funcții de deschidere a unei fereastre de afișare a imaginilor. Acest lucru nu necesită utilizarea altor sisteme, cum ar fi Tcl/Tk sau Java și solicită programatorului doar cunoștințe de baza pentru gestionarea ferestrelor de pe computerul utilizat. Funcțiile pentru interfață cu utilizatorul ale OpenCV sunt colectate într-o bibilioteca numită highgui și sunt documentate în cărți dar și pe internet.
Captura de imagini
Prelucrarea imaginilor statice sau a celor științifice se poate face destul de eficient utilizând imagini scanate sau de la camere digitale. Disponibilitatea datelor digitale a imaginilor a crescut de multe ori în ultimul deceniu și nu este neobișnuit să găsești un aparat de fotografiat digital, un scanner sau o camera video într-o gospodărie tipică sau într-un laborator de colegiu. OpenCV nu este numai un furnizor al unui sistem de vizualizare dar oferă și o varietate de funcții de procesare a imaginilor.
Tehnici de detectare a marginilor
Scopul detectării marginilor
Detectarea marginilor este una dintre cele mai utilizate operațiuni în analiza imaginilor și există mulți algoritmi pentru detectarea marginilor în literatura de specialitate, poate chiar mai mulți decât în oricare alt subiect. Motivul este că marginile formează conturul unui obiect, în sens generic. Obiectele sunt subiecte de interes în sistemele de analiză și vizualizare a imaginilor. O margine este granița dintre un obiect și fundal, și indică granița dintre diferite obiecte ce se suprapun.
Abordări tradiționale și teorii
Cei mai buni algoritmi încep cu o declarație clară a problemei de rezolvat, iar o analiză convingătoare prezintă metodele posibile de soluționare și condițiile în care acestea vor funcționa perfect. Folosind această paradigmă, pentru a defini un algoritm de detectare a marginilor înseamnă în primul rând definirea a ceea ce este o margine și apoi utilizarea acestei definiții pentru a sugera metode de identificare.
Marginea poate fi o modificare a nivelului de gri ce apare într-o anumită locație. Cu cât schimbarea de nivel este mai mare, cu atât este mai ușoară detectarea marginilor. Prima complicație apare din cauza digitalizării. Este puțin probabil că imaginea va fi prelevată în așa fel încât toate marginile vor corespunde cu o limita de pixeli.
A două complicație este problema omniprezentă a zgomotului. Din cauza unui număr foarte mare de factori cum ar fi intensitatea luminii, tipul aparatului de fotografiat și a lentilelor, mișcarea, temperatura și altele, este foarte puțin probabil că doi pixeli ce corespund aceluiași nivel de gri în scenă să aibă același nivel și în imagine. Zgomotul este un efect aleatoriu și poate fi caracterizat doar statistic.
Modele de margini
În lipsa zgomotului, orice modificare a nivelului de gri ar indică un avantaj. O margine nu ar apărea niciodată cu adevărat într-o imagine deoarece:
a. Obiectele au rareori un astel de contur bine definit;
b. O scenă nu este niciodată eșantionată astfel încât marginile să apară exact la marginea unui pixel;
c. Din cauza zgomotulu, cum s-a menționat anterior.
Zgomotul
Toate procesele de achiziție de imagini sunt supuse unui anumit tip de zgomot, deci nu are rost ignorarea acestuia; situația ideală în care zgomotul nu apare nu se găsește niciodată în practică. Zgomotul nu poate fi prezis cu exactitate din cauza naturii sale aleatoare și nu poate fi măsurat cu precizie într-o imagine cu zgomot, deoarece contribuiția la nivelurile de gri ale zgomotului nu poate fi distinsă de valorile pixelilor. Totuși, zgomotul poate fi uneori caracterizat prin efectul sau asupra imaginii și este de obicei exprimat ca o distribuție de probabilitate cu o medie specifică și o abatere standard.
Două tipuri de zgomot sunt specifice analizei imaginilor:
– Zgomotul independent de semnal;
– Zgomotul dependent de semnal.
Zgomotul independent de semnal este un set aleator de niveluri de gri, idependent statistic de datele imaginii, adăugat pixelilor imaginii pentru a da zgomot imaginii. Acest tip de zgomot se produce atunci când o imagine este transmisă pe cale electronică dintr-un loc în altul.
Al doilea tip major al zgomotului este numit zgomot dependent de semnal. În acest caz, nivelul valorii zgomotului în fiecare punct din imagine este o funcție a nivelului de gri de acolo. Granulația văzută în unele fotografii este un exemplu al acestui tip de zgomot și este, în general, mai greu de gestionat. Din fericire este mai puțin importantă și poate fi gestionată ușor în cazul în care fotografia este prelevată corespunzător.
Operatori de derivare
Deoarece o margine este definită că o schimbare în nivelul griului, un operator care este sensibil la această schimbare va funcționa ca un detector de margine. Un operator de derivare face acest lucru; o interpretare a unei derivate este ca rată de schimbare a unei funcții, iar rata de schimbare a nivelurilor de gri într-o imagine este mare aproape de o margine și mică în zonele constante. Cum imaginile sunt bidimensionale, este important să se ia în considerare schimbările de nivel în mai multe direcții. Din acest motiv se utilizează derivatele parțiale ale imaginii în concordanță cu direciile principale x și y.
O estimare a direcției marginii poate fi obținută prin utilizarea derivatelor din x și y, deoarece componentele direcției reale de-a lungul axelor compun suma vectorului. Desigur, o imagine nu este o funcție și nu poate fi diferențiată în modul obișnuit. Pentru că o imagine este discretă se folosesc mai degrabă diferențele; adică derivata unui pixel este aproximată că o diferență de niveluri de gri ale unor regiuni locale.
Detectarea marginilor bazată pe șabloane
Ideea din spatele detectării marginilor bazată pe șablon este de a utiliza un șablon mic, discret ca un modell al unei margini în loc de folosirea directă a unui operator de derivare. Șablonul poate fi o încercare de a modela schimbările la nivel de margine sau o încercare de a aproxima un operator derivat; această din urmă pare a fi cea mai utilizată.
Modele de margini: Detectorul de margini Marr-Hildreth
La sfârșitul anilor 1970, David Marr a încercat să combine ceea ce a fost cunoscut despre vizualizarea biologică într-un model care ar fi putut fi utilizat pentru vizualizarea pe mașină. Marr a studiat literatura de specialitate cu privire la sistemele vizuale ale mamiferelor și a rezumat cinci puncte majore. Fiecare dintre aceste puncte este susținut ori de observarea sistemelor vizuale ori de derivarea matematică, dar fundamentarea generală a detectorului de margine rezultată este un pic cam slabă. Cu toate acestea, pe baza celor cinci puncte, un algoritm de detectare a marginilor poate fi precizat prin următoarele:
– Imaginii i se atribuie o convolutie cu o funcție I Gaussiana bidimensională;
– Calculează Laplacianul imaginii combinate și numește această funcție L;
– Găsește marginile – cele pentru care există o trecere prin 0 în L.
Rezultatele combinațiilor cu funcțiile Gauss cu o varietate de abateri standerd sunt combinate pentru a reda o imagine cu o singură margine.
Detectorul de margini Canny
În 1986, Ioan Canny a definit un set de obiective pentru un detector de margini și a descris o metodă optimă pentru realizarea acestora. Canny a precizat trei aspecte pe care un detector de margini ar trebui aș le abordeze. Acestea sunt:
– Rată de eroare: Detectorul de margini ar trebui să răspundă doar la margini și ar trebui să le găsească pe toate, nici-o margine nu ar trebui ratată;
– Localizarea: Distanță dintre pixelii margini găsite și cea actuală ar trebui să fie cât de mică posibil;
– Răspunsul: Detectorul nu ar trebui să identifice mai mulți pixeli de margine acolo unde se găsește o singură margine.
Par suficient de rezonabile, mai ales că primele două deja au fost discutate și utilizate pentru a evalua detectoarele de margine. Criteriul de răspuns este foare similar cu un fals pozitiv la prima vedere.
Detectorul de margini Shen-Castan (ISEF)
Detectorul lui Canny a definit optimalitatea în concordanță cu un set de criterii. Deși aceste criterii par rezonabile, nu există nici un motiv convingător să credem că sunt singurele posibilități. Această înseamnă că noțiunea de optimalitate este una relativă și că un mai bun detector de margini (în anumite circumstanțe), decât al lui Canny, este o posibilitate.
Uneori, pare că această comparație apare la nivel de definire a optimalității și nu la schemele detectoarelor de margini. Shen și Castan sunt de acord cu Canny despre forma generală a detectorului de margini: o convolutie cu un nucleu de netezire urmată de o căutare a pixelilor de margine. Cu toate acestea, analiza lor produce o altfel de funcție de optimizare, aceea a minimizării (într-o singură dimensiune). Shen și Castan, utilizează filtrul de optim direct, sau ar putea fi din cauza unei diferențe în modul în care diferitele criterii de optimalitate sunt reflectate în realitate. Pe de altă parte, Shen și Castan nu abordează criteriul răspunsului mutliplu și ca rezultat este posibil ca metoda lor să creeze false răspunsuri la marginile zgomotoase sau neclare.
O comparație între cele două detectoare de margini optime
Cele două detectoare de margini sunt operatorul lui Canny și metoda Shen-Castan. O modalitate bună de a pune capăt discuției despre detectarea marginilor poate fi comparația între aceste două abordări. Pentru a rezuma cele două metode, algoritmul Canny convolutioneaza imaginea cu derivatul unei funcții Gaussiene, iar apoi trece prin zero Laplacianul.
Algoritmul Shen-Castan convolutioneaza imaginea cu filtrul infinit, simetric și exponențial, calculează BLI, suprimă falsele treceri prin zero, efectuează binarizarile pantei și în final aplică binarizarile. În ambele metode autorii sugerează folosirea mai multor rezoluții. Ambii algoritmi oferă posibilitatea utilizării parametrilor specificați de utilizatori, ce pot fi utili pentru reglarea metodei pentru o anumită categorie de imagini.
Margini de culoare
Până în prezent, marginile create doar de o schimbare a luminozității, indicată de nivelul griului au fost studiate. Acest lucru implică, probabil 90% din marginile de interes ale problemelor reale, dar nu toate dintre ele.Se pare că modificările de culoare sau de nuanță, nu sunt întotdeauna detectate de detectoarele de margini descrise până acum. Dacă marginile sunt limitele de obiecte, atunci limitele care sunt marcate doar prin culoare ar trebui să fie detectabile, iar pentru că majoritatea imaginilor implică culoare, ar trebui să se ia în considerare atunci când se caută margini. Sunt două moduri principale prin care se detectează marginile de culoare.
O metodă este de a aplică unul dintre detectoarele de margini deja cunoscute pe fiecare dintre cenalele de culoare roșu, verde și albastru și apoi să fuzioneze cele trei rezultate într-un singur rezultat. Cealaltă metodă implică gradienti multi-dimensionali, sau derivate parțiale. Fostul sistem este destul de evident și ușor de implementat. Codul există deja pentru aplicarea oricăror metode menționate anterior pe orice imagine gri, sau pe una cu roșu, verde și albastru știind că și aceasta este tot o reprezentare gri pe pixeli pe 8 biți.
Morfologia Digitală
Morfologie – Definiție
„Morfologie” înseamnă formă și structura unui obiect, sau aranjamentele sau relațiile dintre părțile unui obiect. Morfologia este legată de formă iar morfologia digitală este o modalitate de a analiza sau de a descrie forma unui obiect digital , a unui raster.
Conectivitatea
La baza celor mai multe morfologii digitale sunt conceptele de conectivitate și regiuni conectate în seturi de pixeli. Acestea sunt definite pe imagini bi-nivel, care este domeniul uzual al morfologiei. Pe o grilă raster standard fiecare pixel are un set de vecini, sau pixeli care sunt considerați a fi atinși sau de lângă.
Elemente de morfologie digitală – Operații binare
Așa cum a fost explicat, cele mai multe operații morfologice se fac pe imagini bi-nivel, care constau doar în pixeli albi sau negri. Acestea vor fi numite operații binare pentru a le ditinge de operațiile morfologice la nivel de gri, ce sunt mai puțin frecvente.
Dilatarea binară
Acum , niște definiții ale operațiilor simple pot fi afirmate, cu scopul de a defini dilatarea în mod general, în termeni de seturi.
Implementarea dilatării binare
Implementarea generală a dilatării imeginii bi-nivel constă în două părți:
– Un program ce returnează o imagine dilatată ce are ca intrare o imagine și un element de structurare
– Și o funcție ce va face același lucru, dar care poate fi apelată din altă funcție și care permite dilatării să fie încorporată într-un program de imagini mai mare.
Eroziunea binară
În dilatare ne referim la adăugare de pixeli unei imagini, unui obiect pentru a-l face mai mare, eroziunea va face o imagine mai mică. În cel mai simplu caz, o eroziune binara va elimina stratul exterior de pixeli dintr-un obiect. În general, eroziunea imaginii A de către elementul structural B poate fi definită ca o mulțime de elemente C, ce aparțin mulțimii B dar sunt incluse în A.
Cu alte cuvinte, este mulțimea pixelilor ce aparțin mulțimii C astfel încât elementul structural B translatat de C să corespundă unui set de pixeli negri în A. Faptul că rezultatul unei eroziuni este un subset al imaginii originale este un lucru clar, orice pixel ce nu se potrivește cu modelul definit de pixelii negri din elementul structural nu va aparține rezultatului. Cu toate acestea, modul în care eroziunea elimina pixeli nu este clar, cel puțin la început, iar afirmația anterioară cum că imaginea rezultat este un subset al originalului nu este neapărat adeavarata dacă elementul structural nu conține originea.
Punerea în aplicare a eroziunii binare
Așa cum s-a întâmplat în cazul dilatării, implementarea constă într-un program care creează o imagine erodată fiind dată o imagine de intrare și un element structural, dar și o funcție ce va execută eroziunea.
Transformarea “Nimerește și ratează”
Această transformare este un operator morfologic conceput pentru a localiza forme simple într-o imagine. Ea se bazează pe eroziune, lucru firesc, deoarece, eroziunea imaginii A de către S constă numai în acei pixeli unde mulțimea de pixeli S este conținută, sau corespunde unei regiuni din A. Cu toate acestea, ea include, de asemenea, locuri în care pixelii de fundal din acea regiune nu se potrivesc cu cei ai mulțimii S, iar aceste locuri nu ar fi gândite în mod normal ca o potrivire. Avem nevoie de o operație care să potrivească atât pixelii din prim-plan cât și cei de fundal. Potrivirea pixelilor din prim-plan din S cu cei din A este o nimerire și este realizată cu o eroziune simplă.
Identificarea limitelor regiunilor
Pixelii de pe marginea unui obiect sunt cei care au cel puțin un vecin care aparține fundalului. Deoarece orice vecin de pe fundal este implicat nu se poate ști în prealabil pe care vecin să îl caute, și un singul element structural ce ar permite eroziunea sau dilatarea pentru a detecta marginea nu poate fi construit. Iar acest lucru se întâmplă deoarece eroziunea după un element structural elimina exact acești pixeli.
Pe de altă parte, acesta logică poate fi utilizată pentru a proiecta un detector morfologic de margini. Marginea poate fi eliminată folosind eroziunea iar imaginea erodată poate fi scoasă din original. Acest lucru ar trebui să lase doar ace pixeli ce au fost erodati și care alcătuiesc limita.
Textura și culoarea
Textura și segmentarea
Când ne uităm la o imagine, putem conecta regiunile care au valori similare de gri sau culoare și să alcătuim obiecte. Putem chiar să observăm variațiile provocate de lumina și să distingem schimbările cauzate de suprapunerile obiectelor. Prezența texturii și într-o măsură mai mică cea a culorii complică problema, mai ales din perspectiva vizualizării pe calculator.
Deși nu există nici un acord cu privire la o definiție formală a texturii, o caracteristică importantă este repetarea unui model sau a mai multor modele pe o regiune. Modelul poate fi repetat exact, sau cu un set mic de variații a temei, eventual o fucntie a poziției. Există de asemenea un aspect aleator pentru textura ce nu trebuie ignorat: mărimea, formă, culoarea și orientarea elementelor modelului ce pot varia în regiune.
Uneori diferența dintre două texturi este conținută în gradul de variație, sau în distribuția statististica a elementelor modelului. În ambele cazuri este mai dificil să se caracterizele gradul de asemănare sau diferențiere dintre două texturi decât să se găsească o diferența în nivelul de gri.
Dimensiunea fractala
Geometria fractala poate fi folosită uneori pentru diferențierea texturilor. Cuvântul „fractal” este mai mult un adjectiv decât un substantiv și se referă la entități (în special seturi de pixeli), care afișează un grad de auto-similaritate la diferite scări. O linie dreapta matematic prezintă un grad ridicat de auto-similaritate, orice parte a liniei este la fel ca oricare alta, în orice mărime.
Restaurarea Iimaginilor
Degradări fotografice – lumea reală
Oricine care a făcut vreodată o fotografie va înțelege că capturarea unei imagini exact așa cum apare în lumea reală este foarte dificil, dacă nu imposibil. Este zgomotul cu care te confrunți, care în cazul fotografiei este cauzat de granulație, de rezoluție sau de cuantificarea neclarității senzorului de mișcare, de natură imprerfecta chiar și acelui mai bun set de lentile. Rezultatul tuturor acestor degradări este că imaginea este o aproximare a scenei.
De multe ori imaginea este destul de buna pentru scopul pentru care a fost realizată. Pe de altă parte, există unele cazuri în care corectarea iimaginii pe calculator este singură modalitate de a obține o imagine utilizabilă. Restaurarea imaginii este o artă și o știință ce îmbunătățește calitatea unei imagini pe baza unor măsuri absolute. De obicei implică unele mijloace de desfacere a distorsiunilor create cum ar fi neclaritatea datorată mișcării sau granulația filmului. Acest lucru nu poate fi făcut perfect dar performanțe majore pot fi obținute în anumite circumstanțe.
Neclaritatea detorata mișcării
Dacă imaginea este neclară datorită mișcării fie a camerei fie a obiectivului, PSF va fi o pată extinsă cu o axa lungă în direcția mișcării. În timp ce este posibil să se utilizeze un filtru invers sau Wiener de restaure, în aceste cazuri, există o soluție specială care nu ar trebui să fie la fel de sensibilă la zgomot.
III.3. Limbaje utilizate
Limbajul JAVA
Aplicațiile Android sunt dezvoltate utilizând limbajul Java. În momentul de față este singură opțiune pentru aplicații native. Java este un limbaj de programare foarte popular, dezvoltat de Sun Microsystems (deținut acum de Oracle). Dezvoltat mult timp după C/C++, Java include multe dintre caracteristicile puternice ale acestor limbaje în timp ce rezolva câteva dintre dezavantajele lor. Totuși, limbajele de programare sunt doatr atât de puternice cât bibliotecile lor. Aceste biblioteci există doar pentru a ajută programatorul în a-și realiza aplicațiile. Unele dintre caracteristicile importante ale limbajului Java sunt:
• Este ușor de învățat și de înțeles;
• Este proiectat pentru a fi independent de platforma și sigur, utilizând mașini virtuale;
• Este orientat obiect.
Andoid se bazează foarte mult pe aceste fundamente ale limbajului Java. Android SDK include multe biblioteci Java standard, precum biblioteci de structuri de date, de funcții matematice, pentru grafice, biblioteci pentru rețele dar și multe alte biblioteci speciale care ajută la realizarea de aplicații Android.
BIBLIOGRAFIE
The Internet of Things (IoT) is a scenario in which objects, animals or people are provided with unique identifiers and the ability to transfer data over a network without requiring human-to-human or human-to-computer interaction.
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: Dezvoltarea de Agenti Inteligenti Pentru Realizarea de Prezentari Panoramice (ID: 149719)
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.
