• Rezultati Niso Bili Najdeni

Detekcija vlitih navojev s pomočjo termovizije

N/A
N/A
Protected

Academic year: 2022

Share "Detekcija vlitih navojev s pomočjo termovizije"

Copied!
63
0
0

Celotno besedilo

(1)

Univerza v Ljubljani

Fakulteta za računalništvo in informatiko

Anže Švigelj

Detekcija vlitih navojev s pomočjo termovizije

DIPLOMSKO DELO

VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

RAČUNALNIŠTVO IN INFORMATIKA

Mentor : pred. dr. Borut Batagelj

Ljubljana, 2022

(2)

koriščenje rezultatov diplomske naloge je potrebno pisno privoljenje avtorja, Fakultete za računalništvo in informatiko ter mentorja.

Besedilo je oblikovano z urejevalnikom besedil LATEX.

(3)

Fakulteta za računalništvo in informatiko izdaja naslednjo nalogo:

Tematika naloge:

Kandidat naj reši problem iz realnega industrijskega okolja detekcije vlitih navojev, ki so zaradi premaza skriti. S pomočjo termične kamere naj na segreti deski zazna središča navojev. Ponudi naj več različnih metod ter primerjavo med njimi. V sklepu svojega dela naj na podlagi meritev predlaga najboljšo metodo.

(4)
(5)

Zahvalil bi se svojemu mentorju pred. dr. Borutu Batagelju za vso pomoč pri izdelavi diplomskega dela in za izjemno odzivnost.

Zahvala gre tudi Nataši in Janezu za podporo in izposojo opreme ter ne- nazadnje tudi staršem za vso finančno in moralno podporo med študijem.

(6)
(7)

Kazalo

Povzetek Abstract

1 Uvod 1

1.1 Cilj . . . 1

1.2 Motivacija . . . 2

1.3 Pregled sorodnih del . . . 2

2 Teorija termografije 5 2.1 Termografska kamera . . . 7

2.2 Emisivnost . . . 8

3 Uporabljene tehnologije 9 3.1 Industrijski računalnik SICK SIM4000 . . . 9

3.2 Termografska kamera FLIR A615 . . . 10

3.3 Razvojno okolje SICK AppStudio . . . 11

3.4 Lua . . . 13

3.5 Git . . . 13

3.6 Node.js . . . 13

3.7 MongoDB . . . 14

3.8 Vmesnik API na oddaljenem strežniku . . . 14

4 Razvoj aplikacije 17 4.1 Opis problema in predlagana rešitev . . . 17

(8)

4.2.2 Nefunkcionalne zahteve . . . 19

4.3 Priklop opreme . . . 19

4.4 Razvoj na računalniku SICK SIM4000 . . . 20

4.5 Primerjava uporabljenih metod . . . 38

5 Zaključek 45

Literatura 47

(9)

Seznam uporabljenih kratic

kratica angleško slovensko

HTTPS hypertext transfer protocol se- cure

protokol za varni prenos hiper- teksta

REST representational state transfer reprezentativni prenos stanja ROI region of interest območje zanimanja

API application programming in- terface

programski vmesnik PoE power over ethernet napajanje preko etherneta IDE integrated development envi-

roment

integrirano razvojno okolje JSON javascript object notation oblika izmenjave podatkov NoSQL non-relational structured

query language

ne-relacijski strukturiran poi- zvedbeni jezik

CRUD create, read, update, delete ustvari, preberi, posodobi, iz- briši

URL uniform resource locator enolični krajevnik vira

HCT Hough circle transform Houghova transformacija kroga

(10)
(11)

Povzetek

Naslov: Detekcija vlitih navojev s pomočjo termovizije Avtor: Anže Švigelj

Cilj diplomske naloge je bil razvoj spletne aplikacije za detekcijo vlitih na- vojev segrevane snežne deske s pomočjo termografske kamere v okolju SICK AppStudio, ki omogoča razvoj v programskem jeziku Lua na računalniku SICK SIM4000. V začetku sta predstavljeni področji računalniškega vida in termografskih kamer. V naslednjem koraku je predstavljena oprema in pri- padajoče tehnologije, ki smo jih uporabili. V nadaljevanju pa je prikazana implementacija dveh algoritmov za detekcijo navojev: zaznavanje področij in Houghova transformacija kroga ter njuna primerjava. Kot dodatek smo iz- delali podatkovno bazo, ki temelji na arhitekturi REST z uporabo tehnologij Node.js in MongoDB, kamor se shranjujejo podatki vseh meritev. Delo smo zaključili s sklepnimi ugotovitvami, ki izpostavljajo tudi možne izboljšave in podlago za nadaljnji razvoj.

Ključne besede: računalniški vid, termovizija, Lua, SICK AppStudio, ter- mografska kamera, Houghova transformacija.

(12)
(13)

Abstract

Title: Molded thread detection using thermal imaging Author: Anže Švigelj

The aim of this thesis was to develop a web application for detecting molded threads of a heated snowboard using a thermographic camera in the SICK AppStudio environment, which uses the Lua programming language on the SICK SIM4000 industrial computer. In the beginning, the areas of computer vision and thermographic cameras are described and presented. In the fol- lowing chapter we presented the equipment we worked on and the associated technologies we used. We continued with the description of the implemen- tation of two algorithms we used for detecting threads: blob detection and Circle Hough Transform then compared the results. In addition, we created a database based on the REST architecture using Node.js and MongoDB tech- nologies, where data from all measurements are stored. We concluded our work with concluding remarks, which also highlight possible improvements and the basis for further development.

Keywords: computer vision, thermal imaging, Lua, SICK AppStudio, ther- mal camera, Hough transform.

(14)
(15)

Poglavje 1 Uvod

Termografija je danes zelo pomembna v industriji, policiji, medicini, vojski in drugje. Pri policijskem delu je lep praktičen primer tega iskanje oseb in pred- metov ponoči in ob omejeni vidljivosti. Poleg termografije je danes med nami vse bolj prisoten tudi računalniški vid, ki se pojavlja na vse več področjih.

V industriji nam na primer koristi pri ločevanju na slabe in dobre izdelke ter polizdelke. Računalniški vid je tudi vse bolj prisoten v merilcih hitrosti na različnih avtocestnih odsekih, saj je boljša in cenejša alternativa klasič- nim fotoradarskim merilcem ter omogoča branje tablic in njihovo shrambo v podatkovno bazo [12].

V diplomskem delu je predstavljeno iskanje vlitih navojev na snežni deski (angl. snowboard) s termovizijo, ki je kombinacija zgoraj navedenih pojmov termografija in računalniški vid. Predstavljena bo obdelava slik in algoritma za detekcijo, z zajemom iz termografske kamere FLIR A615.

1.1 Cilj

V okviru diplomskega dela nameravamo izdelati aplikacijo v programskem okolju SICK AppSpace (programski jezik Lua), ki bi na snežnih deskah s pomočjo termografske kamere FLIR A615 določila sredino izvrtanih lukenj z navojem za namestitev vezi. Deska je premazana s smolo oziroma posebno

1

(16)

zmesjo in se zato lukenj z navojem ne vidi. Ideja je, da se celotno desko ena- komerno segreje in s kamero preveri, kje se luknje pod premazom nahajajo, nato pa se določi sredino luknje, kamor bi se namestile vezi z vijaki. Luknje imajo navoj narejen iz kovine, zaradi tega se ohlajajo precej počasneje kot preostali del deske in bi jih zato zaznali preko termografske kamere. Rezultati bodo koristili predvsem tistim, ki bi radi s pomočjo termovizije, računalni- škega vida in obdelave slik poiskali različne objekte ali vzorce na sliki.

Glavni cilj je delujoča spletna aplikacija, ki samodejno zazna desko, za- jame sliko, izpiše koordinate središč kot tudi površino. Slednje podatke se lahko izvozi oziroma se jih preko https zahtevka pošlje na nek oddaljen strežnik, kjer je implementirana arhitektura REST. Končna aplikacija se bo izvajala na industrijskem računalniku SICK SIM4000, do uporabniškega vme- snika pa se bo dostopalo prek spletnega brskalnika.

1.2 Motivacija

Glavni motiv za izbiro teme diplomske naloge je bila delovna praksa, kjer smo se dodobra spoznali z računalniškim vidom, termovizijo in z različnimi programskimi orodji ter pripadajočo strojno opremo. Podjetje pri katerem smo opravljali delovno prakso ima že dlje časa v načrtu razviti izdelek, ki s pomočjo termovizije zazna vlite navoje na nevidnih mestih.

1.3 Pregled sorodnih del

Pri iskanju oblik na področju računalniškega vida je na razpolago kar ne- kaj sorodnih pristopov. Po podobnosti uporabljenih pristopov je najbližje diplomska naloga, kjer avtor s pomočjo kamere in zaledne aplikacije zaznava položaj kroglice na igralniški ruleti, kjer za odstranjevanje šuma na sliki upo- rabi Gaussovo glajenje, za določitev robne slike uporabi Cannyjev detektor robov ter za določitev središča kroglice Houghovo transformacijo [19]. Pre- cej zanimivo je tudi diplomsko delo, kjer je avtor raziskoval različne metode

(17)

Diplomska naloga 3 računalniškega vida za razpoznavanje različnih evrskih kovancev v slikah in si prav tako pomagal s Cannyjem in Houghom. Kot zanimivost je avtor pri svojem izdelku uporabil algoritem za strojno učenje SIFT, s katerim iz

„učne“ množice slik poznanih kovancev pridobi „znanje“, s katerim lahko program razpoznava nepoznane primerke kovancev [18]. Slednji algoritem pri nas ne pride v poštev, saj v našem primeru strojno učenje nima neke dodane vrednosti pri končnemu rezultatu.

(18)
(19)

Poglavje 2

Teorija termografije

Termografija je primer infrardeče slikovne znanosti. Vsa telesa, ki imajo temperaturo višjo kot je absolutna ničla (0 °K), oddajajo infrardeče sevanje.

Zaradi tega lahko s pomočjo termografije na sliki, ki jo zajamemo s pomočjo termografske kamere, vidimo vsa telesa oziroma objekte na sliki, brez da bi bili v naravnem okolju vidno osvetljeni. Ob višji temperaturi nekega opazo- vanega telesa je tudi količina infrardečega sevanja višja, kot bi bila, če bi bila temperatura opazovanega telesa nižja. Zaradi tega neko telo na sliki, zajeto s termografsko kamero, zelo izstopa na hladnem ozadju. To je prikazano s Planckovim zakonom, ki govori o spektralni gostoti črnega telesa (fizikalno telo, ki popolnoma absorbira vse valovanje vanj in ga tudi oddaja) v odvi- snosti od valovne dolžine in temperature, kar je prikazano tudi v enačbi 2.1.

dR(λ, T)

= 2πhc2λ−5

e(hc/λkBT)−1 (2.1)

Levi del enačbe predstavlja spektralno gostoto, tj. moč sevanja, ki ga od- daja telo na enoto valovne dolžine, λ v enačbi predstavlja valovno dolžino, h predstavlja Planckovo konstanto (6,62607015×10−34J ·Hz−1), kB pred- stavlja Boltzmannovo konstanto (1,38064852×10−23 m2 kg s−2 K−1), c je hitrost svetlobe (299.792.458 m/s) in T predstavlja absolutno temperaturo črnega telesa v stopinjah Kelvina (°K) [13]. Na sliki 2.1 je prikazan spekter

5

(20)

črnega telesa, ki prikazuje krivulje ob različnih temperaturah. Iz grafa je razvidno, da je ob višjih temperaturah sevanje črnega telesa višje z manjšo valovno dolžino in ob nižjih temperaturah nižje z večjo valovno dolžino. Ter- mografska kamera zazna svetlobo na valovni dolžini med 9 µm in 14 µm, kar sega globoko v spekter nam nevidne infrardeče svetlobe. Kamera nam potem sevanje na telesu med prej omenjenima valovnima dolžinama prikaže v človeku prijaznem svetlobnem spektru na valovnih dolžinah med 380 nm in 740 nm (barvni pas na sliki 2.1). Modra krivulja prikazuje, v vidnem spektru, telo pri temperaturi 5000 °K , zelena pri 4000 °K in rdeča pri 3000 °K.

UV VISIBLE INFRARED

0 2 4 6 8 10 12 14

0 0.5 1 1.5 2 2.5 3

Spectral radiance (kW · sr⁻¹ · m⁻² · nm⁻¹)

Wavelength (μm) 5000 K

4000 K

3000 K 0

2 4 6 8 10 12 14

0 0.5 1 1.5 2 2.5 3

Spectral radiance (kW · sr⁻¹ · m⁻² · nm⁻¹)

Wavelength (μm) 5000 K

4000 K

3000 K

Slika 2.1: Spekter črnega telesa.

(21)

Diplomska naloga 7

2.1 Termografska kamera

Termografska kamera s pomočjo infrardečega sevanja sestavi sliko (termo- gram) z vidno svetlobo. V primerjavi s klasičnimi kamerami, ki zaznajo svetlobo med 400 nm in 700 nm, zaznajo termografske kamere vso svetlobo valovnih dolžin med 9000 nm in 14.000 nm (9µm in 14µm).

Ena izmed pomembnejših razlik med omenjenimi kamerami so leče. Ker steklo blokira dolgo-valovno infrardečo svetlobo, ta material ni primeren za uporabo pri termografskih kamerah. Zaradi tega se pri teh kamerah za leče uporabljajo materiali, ki ne blokirajo infrardeče svetlobe, kot na primer: ger- manij, kalcijev fluorid, kristalni silicij, cinkov selenid ipd. [15].

Termografske kamere običajno sestavijo sivinsko sliko, na kateri se upo- rabi poljubna barvna paleta, ki obarva slikovne elemente na zajeti sliki glede na intenziteto določenega slikovnega elementa. V praksi se za predstavitev slik z barvno paleto običajno uporablja sivinska barvna paleta „white hot“, ki vidno označi razlikovanje v temperaturah na sliki tako, da toplejše ele- mente predstavi svetleje kot hladnejše elemente. Med ostalimi priljubljenimi paletami je tudi „ironbow“, ki toplejše elemente zajete slike predstavi s sve- tlejšimi toplimi barvami (rdeča), medtem ko hladnejše predstavi s temnejšimi hladnimi barvami (vijolična). Videz zajete slike obeh palet je prikazan na sliki 2.2.

Slika 2.2: Primerjava barvnih palet „white hot“ in „ironbow“.

(22)

2.2 Emisivnost

Kot je bilo omenjeno prej, je črno telo fizikalno idealen objekt, ki vpija in od- daja vso valovanje. V praksi tak idealen objekt seveda ne obstaja. Najbližje temu telesu je material vantablack, ki vpije do 99,965 % vse vidne svetlobe [16]. Zmožnost oddajanja toplotnega sevanja, ki ga neka snov oziroma ma- terial oddaja, se imenuje emisivnost. Toplotno sevanje oddaja vsaka snov, vendar ga vsaka snov oddaja v različnih količinah. Emisivnost nekega ma- teriala se meri od 0,00 (ne oddaja toplotnega sevanja) do 1,00 (popolnoma oddaja toplotno sevanje). Obe navedeni skrajnosti sta zgolj teoretični, saj seveda objekt s koeficientom emisivnosti 0 ali 1 ne obstaja. Primer materiala z nizkim toplotnim sevanjem je srebro s koeficientom emisivnosti 0,02, ma- terial z visokim toplotnim sevanjem pa je na primer asfalt, ki ima koeficient emisivnosti 0,98. V teoriji bi imelo črno telo koeficient emisivnosti 1,00, če na primer nanj deluje toplotno sevanje s 50 °C in ta tudi oddaja toplotno sevanje z 50 °C. Pri razvoju izdelka sem si pri kalibraciji kamere pomagal z orodjem FLIR ResearchIR, ki omogoča nastavitev koeficienta emisivnosti za določeno območje zanimanja (angl. region of interest, ROI). V tabeli 2.1 so navedeni materiali in kateri koeficienti emisivnosti so upoštevani pri razvoju izdelka.

material koeficient emisivnosti (ε) plastika (polieten) 0,94

jeklo 0,59

les 0,90

Tabela 2.1: Uporabljeni materiali in njihovi koeficienti emisivnosti [11].

(23)

Poglavje 3

Uporabljene tehnologije

Celoten izdelek je sestavljen iz več delov. Najbolj pomembna tehnologija je industrijski računalnik, ki ga je izdelalo nemško podjetje SICK – SICK SIM4000, na katerem se izvaja glavni program za delovanje izdelka, kot tudi sama obdelava slik, lokalno shranjevanje podatkov na SD kartico in komu- nikacija z vmesnikom API na oddaljenem strežniku. Zelo pomembna je tudi termografska kamera FLIR A615, ki smo jo uporabili za zajem slik in je priključena na računalnik SICK SIM4000. Pri programski opremi smo za razvoj izdelka na računalniku SICK SIM4000 uporabili SICK AppStudio in SICK AppManager, ki sta del programskega paketa SICK AppSpace [7]. Za kalibracijo in nastavitve kamere smo uporabili FLIR ResearchIR. Za izvoz podatkov iz aplikacije na oddaljen strežnik, ki jih lahko prebere naprava za vrtanje navojev, smo izdelali vmesnik API z arhitekturo REST s pomočjo okolja Node.js.

3.1 Industrijski računalnik SICK SIM4000

Industrijski računalnik SICK SIM4000 (Sensor Integration Machine 4000) je računalnik, namenjen izdelavi in izvajanju aplikacij, povezanih z računalni- škim vidom. Izdelalo ga je priznano nemško podjetje SICK, ki se v večini ukvarja z izdelavo kamer in senzorjev ter z razvojem namenskih aplikacij za

9

(24)

uporabo njihovih izdelkov. Računalnik se poveže z osebnim računalnikom preko M-12 v RJ45 kabla, kar omogoči tudi razvijanje aplikacij na napravi s pomočjo namenske aplikacije SICK AppStudio. Računalnik ima 24 pri- ključkov (slika 3.1), kjer je srednjih 8 priključkov namenjenih za povezavo s kamerami in senzorji (S1-S8), spodnjih 8 pa podpira povezavo preko M-12 v RJ45 kabla preko tehnologije ethernet, kar omogoča pridobivanje podatkov iz več naprav hkrati. Integrirano ima tudi knjižnico za obdelavo slik HAL- CON in omogoča povezavo s spletom, v kolikor je računalnik priključen na lokalno omrežje, ter lokalno shranjevanje podatkov na SD kartico [10].

Slika 3.1: Industrijski računalnik SICK SIM4000.

3.2 Termografska kamera FLIR A615

V okviru diplomskega dela smo za zajem slik uporabili termografsko kamero FLIR A615 s 25-stopinjsko lečo (slika 3.2). Ker ima kamera omogočeno napajanje prek etherneta (angl. power over ethernet, PoE), je povezana na

(25)

Diplomska naloga 11 računalnik SICK SIM4000 preko M-12 v RJ45 kabla na ethernet priključek, ki omogoča tudi napajanje. Kamera omogoča zajem slik v ločljivosti 640 x 480 slikovnih elementov, ki jih predstavi v 16-bitnem formatu. Naprava ima razpon zaznavanja temperature med -20 °C in 2000 °C z natančnostjo ± 2

°C (± 2%) na posamezno branje temperature in goriščno razdaljo 24,6 mm z avtomatsko nastavljivim fokusom in ročnim motoriziranim fokusom [2].

Slika 3.2: Termografska kamera FLIR A615 25°.

3.3 Razvojno okolje SICK AppStudio

SICK AppStudio je razvojno okolje, ki je namenjeno razvijanju aplikacij na napravah podjetja SICK, predvsem na industrijskem računalniku SICK SIM4000, in je del okolja SICK AppSpace. Razvoj poteka v programskem jeziku Lua z nekaterimi prilagojenimi funkcijami za delo s prej omenjeno strojno opremo. Ker se podjetje SICK ukvarja z razvojem senzorjev, ka- mer in posebnih industrijskih računalnikov, ima program SICK AppStudio kot privzeto vgrajenih mnogo funkcij iz področja računalniškega vida. Upo- rabljene funkcije za naš izdelek so podrobneje opisane v četrtem poglavju.

Okolje ima vgrajen IDE z urejevalnikom, vidnem na sliki 3.3, in orodji ter

(26)

nudi polno podporo ostalim knjižnicam, napisanim v jeziku Lua. Nudi tudi možnost uporabe emulatorja, tako da je mogoče razvijati aplikacije v na- videznem (angl. sandboxed) okolju, brez da bi bili povezani na računalnik SIM4000. Izvajanje aplikacij se običajno predstavi s spletnim uporabniškim vmesnikom, ki se ga zgradi v razvojnem okolju, kar omogoča enostavno pred- stavitev podatkov končnemu uporabniku in med drugim podpira tudi jezika HTML in CSS [8].

Uporabili smo tudi program SICK AppManager, ki je tudi del okolja SICK AppSpace in omogoča enostavno nameščanje zunanjih aplikacij na SIM4000 računalnik ter urejanje nastavitev.

Slika 3.3: Videz integriranega razvojnega okolja v SICK AppStudio.

(27)

Diplomska naloga 13

3.4 Lua

V samem razvojnem okolju SICK AppStudio se, poleg HTML in CSS, za razvoj v večini uporablja programski jezik Lua. Programski jezik ima precej preprost način programiranja, saj razvijalcu omogoča razvoj nekega produkta brez podrobnega poznavanja notranjosti jezika. Prednost Lue je dinamičnost, zmogljivost in preprostost, saj je zasnovan kot neke vrste razširljiv skriptni jezik in omogoča preprosto integracijo ter odlično kompatibilnost z zunanjimi knjižnicami [5].

3.5 Git

Git je programska oprema, namenjena sledenju sprememb in shranjevanju verzij v neki skupini datotek, ki vsebujejo programsko kodo. Glavna upo- raba orodja je namenjena usklajenemu razvoju v skupini ljudi, saj vsebuje funkcionalnost, ki omogoča razvejanje verzij, kjer vsak dela na svoji veji (npr.

vsak naredi svoj del aplikacije) in se potem na koncu koda združi. Za shranje- vanje kode in lepši pregled nad verzijami se običajno uporablja enega izmed namenskih spletnih orodij, kot na primer GitHub, GitLab in BitBucket, ki temeljijo na Git-u [3].

Pri naši rešitvi smo za shranjevanje verzij kode uporabili spletno orodje GitHub. Orodje nam omogoča preprost pregled kode ter lažji pregled nad preteklimi verzijami in razvitimi funkcionalnostmi. [4].

3.6 Node.js

Node.js je odprtokodno večplatformsko strežniško okolje, ki je namenjeno predvsem razvoju spletnih aplikacij. V našem primeru je koristen zaradi shranjevanja podatkov iz zajetih slik na oddaljen vmesnik API. Za shra- njevanje v bazo smo uporabili MongoDB in Node.js vtičnik Mongoose, ki omogoča pisanje in branje podatkov v formatu JSON.

(28)

3.7 MongoDB

MongoDB je večplatformski program, ki služi kot sistem za upravljanje s po- datkovnimi zbirkami (SUPB) in temelji na principu NoSQL. Podpira CRUD operacije v JSON notaciji, kar omogoča večjo fleksibilnost v primerjavi z običajnimi SQL bazami in podpira tudi shranjevanje datotek. V okviru di- plomske naloge smo MongoDB uporabili kot orodje za shranjevanje podatkov, slik, ki jih izdelana aplikacija prebere. Podatke iz prebranih slik smo s po- močjo Node.js vtičnika Mongoose naložili na bazo. Na sliki 3.4 je prikazano okolje MongoDB Atlas, v katerem imamo vpogled v naložene podatke iz naše aplikacije. Podatki so zapisani v JSON formatu.

Slika 3.4: Videz shranjenih koordinat iz prebranih slik v orodju MongoDB Atlas.

3.8 Vmesnik API na oddaljenem strežniku

Za shranjevanje podatkov, prebranih iz zajetih slik, smo s pomočjo okolja Node.js izdelali oddaljen vmesnik API, ki temelji na arhitekturi REST. Na strežniku je omogočeno komuniciranje z vmesnikom preko https zahtevkov:

GET, POST, PUT in DELETE. Vmesnik ima za vsako sliko shranjene po-

(29)

Diplomska naloga 15 datke o površini, središčih, primerjavo med učinkovitostjo različnih funkcij iskanja navojev in možnost hranjenja same slike, ki bo naložena na strežnik.

Namen vmesnika je centralizirano gostovanje obdelanih podatkov, pridoblje- nih iz računalnika SICK SIM4000, ki jih lahko uporabimo za kasnejšo analizo in primerjavo med različnimi metodami iskanja lukenj navojev.

(30)
(31)

Poglavje 4

Razvoj aplikacije

4.1 Opis problema in predlagana rešitev

V okviru diplomskega dela smo želeli ugotoviti, kako bi lahko natančno dolo- čili sredino izvrtanih navojev, kamor bi se namestile vezi pri izdelavi snežne deske. V fazi izdelovanja deske je ta prekrita s smolo in posebno zmesjo, kjer so običajno poslikave. V praksi se sicer navoje za namestitev vezi izvrta šele po tem, ko je deska že prekrita z zmesjo, vendar smo želeli, da se navoji iz- vrtajo še preden je deska prekrita, saj to olajša izdelavo končnega produkta.

Težava nastane, ko se deska premaže z zmesjo, saj ta zakrije izvrtane navoje, izvrtanih navojev pa več ni mogoče videti s prostim očesom, zato bi imeli pri njihovem lociranju težave.

Da bi rešili to težavo, smo se odločili s pomočjo programskega okolja SICK AppSpace, industrijskega računalnika SICK SIM4000 in termografske kamere FLIR A615 razviti aplikacijo, ki določi sredino izvrtanih lukenj navo- jev, skritih pod plastjo posebne zmesi. Da to dosežemo, moramo enakomerno segreti celotno površino deske. S tem smo lahko iz slike, zajete s termografsko kamero, jasno videli, kje se ti navoji nahajajo, saj so narejeni iz kovine, ko- vina pa se ohlaja počasneje od plastike. Aplikacija teče na računalniku SICK SIM4000, kamor smo povezali termografsko kamero. Program zajame sliko, jo obdela, določi koordinate središč izvrtanih navojev in podatke shrani v

17

(32)

podatkovno bazo. Uporabili smo dva različna načina zaznavanja navojev, in sicer zaznavanje področij (angl. blob detection) in Houghovo transformacijo kroga (angl. Circle Hough Transform) [6] ter primerjali razlike med njima.

4.2 Analiza zahtev

Pri analizi zahtev smo opisali funkcionalne in nefunkcionalne zahteve.

4.2.1 Funkcionalne zahteve

Funkcionalne zahteve so zahteve, ki določajo funkcionalne vidike programske opreme. Določajo funkcionalnosti oziroma ključne akcije, ki jih posamezni uporabnik z vlogo uporabnik aplikacije izvaja in jih programska oprema za- gotavlja. Iz vidika vzdrževanja aplikacije dodatna vloga ni potrebna.

Uporabnik aplikacije lahko uporablja naslednje funkcionalnosti:

• gumb za vklop in izklop kamere;

• nastavitev IP naslova kamere;

• nastavitev parametra mejne vrednosti binarizacije (angl. binarization threshold);

• nastavitev parametra velikosti področij (angl. blob area);

• nastavitev parametra velikosti raztezka področja (angl. blob elonga- tion);

• gumb za obdelavo slike, ki poišče središča vseh področij;

• prikaz surove slike;

• prikaz obdelane slike z vidnimi x in y koordinatami;

• lokalno shranjevanje slike na SIM4000;

(33)

Diplomska naloga 19

• nalaganje slik iz trdega diska osebnega računalnika, ki se shranijo na SIM4000;

• obdelava slike z načinom prepoznavanja področij (angl. blob detec- tion);

• obdelava slike z uporabo Houghove transformacije kroga (angl. Circle Hough Transform);

• shranjevanje podatkov iz obdelanih slik v podatkovno bazo in

• vpogled v bazo podatkov obdelanih slik.

4.2.2 Nefunkcionalne zahteve

Nefunkcionalne zahteve so zahteve, ki določajo merila, po katerih se lahko ocenjuje delovanje programske opreme. Opisujejo značilnosti kakovosti pro- gramske opreme ali lastnosti kakovosti.

Pri naši aplikaciji smo analizirali sledeče nefunkcionalne zahteve:

• hitro delovanje omogoča hitro obdelavo slik in shranjevanje na željen medij;

• prijazen in intuitiven uporabniški vmesnik;

• enostavna uporaba in

• možnost oddaljenega dostopa do naprave in vmesnika ter možna objava na splet, saj aplikacija teče v brskalniku.

4.3 Priklop opreme

Industrijski računalnik SICK SIM4000 omogoča priklop do 8 senzorjev ali kamer z napajanjem. Ima tudi 8 ethernet povezav za povezavo z računalniki ali z opremo, npr. kamerami, ki delujejo prek ethernet povezave. V našem

(34)

primeru smo kamero FLIR A615 priklopili na ethernet vhod 4, ki ima tudi PoE funkcionalnost, ki nudi kameri napajanje in povezavo za prikaz slike ter delovanje. Računalnik SICK SIM4000 smo prek ethernet vhoda 1 povezali tudi na mrežno kartico osebnega računalnika za namen razvoja aplikacije. Za povezavo obeh smo potrebovali kabel z M12 in RJ45 priključkoma in jima znotraj računalnika SIM4000 nastavili lokalne IP naslove. Privzeto imajo vsi ethernet priključki definirana svoja podomrežja, ki so razporejena sledeče:

• ETHERNET 1: 192.168.0.1

• ETHERNET 2: 192.168.1.1

• ETHERNET 3: 192.168.2.1

• ETHERNET 4: 192.168.3.1

• ETHERNET 5: 192.168.4.1

• ETHERNET 6: 192.168.5.1

• ETHERNET 7: 192.168.6.1

• ETHERNET 8: 192.168.7.1

Za namene napajanja računalnika SIM4000 smo uporabili M12 kabel z napajalnim adapterjem [9]. Podroben grafični prikaz povezave naprav je viden na sliki 4.1.

4.4 Razvoj na računalniku SICK SIM4000

Za razvoj aplikacije smo uporabili programsko orodje SICK AppStudio, kjer se ob kreiranju novega projekta samodejno ustvarijo mapepages,parameters, resources in scripts, kar poskrbi za strukturiran razvoj. Struktura projekta je vidna na sliki 4.3. V mapi pages so datoteke, ki služijo kot prednji del (angl. front-end) aplikacije. V njej so datoteke s končnicama .html in .css, s katerimi lahko oblikujemo videz končnega produkta. Programsko orodje nam

(35)

Diplomska naloga 21

Slika 4.1: Prikaz povezav na industrijski računalnik SICK SIM4000.

pri oblikovanju prednjega dela omogoča delo z gradniki s funkcijo vlečenja (angl. drag-and-drop) gradnikov v polje in povezavo gradnikov z zalednim delom (angl. back-end) aplikacije, kar je prikazano na sliki 4.2. Na podlagi gradnikov se v ozadju generira HTML koda, ki se jo lahko poljubno ureja.

Spodaj prikazana datoteka z gradniki main.html je glavna stran aplikacije, kjer so implementirane skoraj vse glavne funkcionalne zahteve. Poleg tega se v mapi nahajata še datoteki Nastavitve.html, ki je namenjena upravljanju nastavitev kamere, in primerjava.html, ki znotraj aplikacije odpre spletno stran, kjer so prikazani zapisi prejšnjih meritev.

V mapi scripts imamo glavne datoteke, potrebne za delovanje zalednega dela aplikacije, ki so spisane v programskem jezikuLua. Datotekafunkcije.

luavsebuje funkcije, napisane po meri za lažje pisanje algoritmov, ki vklju- čujejo matematične operacije, delo s tabelami, pretvarjanje tabel v format JSON ter grafičen prikaz besedila in ostalih elementov na sliki. Ker Lua ni

(36)

Slika 4.2: Videz gradnikov v datoteki main.html.

najbolj prijazen programski jezik za delo s podatki v JSON formatu, je vklju- čena datoteka json.lua, ki omogoča obdelavo podatkov v tem formatu. V HTTPClientSample.Lua so napisani protokoli in funkcije za izvoz podatkov v podatkovno bazo prek zahtevka POST. V datoteki kamera.lua so napi- sane skripte za nastavitev kamere, kot tudi njeno delovanje. Vse omenjene datoteke so vključene v glavno datotekosvigelj_termo.lua, ki je izvršljiva datoteka in hkrati tudi osrčje aplikacije. V njej so napisani sami algoritmi za obdelavo slik, delo s slikami, uvažanjem in izvažanjem, prižiganjem in ugašanjem kamere ipd.

Mapa resources vsebuje datoteko cacert.pem, v kateri so navedeni naj- pogostejši strežniški certifikati, izvoženi iz brskalnika Mozilla Firefox [1], kar omogoča zapis meritev v podatkovno bazo prek protokola https. Ostane še mapaparameters z datotekoparametri.cid.xml, kjer so shranjeni parame- tri s privzetimi vrednostmi, kot so mejna vrednost pri binarizaciji, meritve površine področja in definicija raztezka.

Pri diplomskem delu smo, kot je bilo omenjeno prej, uporabili kamero FLIR A615 in za njo spisali skripto, ki omogoča zagon kamere in njeno upo- rabo v aplikaciji. Najprej smo računalniku SIM4000 povedali, na kateri ether- net priključek je kamera priklopljena z ukazom powerOE = Connector.Power.create(’POE3’)in ji nastavili IP naslovCAM1_

(37)

Diplomska naloga 23

Slika 4.3: Videz strukture delovne mape.

IP=’192.168.100.251’. Kamera se seveda ne zažene takoj, temveč za za- gon potrebuje nekaj časa. Ugotovili smo, da je optimalno, da zaustavimo izvajanje skripte za 5 sekund, da se med tem časom kamera popolnoma

(38)

zažene in pripravi za delovanje. Nato smo kameri z ukazom configK1 = Image.Provider.RemoteCamera.GigEVisionConfig.create()dali navodilo, da naj dela v SICK AppSpace okolju in naj zajeto sliko predstavi na gradniku oziroma pregledovalnikuViewer2D. Nastavitev kamere lahko vidimo v izseku 4.1.

powerOE = Connector.Power.create(’POE3’) powerOE:enable(true)

CAM1_IP = nil

--@setCAM1IP(change:string):

local function setCAM1IP(change) -- local CAM1_IP = ’192.168.100.251’

CAM1_IP = change end

Script.sleep(5000)

configK1 = Image.Provider.RemoteCamera.GigEVisionConfig.create()

-- aktivacija kamere

local camera1 = Image.Provider.RemoteCamera.create() camera1:setType(’GIGE_VISIONCAM’)

camera1:setIPAddress(CAM1_IP) camera1:setConfig(configK1)

Izsek 4.1: Nastavitev kamere.

Za filter slike smo uporabili sivinski filter (angl. grayscale). Za funk- cijo vklop in izklop kamere smo uporabili kratek pogojni stavek v funkciji connect(), ki se izvede, ko uporabnik klikne na gumb „Kamera“, ki ka- mero, odvisno od stanja, vklopi ali izključi in tudi primerno obarva kazalnik Kamera_status glede na to, ali je kamera vklopljena ali izklopljena. Nena- zadnje smo dodali še funkcijo handleNewImage(), ki pošlje informacije slike iz kamere v funkcije za obdelavo slik in omogoča predstavitev slike na glavni strani aplikacije. Slednje lahko vidimo v spodnjem izseku 4.2.

(39)

Diplomska naloga 25

--@connect():

function connect()

Log.info(’Povezovanje kamere’)

local active = Parameters.get(’startKamere’) if not active then

local success = camera1:connect() if success then

Parameters.set("startKamere", true) Log.info(’Kamera povezana’)

camera1:start() else

Log.info(’Kamera ni povezana’) end

else

Parameters.set("startKamere", false) Log.info("Kamera ustavljena")

camera1:stop() end

end

function handleNewImage(img)

Log.info("Image from camera1 received") img = img:toGray()

viewer:view(img)

Script.notifyEvent(’newImage’, img) end

Script.serveEvent(’svigelj_termo.newImage’, ’newImage’) Script.serveFunction(’svigelj_termo.connect’, connect)

Izsek 4.2: Vklop kamere in izklop ter predstavitev slike iz kamere.

Zaradi omejenega časa z opremo smo vnaprej posneli nekaj slik in v

(40)

aplikaciji omogočili testni način, ki omogoča uporabo brez priključene ka- mere. Kot vidimo na sliki 4.4 smo dodali gumbe: „Upload“, ki omogoča nalaganje slik na lokalni pomnilnik računalnika SIM4000; „Download“, ki omogoča prenos slik iz SIM4000 na računalnik; in „Delete“, ki izbriše iz- brano sliko ter spustni meni za izbiro slik za prenos, implementiran s funkcijo getPublicFiles(), katero gradnikDropDown1 ob zagonu aplikacije pokliče.

Funkcija rekurzivno poišče vse slikovne datoteke v mapi in gradniku, kot je prikazano v izseku 4.3, in vrne niz v formatu JSON. Gradnik podan niz raz- členi v posamezne opcije v spustnem meniju, ki ob izbiri tudi prikažejo sliko na pregledovalniku Viewer2D. Aplikacija vsebuje tudi gumb „Shrani sliko“, ki iz kamere zajeto sliko, prikazano na pregledovalniku, shrani na lokalni pomnilnik računalnika SIM4000. Vse slike so shranjene v mapi public v bitmap formatu.

--@getPublicFiles():returnType function getPublicFiles()

local t = File.listRecursive(’public’) dropdown = ’[’

for k, v in pairs(t) do if k ~= 1 then

dropdown = dropdown .. ’,’

end

dropdown = dropdown .. ’{"label":"’ .. v .. ’", "value":"’ .. v .. ’"}’

end

dropdown = dropdown .. ’]’

return dropdown end

Izsek 4.3: Funkcija za prikaz vseh slikovnih datotek v spustnem meniju.

Pri obdelavi slike smo posneto sliko s kamero najprej pretvorili v sivin- sko z ukazom image:toGray(), da jo lahko binariziramo. Binarizacija slike je postopek pretvorbe sivinske slike, ki vsebuje 256 različnih odtenkov sive

(41)

Diplomska naloga 27

Slika 4.4: Gumbi in spustni meni za upravljanje s slikovnimi datotekami.

v sliko, ki vsebuje le dve barvi, črno in belo. Deluje tako, da vse slikovne elemente z intenzivnostjo nad neko mejno vrednostjo (angl. threshold) spre- meni v črno, medtem ko ostale spremeni v belo, kar omogoča, da se znebimo nepotrebnega šuma na sliki in ostalih motečih elementov. Rezultat binariza- cije je v našem primeru jasen izvleček 12-ih navojev na sliki z belim ozadjem.

Primerjavo lahko vidimo na spodnji primerjavi na sliki 4.5, kjer so navoji jasno izpostavljeni in obarvani s črno barvo na belem ozadju. Ugotovili smo, da je v našem primeru najbolj optimalna mejna vrednost 82, vendar smo v aplikaciji uporabniku dodali možnost, da s pomočjo drsnika mejno vre- dnost poljubno spreminja. Binarizacija je pomemben del naše aplikacije in smo jo uporabili pri obeh algoritmih za iskanje središč. Za binariziranje smo uporabili ukaz imageGray.binarize(mejnaVrednost).

Pri algoritmu za zaznavanju področij (angl. blob detection) smo najprej nastavili minimalne in maksimalne privzete vrednosti parametrov površine in raztezka področij, ki določata, katera področja ustrezajo tem parametrom in katera ne, nato pa jih ustrezno izloči. V samem uporabniškem vmesniku je dodana možnost, da si uporabnik parametre poljubno nastavi, kot je pri- kazano na sliki 4.6. Ker ima končni uporabnik možnost spreminjanja mejne vrednosti binarizacije, parametrov površine in raztezka, smo se odločili, da bomo podatke o koordinatah središč področij hranili v dveh tabelah, in sicer currCenters, ki hrani podatke o središčih s trenutno nastavljenimi parame-

(42)

(a) vhodna slika (b) sivinska slika

(c) binarizirana slika

Slika 4.5: Primerjava sivinske slike z binarizirano sliko.

Slika 4.6: Nastavitve parametrov v aplikaciji.

(43)

Diplomska naloga 29 tri, inprevCenters, ki hrani podatke o središčih s prej nastavljenimi parame- tri za lažjo primerjavo med spremembami. Po binarizaciji slike smo s pomo- čjo funkcije local blobs = objectRegion:findConnected(20, 3000) na binarizirani sliki izvlekli vse objekte, ki imajo več kot 20 črnih slikovnih ele- mentov skupaj in jih shranili v tabelo področij,blobs. Funkcija prejme mini- malno število in maksimalno število slikovnih elementov, ki se držijo skupaj, in posamezna najdena območja, ki ustrezajo parametrom shrani v tabelo, v n ašem primerublobs. Nastavili smo filtra površine: areaMininareaMaxter raztezka: elongationMininelongationMaxs funkcijoImage.PixelRegion.

Filter.create()ter ju uporabili nad tabelo področij, kar izloči vse objekte v tabeli, ki ne ustrezajo nastavljenim parametrom. Knjižnico PixelRegion uporabimo, ko želimo delati s slikovnimi elementi direktno na sliki in pred- stavlja zbirko več slikovnih elementov na sliki, ki jo običajno uporabimo v kombinaciji s samo sliko. V izseku 4.4 je prikazan del funkcije FindBoard- Screws()pridobivanja koordinat središč področij v tabeliblobs. Z zanko se najprej sprehodimo čez celotno tabelo objektov in od posameznega področja s funkcijo Image.PixelRegion.getArea(blobs, image). Funkcija prejme tabelo področij (blobs) in pripadajočo sliko (image) ter vrne površino tega področja. Posledično s funkcijo Image.PixelRegion.getCenterOfGravity (blobs[i], image)pridobimo točko težišča posameznega področja. Oboje nato shranimo v tabelicurrCentersinscrewAreas. Ob koncu je potreben še grafični izris področij in koordinat na gradnikuViewer, prikazan na sliki 4.7.

Tu smo realizirali in uporabili funkcijoprikaziKoordinato(center, text, barva, imgID), ki prikaže želene podatke na pregledovalniku. V sklopu funkcijeFindBoardScrews() smo dodali še prikaz prejšnjih vrednosti, ki de- luje tako, da ob vsaki spremembi parametrov ponovno pokliče funkcijo in prekopira objekte iz tabelecurrCenters v prevCenters.

(44)

for i = 1, #blobs do

local posamezni = blobs[i]:getArea(image)

local centerArea = blobs[i]:getCenterOfGravity(image) local box = blobs[i]:getBoundingBoxOriented(image) local center, width, height, rotation =

box:getRectangleParameters() currCenters[i] = centerArea screwAreas[i] = posamezni

viewer:addPixelRegion(blobs[i], regionDecoration, nil, imageID) prikaziKoordinato(centerArea, ’(x: ’ ..

round(centerArea:getX(), 3) ..’ y: ’ ..

round(centerArea:getY(), 3) .. ’ Area: ’ .. posamezni,

’GREEN’, imgID) end

Izsek 4.4: Zanka za pridobivanje koordinat in njihov izris.

Drugi uporabljen algoritem za iskanje središč je Houghova transformacija kroga (angl. Circle Hough Transform). Namen Houghove transformacije je poiskati iskano premico, krog, parabolo ali kakršno koli drugo obliko v sliki na podlagi binarizirane slike robov. V našem primeru iščemo krog, tako da smo uporabili Houghovo transformacijo kroga. V sliki robov slikovni elementi pogosto ne ležijo točno na krožnici ali pa nekateri slikovni elementi manjkajo. Houghovo transformacijo lahko uporabimo za iskanje teh krogov, kjer posamezen krog predstavimo s spodnjo enačbo 4.1.

r2 = (x−a)2+ (y−b)2 (4.1) V enačbiainbpredstavljata koordinate središča kroga,rpredstavlja polmer kroga, xin ypredstavljata točko na krožnici [14]. Postopek iskanja posame- znega kroga je sledeč:

Najprej najdemo na sliki vse robove, kar pomeni, da nad binarizirano sliko uporabimo operator za zaznavanje robov, v našem primeru smo uporabili

(45)

Diplomska naloga 31

Slika 4.7: Grafični izris področij in koordinat.

(46)

Cannyjev detektor robov, ki velja za matematično najbolj optimalnega in odpornega na šum. Algoritem poišče robove tam, kjer se intenziteta sivin najbolj spremeni. Algoritem uporablja dva praga – visokega T1 in nizkega T2 oziroma zapisano kot klic funkcije: Image.canny(imageBin, T1, T2).

Vsak slikovni element z jakostjo nad pragom T1 je označen kot močen robni slikovni element, slikovni element z jakostjo med pragovoma je označen kot šibek robni slikovni element. Vsi slikovni elementi z jakostjo pod pragom T2 so zavrženi. Rezultat po apliciranem algoritmu je slika robov, ki z visoko verjetnostjo sovpadajo z robovi na vhodni binarizirani sliki. Nad vsakim robnim slikovnim elementom se nariše krožnica z želenim polmerom r, kjer je robni slikovni element središče kroga, okoli celotnega roba, dokler ne pri- demo na isto mesto. Da smo to dosegli, smo uporabili funkcijo HoughAcc = Image.houghTransformCircle(edgeImg, r, w, h), kjer r predstavlja ra- dij, w, h predstavljata višino in širino vhodne slike robov edgeImg. Rezultat je akumulatorsko polje, vidno na sliki 4.8, kjer smo za lažji prikaz uporabili tri točke iz slike robov na levi in videz akumulatorskega polja z določenim središčem na desni. Na desnem grafu lahko vidimo tri točke, ki predstavljajo središče krožnic na robnih slikovnih elementih (črtkana krožnica). Ob sti- čišču vseh treh črtkanih krožnic lahko z veliko verjetnostjo zagotovimo, da predstavlja središče, označeno z modro.

Ker krožnice v našem primeru niso popolne krivulje, smo v akumulator- skem polju določili lokalne maksimume s funkcijo, ki so v našem primeru točke na akumulatorju, kjer je največje število stičišč akumuliranih krožnic oziroma kjer je jakost slikovnih elementov na akumulatorju najvišja. Tu smo uporabili funkcijolocExt=Image.findLocalExtrema(houghAcc,’MAX’

,_neighborhoodSize,_contrastThreshold), ki prejme za vhodno sliko aku- mulatorsko polje houghAcc. S parametrom ’MAX’ sporočimo, da v akumu- latorskem polju iščemo lokalne maksimume. Vključena sta še dva opcij- ska argumenta, in sicer _neighborhoodSize in _contrastThreshod. Pri prvem lahko nastavimo minimalno število slikovnih elementov, ki spadajo pod isti krog. Če je to število prenizko, na sliki dobimo več krogov, kot

(47)

Diplomska naloga 33

Slika 4.8: Primer določanja središča kroga z uporabo Houghove transforma- cije kroga [17].

bi si jih želeli, saj se ti ne bi izrisovali na primernih mestih. Za naš pri- mer smo ugotovili, da je optimalno število 15 slikovnih elementov. Zadnji parameter v funkciji pa predstavlja mejno vrednost kontrasta, ki loči ekstre- mne slikovne elemente od nepomembnih. V našem primeru smo ugotovili, da je optimalna mejna vrednost 80. Lokalni maksimumi predstavljajo naj- boljše kandidate za središča krožnic na vhodni sliki. Narišemo jih s funkcijo Image.houghTransformExtremaToCircles(locExt, r), ki za vsak lokalni maksimum nariše krog z radijemr.

Algoritem Houghove transformacije kroga, viden v izseku 4.5, lahko za naš primer povzamemo s psevdokodo v šestih korakih:

1. Najdi robove na sliki s Cannyjevim detektorjem robov 2. Za vsako področje

3. Za vsako točko na robu

4. Nariši krožnico s središčem v tej točki na robu s polmerom r 5. Poišči lokalni maksimum v akumulatorskem polju

6. Najdene parametre (r, a, b), ki ustrezajo lokalnim maksimumom, pre- slikaj nazaj na izvirno sliko

(48)

--@FindBoardScrewsHTC():

function FindBoardScrewsHTC()

local edgeImg = imageBin:canny(300, 100) local radius = (math.sqrt(avgArea / math.pi)) local w, h = edgeImg:getSize()

local houghAcc = edgeImg:houghTransformCircle(radius, w, h) viewer2:addImage(edgeImg)

houghAcc:multiplyConstantInplace(255 / houghAcc:getMax()) local locExt = houghAcc:findLocalExtrema(’MAX’, 15, 80)

local circles = houghAcc:houghTransformExtremaToCircles(locExt, radius)

// izris krogov in predstavitev na pregledovalniku viewer2

for i = 1, #circles do

c, r = circles[i]:getCircleParameters()

viewer2:addShape(circles[i], shapeDecoH, nil, imgID2) viewer2:addShape(c, dotDecoH, nil, imgID2)

end

viewer2:present() end

Script.serveFunction(’svigelj_termo.FindBoardScrewsHTC’, FindBoardScrewsHTC)

Izsek 4.5: Algoritem Houghove transformacije kroga.

Kot lahko vidimo na sliki 4.9, se akumulatorsko polje ustvari z risanjem krožnic na vsakem belem slikovnem elementu, prikazanem na sliki robov, kjer smo uporabili povprečen polmer vseh 12 krogov. Iz najsvetlejših točk se nato v akumulatorskem polju na podlagi lokalnih maksimumov določijo središča krogov, ki so prikazani na sliki 4.9 c).

Za shranjevanje podatkov o obdelanih slikah v podatkovno bazo smo uporabili MongoDB in Node.js. Najprej smo v SICK AppStudio napisali skripto HTTPClientSample.Lua, ki vsebuje funkcije za pošiljanje in branje

(49)

Diplomska naloga 35

(a) Cannyjev detektor robov

(b) akumulatorsko polje (c) izris najdenih krogov na vhodni sliki robov

Slika 4.9: Houghova transformacija kroga.

(50)

http in https zahtevkov GET, namenjene izpisu podatkov iz spletne strani, ter POST, ki so namenjene pošiljanju podatkov na spletno stran. Podatki, ki se pošiljajo, so v formatu JSON. V spodnjem izseku 4.5 lahko vidimo način pošiljanja zahtevka POST. V našem primeru hranimo podatke v treh bazah, in sicer:

api/captures, kjer se hranijo podatki obdelanih slik z metodo zazna- vanja področij;

api/houghCaptures, kjer se hranijo podatki obdelanih slik z metodo Houghove transformacije kroga;

api/bothCaptures, kjer se hranijo podatki obeh metod in njuna pri- merjava.

function performHttpPostRequest(url, exportStr) client = HTTPClient.create()

if not client then

print(’Error creating handle’) return

end

local request = HTTPClient.Request.create() request:setURL(url)

request:setContentType(’application/json’) request:setMethod(’POST’)

request:setContentBuffer(exportStr) local response = client:execute(request)

Izsek 4.6: prikaz pošiljanja zahtevka POSTv jeziku Lua.

Funkcija prejme URL spletne strani, v našem primeru recimo https:

//localhost/api/bothCaptures ter niz v obliki JSON, ki ga želimo izvo- ziti v podatkovno bazo, katerega struktura je vidna na sliki 4.10. V funkciji se nato preveri, če je HTTP klient uspešno kreiran. Nastaviti smo morali request:setContentType, da sporoči spletni strani obliko zahtevka, ki ga

(51)

Diplomska naloga 37

Slika 4.10: Videz oblike baze houghCaptures v obliki JSON.

bo prejela, in sicer application/json. Kot privzeto je namreč vsebina na- stavljena tako, da dobi navadno besedilo v HTML obliki text/html. Nasta- viti je bilo potrebno še metodo pošiljanja, kar je v našem primeru POST, in podatke poslati z ukazom client:execute(request).

Za izračun razlik določanja središč po obeh metodah iskanja smo za vsako točko uporabili Pitagorov izrek za izračun razdalje dveh različnih točk v koordinatnem sistemu, prikazan v enačbi 4.2.

d=q(x2x1)2 + (y2y1)2 (4.2) V enačbi d prestavlja razdaljo med točkama, x2 in y2 predstavljata ko- ordinate točke središča, ki sta določeni po metodi Houghove transformacije kroga, x1 iny1 pa predstavljata koordinate točke središča, ki sta določeni po

(52)

metodi iskanja področij.

Uporabnik ima v aplikaciji tudi možnost vpogleda v bazo ter izbris za- pisov iz nje, kot je prikazano na spodnji sliki 4.11. Za prikaz spletne strani znotraj naše aplikacije smo uporabili HTML ukaziframe. Ob kliku na gumb

„Izbriši“ se pošlje zahtevekDELETEna spletno stran skupaj z enolično oznako zapisa (ID), na primer DELETE https://localhost/api/bothCaptures/

61accdd8fcc147882153e639 in se zahtevek iz baze pobriše.

Slika 4.11: Prikaz podatkov, zapisanih v bazi bothCaptures.

4.5 Primerjava uporabljenih metod

Za namen primerjave razlik meritev pri obeh uporabljenih metodah smo po- sneli testno množico 27 slik, ki je vidna na sliki 4.13. Ugotovili smo, da je razlika med obema metodama za določanje središč med središči za vsako točko izmed vseh testnih slik v povprečju enaka 1,40 slikovnih elementov.

Izmed navedenih slik smo za podrobnejšo analizo izbrali sliko 3.bmp, ki je prikazana na sliki 4.12. Za lažjo predstavo podatkov v obeh tabelah smo na njej označili posamezne številke navojev. V tabeli 4.1 lahko vidimo ko- ordinate središč, ki smo jih določili z uporabljenima metodama zaznavanja področij in Houghove transformacije kroga ter razliko oziroma razdaljo med

(53)

Diplomska naloga 39 št. zaznavanje področij Houghova transformacija razlika

navoja x y x y

1 114,2526 165,4925 117,3847 166,0054 3,1738

2 205,4029 164,3059 204,8435 163,8278 0,7359

3 296,8212 164,0883 296,5687 164,9166 0,8660

4 387,9293 163,4411 387,2273 163,8278 0,8015

5 480,3557 163,5222 480,0190 163,8278 0,4547

6 570,3827 163,3438 570,6776 163,8278 0,5668

7 114,2647 345,4174 114,1850 344,5700 0,8512

8 205,1698 344,7843 203,7770 344,5700 1,4092

9 296,9107 345,2285 295,5021 345,6588 1,4728

10 388,6965 344,6084 388,2939 343,4812 1,1970 11 480,0592 345,2525 480,0190 345,6588 0,4083 12 571,9950 344,5815 571,7442 343,4812 1,1285 Tabela 4.1: Primerjava razlik med uporabljenima metodama na sliki 3.bmp.

obema točkama. Razlike so sicer minimalne, vendar smo ugotovili, da pri enem navoju večkrat rahlo odstopajo od ostalih meritev. Sklepamo, da je do tega prišlo zato, ker se je začela deska na robnem navoju med zajemanjem slike malce ohlajati in je posledično področje na tistem navoju malenkost ve- čje kot ostala področja. To lahko za naš primer vidimo predvsem pri prvem navoju. Ostale razlike so posledica oblike posameznega področja, saj ta niso v popolni obliki kroga oziroma krožnica ni popolna krivulja. Posledično je, ker pri algoritmu za zaznavanje področij za določanje središča uporabljamo točko težišča, zaradi nepopolne oblike središče lahko malenkost netočno.

V drugem delu primerjave obeh metod smo na sliki 3.bmp ročno določili središča za vsak posamezen navoj tako, da smo poljubno izbrali tri točke na krožnici, kot je vidno na sliki 4.13. Izbrali smo si točke na slikovnih elementih na prehodu iz najtemnejšega dela v za odtenek svetlejši del slike.

To nam omogoča, da s pomočjo sistema treh enačb 4.3, iz treh poznanih točk določimo natančen polmer in koordinate središča krožnice.

(54)

Slika 4.12: Testna slika 3.bmp z označenimi številkami navojev.

(x1a)2 + (y1b)2 =r2 (x2a)2 + (y2b)2 =r2 (x3a)2 + (y3b)2 =r2

(4.3)

V sistemu enačb x1, x2, x3, y1, y2, y3 predstavljajo koordinate treh po- ljubnih točk, ki smo jih določili. V sistemu enačb iščemo tri neznanke, in sicer a, b, ki predstavljata koordinate središča krožnice, in r2, ki predstavlja polmer. Rezultat sistema enačb za vseh 12 navojev na sliki 3.bmp je prikazan na spodnji tabeli 4.2, kjer je prikazano tudi odstopanje med ročno izraču- nanimi koordinatami ter obema metodama. Na dnu tabele je prikazano še povprečno odstopanje posamezne metode od ročnega izračuna središč. Za izračun odstopanja smo uporabili enačbo Pitagorovega izreka za računanje razdalje med dvema točkama v koordinatnem sistemu, ki je vidna v zgornji

(55)

Diplomska naloga 41

Slika 4.13: Uporabljene slike za testiranje.

Slika 4.14: Tri poljubno določene točke na posameznem navoju.

enačbi 4.2. Na podlagi teh podatkov lahko vidimo, da je učinkovitost do- ločanja središč obeh metod podobna, saj je razlika med njima v povprečju le desetinka slikovnega elementa in od ročno izmerjenih središč v povprečju odstopata le za en slikovni element.

Na zadnji sliki 4.14 je viden prikaz glavne strani aplikacije. Na desni strani so gumbi za nalaganje slik in izvoz podatkov v bazo, na levi sta pre- gledovalnika, ki služita prikazu središč za obe metodi iskanja, na sredini je drsnik za nastavitev binarizacije, kot tudi nastavitve dovoljene površine in raztezka, gumb za prikaz vhodne slike in gumb za vklop in izklop kamere.

(56)

št. ročno zaznavanje področij HCT navoja x y odstopanje odstopanje

1 115 167 1,6826 2,5838

2 206 165 0,9156 1,6466

3 296 166 2,0807 1,2236

4 388 165 1,5605 1,4040

5 481 164 0,8021 0,9960

6 571 163 0,7066 0,8884

7 113 345 1,3319 1,2606

8 205 345 0,2745 1,2964

9 298 347 2,0796 2,8351

10 387 346 2,1942 2,8317

11 480 346 0,7498 0,3417

12 572 343 1,5816 0,5450

povprečje: 1,3300 1,4877

Tabela 4.2: Primerjava razlik med ročnim izračunom središč in uporablje- nima metodama na sliki 3.bmp.

(57)

Diplomska naloga 43

Slika4.15:Videzglavnestraniaplikacije.

(58)
(59)

Poglavje 5 Zaključek

V okviru diplomskega dela smo se spoznali z razvojnim okoljem SICK App- Studio in industrijskim računalnikom SICK SIM4000, na katerem smo razvili spletno aplikacijo za detekcijo navojev segrevane snežne deske (angl. snow- board) na slikah, posnetih s termografsko kamero FLIR A615. Razvoj v omenjenem okolju je potekal v jeziku Lua, kjer smo implementirali dva algo- ritma za detekcijo navojev, in sicer zaznavanje področij ter Houghovo trans- formacijo kroga. Izkazalo se je, da sta oba algoritma ustrezna za določanje središč, ker smo z njima dobili zelo natančne in med seboj primerljive re- zultate. Ugotovili smo, da so med obema algoritmoma minimalne razlike in imata v primerjavi z ročnimi meritvami zelo majhna odstopanja. Poleg tega smo s pomočjo Node.js, HTML, MongoDB in arhitekture REST im- plementirali še podatkovno bazo, kamor se podatki meritev shranjujejo v JSON formatu. Ob tem smo se tudi spoznali s področjem računalniškega vida, samim delovanjem termografskih kamer in njihovo uporabo v realnem okolju.

Zaradi omejenega časa z opremo nam ni uspelo izpeljati vseh zadanih ciljev. Pri prihodnjem razvoju bi lahko segrevali desko do natančno določene mejne temperaturne vrednosti, katero bi odčitali s pomočjo termografske kamere, nato pa bi središča zaznali ob natančno določeni nižji temperaturni vrednosti, kar bi nam omogočilo polno avtomatizacijo aplikacije.

45

(60)
(61)

Literatura

[1] CA certificates extracted from Mozilla. Dosegljivo: https://curl.se/

docs/caextract.html. [Dostopano: 11. 11. 2021].

[2] FLIR A315 / A615. Thermal Imaging Cameras for Machine Vision. Do- segljivo: https://flir.netx.net/file/asset/10209/original. [Do- stopano: 20. 7. 2020].

[3] Git. Dosegljivo: https://git-scm.com/. [Dostopano: 14. 9. 2021].

[4] GitHub. Dosegljivo: https://github.com/. [Dostopano: 14. 9. 2021].

[5] Lua: about. Dosegljivo: https://www.lua.org/about.html. [Dosto- pano: 14. 9. 2021].

[6] OpenCV. Hough Circle Transform. Dosegljivo: https://docs.opencv.

org/3.4.15/d4/d70/tutorial_hough_circle.html. [Dostopano: 02.

11. 2021].

[7] SICK AppSpace. Dosegljivo: https://cdn.sick.com/media/docs/6/

16/216/special_information_sick_appspace_en_im0065216.pdf.

[Dostopano: 29. 01. 2022].

[8] SICK AppStudio. Dosegljivo: https://cdn.sick.com/media/

familyoverview/2/52/652/familyOverview_SICK-AppStudio_

g387652_en.pdf. [Dostopano: 29. 01. 2022].

[9] SIM 4000 Sensor Integration Machine Operating Instructi- ons. Dosegljivo: https://cdn.sick.com/media/docs/0/10/210/

47

(62)

operating_instructions_sim4000_sensor_integration_machine_

en_im0066210.pdf. [Dostopano: 11. 11. 2021].

[10] SIM4x00. Dosegljivo: https://cdn.sick.com/media/

familyoverview/2/52/452/familyOverview_SIM4x00_g386452_

en.pdf. [Dostopano: 20. 7. 2020].

[11] ThermoWorks. Infrared Emissivity Table. Dosegljivo: https://www.

thermoworks.com/emissivity-table. [Dostopano: 15. 7. 2020].

[12] Witold Czajewski and Marcin Iwanowski. Vision-based vehicle speed measurement method. In International Conference on Computer Vision and Graphics, pages 308–315. Springer, 2010.

[13] G. Gaussorgues. Thermal Emission by Matter, pages 11–60. Springer Netherlands, Dordrecht, 1994.

[14] Sandi Krivec. Primerjava segmentacijskih algoritmov na posnetkih zdra- vih in obolelih očeh. Magistrsko delo, Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko, 2018.

[15] Tom Nardi. Hackaday. Adding Optics To A Consumer Thermal Camera.

Dosegljivo: https://hackaday.com/2018/03/08/adding-optics-to- a-consumer-thermal-camera/. [Dostopano: 8. 7. 2020].

[16] Anuj Patil. Vantablack: The world’s darkest material.Man-Made Texti- les in India, 43(1), 2015.

[17] Simon Just Kjeldgaard Pedersen. Circular hough transform. Aalborg University, Vision, Graphics, and Interactive Systems, 123(6), 2007.

[18] Tjaž Vračko. Razpoznavanje kovancev v digitalnih slikah s pomočjo raču- nalniškega vida in strojnega učenja. Diplomska naloga, Univerza v Ma- riboru, Fakulteta za elektrotehniko, računalništvo in informatiko, 2018.

(63)

Diplomska naloga 49 [19] Tadej Žgur. Detekcija položaja kroglice na igralniški ruleti s pomočjo računalniškega vida. Diplomsko delo, Univerza v Ljubljani, Fakulteta za računalništvo in informatiko, 2005.

Reference

POVEZANI DOKUMENTI

Glede na osnovni vmesnik za delo s podatki, ki ga ponuja .NET ogrodje, je razvoj s pomočjo LINQ-a veliko hitrejši in enostavnejši, kar omogoča prihranek na času razvoja

Osnovna naloga pričujoče diplomske naloge je bila ugotoviti efekt nošenja različnih majic na GDV posnetke koron prstov s pomočjo Kirlianove kamere.. Pri tem so bile uporabljene

V ta namen sistematièno predstavite razvoj aplikacije za spletne novice s klepetalnico, ki ima veè vrst uporabnikov, podatke pa hrani v podatkovni bazi MySQL.. Analizo zahtev

V diplomskem delu smo predstavili razvoj mobilne aplikacije za operacijski sistem Android, ki s pomočjo pametnih mobilnih naprav omogoča zajemanje 3D slike in prikaz stereoskopske

Cilj diplomske naloge je ugotoviti, kako se otroci s pomočjo pripomočkov (makete, zemljevida) za orientiranje znajdejo v prostoru, katere izraze, povezane s

Slika 45: Razvrstitev pomembnosti glede na možnost izdelave drsnih vrat po meri (1- zelo pomembna lastnost; 6 – nepomembna lastnost). Kar 80% vprašanim je izdelava drsnih vrat po

sem An Besednjak, študent Fakultete za management v Kopru. Za temo diplomske naloge sem izbral razvoj turizma v občini Brda. Naloga je podprta s konkretno

Vsak podizvajalec je oseba, ki tudi uradno sodeluje pri projektu. Tako kot partnerji, morajo tudi podizvajalci podpisati pogodbi podobno pristopno izjavo o sodelovanju. Kot