• No results found

Zat´ıˇ zen´ı pˇrenosov´ eho p´ asma

Aby bylo moˇzn´e pˇripojit vˇsech ˇsest webkamer k testovac´ı konfiguraci serveru, byl zvolen pro zv´yˇsen´ı poˇctu port˚u aktivn´ı USB3.0 rozbovaˇc. Volba pr´avˇe rozboˇcovaˇce standardu USB3.0 byla d˚uleˇzit´a, aby byla zaruˇcena poˇzadovan´a datov´a propustnost.

7.1.6 Poˇ zadavky klienta

Klienstk´a aplikace vzhledem ke sv´emu univerz´aln´ımu pouˇzit´ı na zaˇr´ızen´ıch disponuj´ıc´ıch webov´ym prohl´ıˇzeˇcem s podporou HTML5, Javascriptu a WebGL pˇr´ıliˇs omezuj´ıc´ıch parametr˚u nemaj´ı. Omezen´ı se ovˇsem nal´ez´a v nutnosti podpory grafick´eho adapt´eru pro OpenGL ES 2.0. Tuto podporu ale najdeme ve vˇetˇsinˇe c´ılov´ych zaˇr´ızen´ı zm´ınˇen´ych v´yˇse.

7.2 Softwarov´ a ˇ c´ ast

Z n´avrhu ˇreˇsen´ı je pouˇzita koncepce server-klient. Jak uˇz bylo v´yˇse zmiˇnov´ano v n´avrhu, server bude zaˇrizovat zpracov´an´ı obrazu z kamer a jeho streamov´an´ı.

Klient pˇrijme stream a pˇrid´a grafick´e uˇzivatelsk´e rozhran´ı pro pohyb po v´ysledn´em panoramatu.

7.2.1 Server

Serverov´a aplikace je realizov´ana pro operaˇcn´ı syst´em Linux. Jako programovac´ı jazyk byla zvolena Java, z d˚uvodu jednoduch´e pˇrenositelnosti k´odu pro pˇr´ıpadn´eho budouc´ı rozˇs´ıˇren´ı na jin´e platformy. Pro spuˇstˇen´ı aplikace je nutn´e tedy Java JDK minim´alnˇe verze 1.8, FFmpeg minim´alnˇe verze 2.2.x se vˇsemi zavisl´ymi knihovnami (zejm´ena jsou nutn´e knihovny libavutil, libavcodec, libavdevice) a VLC(konkr´etnˇe postaˇcuje konzolov´a verze CVLC) . Blokov´e zobrazen´ı funkˇcn´ıch ˇc´ast´ı aplikace popisuje obr´azek 7.3. Jednotliv´e bloky a samotn´a funkce aplikace budou pops´any v n´asleduj´ıc´ıch podkapitol´ach. Samotn´a aplikace a zdrojov´e k´ody jsou zaznamen´any na pˇriloˇzen´em CD t´eto pr´ace.

Obr´azek 7.3: Funkˇcn´ı ˇc´asti serveru

Funkce aplikace

Dle obr´azku 7.3 aplikace umoˇzˇnuje dvˇe moˇznosti nastaven´ı parametr˚u. Za prv´e po-moc´ı konfiguraˇcn´ıho souboru, tato varianta je vhodn´a pro nasazen´ı na termin´alov´em (negrafick´em) serveru. A za druh´e pomoc´ı grafick´eho uˇzivatelsk´eho rozhran´ı. Obˇe moˇznosti budou pops´any n´ıˇze. Po nastavaven´ı konfigurace se vytvoˇr´ı instance jed-notliv´ych pˇripojen´ych webkamer. Kaˇzd´a tato instance m´a pro sebe vytvoˇren´y samostatn´y proces pˇrijmu sn´ımk˚u pomoc´ı FFmpeg nebo CVLC. Pro budouc´ı rozˇs´ıˇren´ı je v kaˇzd´e instanci webkamery implementov´an blok ´upravy sn´ımk˚u pomoc´ı JavaCV, o tomto rozˇs´ıˇren´ı se budu zmiˇnovat v kapitole N´avrh ˇreˇsen´ı vyuˇz´ıvaj´ıc´ı stitching. Sn´ımky z kaˇzd´e webkamery pot´e aplikace dle zadan´ych parametr˚u odes´ıl´a vhodn´emu streamovac´ımu serveru. Tento server je vˇzdy vybr´an dle zvolen´eho v´ystupn´ıho kodeku. Pro form´aty

WEBM a MP4 je pouˇzit upraven´y open source stream server Stream-M. Pro OGV se vyuˇz´ıv´a ˇreˇsen´ı Icecast 2 distribuovan´e pod licenc´ı GNU GPL v2. Veˇsker´e v´ystupn´ı streamy vyuˇz´ıvaj´ı pˇrenosov´eho protokolu HTTP. Aplikace z´aroveˇn obsahuje inte-grovan´y webserver, kter´y host´ı klientskou ˇc´ast aplikace a z´aroveˇn poskytuje konfig-uraci t´eto ˇc´asti.

Instance webkamery

V t´eto ˇc´asti se ˇreˇs´ı veˇsker´a obsluha webkamer. V programu je kaˇzd´a webkam-era reprezentac´ı instance jednoduch´e tˇr´ıdy webcam, kter´a m´a dva atributy - n´azev a oznaˇcen´ı zaˇr´ızen´ı v operaˇcn´ım syst´emu. Pˇri spuˇstˇen´ı aplikace se vytvoˇr´ı pr´avˇe tyto instance dle aktu´alnˇe pˇripojen´eho hardwaru. Pro vyhled´an´ı kamer pˇripojen´ych k poˇc´ıtaˇci slouˇz´ı metoda getListWebcams(), pro svoji funkci vyuˇz´ıv´a programu v4l2-ctl. Samotn´e z´ısk´an´ı sn´ımk˚u z kamer a jejich nastaven´ı pot´e obstar´av´a v´ykonn´a ˇc´ast v j´adru aplikace reprezentov´ana tˇr´ıdami commandMaker a streamProcess, tyto tˇr´ıdy budou pops´any d´ale.

Stream server

Aplikace v sobˇe integruje dvˇe moˇznosti stream serveru. Prvn´ı moˇznost pomoc´ı open source n´astroje StreamM, kter´y zajiˇst’uje stream pomoc´ı kodek˚u WebM a MP4(h.264).

A druh´a moˇznost slouˇz´ı pro kodek OGV(Theora), kde se vyuˇz´ıv´a n´astroje Icecast.

Aplikace vytvoˇr´ı dle nastaven´e konfigurace parametry k tˇemto n´astroj˚um a spust´ı jejich instanci za pomoci tˇr´ıdˇe serverProcess. Samotn´e nastaven´ı a pˇred´an´ı vstupn´ıch sn´ımk˚u pot´e zajiˇstuje opˇet pˇr´ısluˇsn´a instance tˇr´ıdy commandMaker. Dle typu zv-olen´eho kodeku, a tud´ıˇz i streamovac´ıho n´astroje aplikace vybere pˇr´ısluˇsn´y n´astroj pro z´ısk´an´ı sn´ımk˚u. Pro kodeky WebM a MP4 se jako zdrojov´y n´astroj vybere ffmpeg, pro kodek OGV je vyuˇzito cvlc. V tˇechto obou pˇr´ıpadech aplikace nastav´ı vhodn´e parametry kamer´am a n´astroj˚um pˇred´a jejich konfiguraci. V obou pˇr´ıpadech stream prob´ıh´a po protokolu HTTP na zvolen´em portu v konfiguraci aplikace. Mezi nejdl˚uleˇzitˇejˇs´ı parametry patˇr´ı rozliˇsen´ı, sn´ımkovac´ı rychlost, nastaven´ı kompresn´ıho pˇrenosu a synchronizace kl´ıˇcov´ych sn´ımk˚u.

J´adro aplikace

J´adro aplikace zpostˇredkov´av´a ˇr´ızen´ı vˇsech jednotliv´ych souˇc´ast´ı. Zajiˇst’uje ˇr´ızen´ı a sledov´an´ı stavu jednotliv´ych souˇc´ast´ı dle blokov´eho diagramu na obr´azku 7.3.

Samotn´e metody jsou obsaˇzeny v hlavn´ı tˇr´ıdˇe cel´e aplikace. Kaˇzd´a jednotliv´a souˇc´ast aplikace obsahuje metodu pro zjiˇstˇen´ı jej´ıho aktu´aln´ıho stavu a metodu pro kom-pletn´ı zastaven´ı. Tˇr´ıdy, kter´e aplikace obsluhuje, jsou pops´any zde:

• commandMaker - urˇcuje form´at a parametry dan´ym pˇr´ıkaz˚um dle nastaven´e konfigurace

• serverHTTP - integrovan´y jednoduch´y HTTP server

• serverProcess - obsluha a ˇr´ızen´ı streamovac´ıch server˚u

• settingsClient - nastaven´ı klienstk´e ˇc´asti del parametr˚u serveru

• streamProcess - obsluha a ˇr´ızen´ı samotn´eho streamu

• webcam - tˇr´ıda urˇcuj´ıc´ı vlastnosti kamer

Kaˇzd´a instance kamery a aktu´alnˇe pouˇz´ıvan´y stream server pro svou pr´aci vytvoˇr´ı samostatn´y proces. V´yhodou tohoto rozvrˇzen´ı je, ˇze v pˇr´ıpadˇe chyby jednoho z tˇechto kl´ıˇcov´ych prvk˚u nenastane p´ad cel´e aplikace, ale pouze jednotliv´e ˇc´asti. Aplikace pr´avˇe d´ıky kontroln´ım metod´am nad jednotliv´ymi procesy graficky ozn´am´ı uˇzivateli stavy dan´ych funkc´ı. Uˇzivatel pot´e m˚uˇze zkusit znovu spustit pr´avˇe jenom urˇcitou ˇc´ast aplikace. V´ymˇena dat(sn´ımk˚u) mezi streamovac´ım serverem a streamem kamer se prov´ad´ı vˇzdy pomoc´ı rour mezi jednotliv´ymi vytvoˇren´ymi procesy.

Webserver

Funkci zajiˇstuje tˇr´ıda serverHTTP. Jedn´a se o nen´aroˇcn´y server, kter´y slouˇz´ı pro

´

uˇcely hostov´an´ı klientsk´e aplikace. V´ychoz´ı adres´aˇr var/www se nach´az´ı ve zdrojov´e sloˇzce aplikace. V t´eto sloˇzce se i nach´az´ı zdrojov´e soubory klientsk´e ˇc´asti aplikace.

Maxim´aln´ı poˇcet spojen´ı je omezen na 201 a urˇcuje ho promˇenn´a maxConections, aktu´aln´ı poˇcet spojen´ı je d´an promˇenou actualConections.

Konfiguraˇcn´ı soubor

Jak uˇz bylo v´yˇse zm´ınˇeno aplikace lze spouˇstˇet i pˇr´ımo z konzole. Tato funkce je vhodn´a pro termin´alov´e servery. Na to, aby ˇsla aplikace t´ımto zp˚usobem spustit, mus´ı se j´ı jako parametr pˇredat konfiguraˇcn´ı soubor. Vzorov´y konfiguraˇcn´ı sou-bor je obsaˇzen na pˇriloˇzen´em CD t´eto pr´ace. Pokud aplikace bude m´ıt pr´avˇe tento parametr, automaticky se nezobraz´ı grafick´e uˇzivatelsk´e rozhran´ı ale zaˇcnou se pos-tupnˇe s nˇekolika sekundov´ym zpoˇzdˇen´ım spouˇstˇet jednotliv´e funkce programu s parame-try nastaven´ymi pr´avˇe v konfiguraˇcn´ım souboru.

Grafick´e uˇzivatelsk´e rozhran´ı

Grafick´e uˇzivatelsk´e rozhran´ı (GUI) je koncipov´ano tak, aby po uˇzivateli nevyˇzadovalo ˇz´adn´e velk´e moˇznosti nastaven´ı. Obr´azek 7.4 zn´azorˇnuje obrazovku aplikace pˇri spuˇstˇen´ı. GUI se skl´ad´a ze tˇr´ı ˇc´ast´ı moˇzn´ych nastaven´ı, konkr´etnˇe jde o nastaven´ı server˚u, nastaven´ı kamer a nastaven´ı videa. Nastaven´ı server˚u urˇcuje volba pouˇzit´eho kodeku, internetov´e adresy, port stream a webov´eho serveru. Internetov´a adresa je d˚uleˇzit´y parametr pro nastaven´ı klientsk´e aplikace, pokud by totiˇz server nemˇel pˇr´ımou adresu do internetu a byl napˇr´ıklad um´ıstˇen za NATem, tak adresa zadan´a v tomto poli je pr´avˇe adresou viditelnou z internetu. Standardnˇe pˇri spuˇstˇen´ı pro-gramu se vol´ı aktu´aln´ı adresa v´ychoz´ıho adapt´eru. Adresa v tomto poli m˚uˇze b´yt zad´ana bud’ v klasick´em numerick´em form´atu, nebo i pomoc´ı dom´enov´eho n´azvu.

Nastaven´ı port˚u lze nastavit jak pro stream server, tak i pro webov´y server. Stan-dardnˇe jsou voleny porty pro stream server 8080 a pro web server 8888. Nastaven´ı videa urˇcuje z´akladn´ı parametry videa, jako jsou rozmˇery videa (ˇs´ıˇrka a v´yˇska), tyto rozmˇery ovlivˇnuj´ı jak samotn´y pˇr´ıjem sn´ımk˚u z webkamer, tak i velikost zo-brazovan´eho videa v klentsk´e ˇc´asti. Parametr FPS urˇcuje jak´a bude nastaven´a sn´ımkovac´ı rychlost webkamer a samotn´eho pˇrenosu. Hodnoty sn´ımkovac´ı rychlosti pˇr´ımo ovlivˇnuj´ı poˇzadovanou rychlost pˇrenosu, v´ysledky testov´an´ı pˇrenosov´ych rychlost´ı budou uvedeny v z´avˇeru t´eto pr´ace. Nastaven´ı cache urˇcuje velikost vyrovn´ac´ı pamˇeti streamovac´ıho serveru. V nastaven´ı kamer se nastavuje pˇridˇelen´ı jednotliv´ych kamer pˇripojen´ych k poˇc´ıtaˇci ke stran´am v´yˇse zm´ınˇen´e virtu´aln´ı krychle. Jednotliv´e ˇc´asti aplikace se spouˇstˇej´ı bud’ samostatnˇe pomoc´ı pˇr´ısluˇsn´ych tlaˇc´ıtek, nebo pomoc´ı takzvan´eho hromadn´eho spuˇstˇen´ı v doln´ı ˇc´asti GUI. V pˇr´ıpadˇe ruˇcn´ıho spouˇstˇen´ı je vhodn´e, aby se jednotliv´e kamery spouˇstˇely s ˇcasov´ym zpoˇzdˇen´ım alespoˇn pˇet sekund. V pˇr´ıpadˇe automatick´eho spuˇstˇen´ı aplikace automaticky zpoˇzdˇenˇe spouˇst´ı jednotliv´e kamery.

GUI umoˇzˇnuje i kontrolu funkˇcnosti jednotliv´ych stream˚u. Jak uˇz bylo ps´ano v´yˇse v popisu aplikace, zajiˇst’uje to vizu´aln´ı signalizace. Pokud dan´y stream kamery byl spuˇstˇen a funguje, je pod jeho n´azvem zbarveno pozad´ı zelenˇe, pokud je stream

Obr´azek 7.4: Grafick´e uˇzivatelsk´e rozhran´ı

spuˇstˇen, ale nefunguje, zbarven´ı m´a ˇcervenou barvu, a pokud stream nebyl spuˇstˇen pozad´ı, spl´yv´a s pozad´ım GUI. Obr´azek 7.5 ukazuje moˇzn´e situace.

Obr´azek 7.5: Grafick´e uˇzivatelsk´e rozhran´ı - spuˇstˇen´y stream

7.2.2 Klient

Klientsk´a aplikace vyuˇz´ıv´a jazyky HTML5, CSS3, JavaScriptu, knihovny THREE.js a aplikaˇcn´ıho rozhran´ı WebGL. Z tohoto d˚uvodu je moˇzn´e ji spustit na ˇsirok´em mnoˇzstv´ı platforem, kter´e maj´ı webov´y prohl´ıˇzeˇc podporuj´ıc´ı tyto jazyky a aplikaˇcn´ı

rozhran´ı WebGL. Blokov´e zobrazen´ı funkˇcn´ıch ˇc´ast´ı aplikace popisuje obr´azek 7.6.

Jednotliv´e bloky a samotn´a funkce aplikace budou pops´any v n´asleduj´ıc´ıch pod-kapitol´ach. Samotn´a aplikace a zdrojov´e k´ody jsou obsaˇzen´e na pˇriloˇzen´em CD t´eto pr´ace. Klientsk´a aplikace vytvoˇr´ı z dodan´ych stream˚u ve WebGL objekt krychle, na kterou se jednotliv´e streamy budou zobrazovat dle urˇcen´ych stran. Uˇzivatel se pohybuje pomoc´ı ovl´adac´ıho rozhran´ı v prostoru krychle (uvnitˇr krychle).

Klient (HTML5, WEBGL, Javascript)

Obr´azek 7.6: Funkˇcn´ı ˇc´asti klienta

Implementace klienta

Klientsk´a aplikace je hostov´ana na stranˇe serveru v integrovan´em webserveru. Z toho d˚uvodu nen´ı nutn´e na klientsk´e zaˇr´ızen´ı instalovat ˇz´adnou aplikaci, ale pouze pˇristupovat k t´eto aplikaci pomoc´ı webov´eho prohl´ıˇzeˇce s v´yˇse zm´ınˇenou podporou. Adresa pˇr´ıstupu k aplikaci je d´ana nastaven´ım serveru, konkr´etnˇe v poli Internetov´a adresa

a tak´e portem webov´eho serveru zadan´ym v poli Port webov´eho serveru.

Konfigurace

Jak uˇz bylo zm´ynˇeno v´yˇse, konfigurace klientsk´e aplikace se vytvoˇr´ı spoleˇcnˇe s nas-taven´ım serveru. Tud´ıˇz nen´ı nutn´e, aby uˇzivatel klientsk´e aplikace musel nastavo-vat nˇekter´e z parametr˚u. Jelikoˇz se konfigurace vymˇeˇnuje mezi dvˇema r˚uzn´ymi aplikacemi, zvolil jsem jako form´at v´ymˇeny dat jazyk JSON. Z´akladn´ı struktura konfigurace m˚uˇze vypadat napˇr´ıklad takto:

{"defaultPath":"video/video.webm","globalCodec":"video/webm",

Parametr defaultPath urˇcuje, jak´e video se bude pˇrehr´avat v pˇr´ıpadˇe neak-tivn´ıho streamu pro jednotliv´e strany. Dalˇs´ı parametry jako globalCodec,globalWidth a globalHeight ud´avaj´ı pouˇzit´y kodek a rozmˇery videa na jednotliv´ych stran´ach virtu´aln´ı krychle. Posledn´ımi parametry jsou adresy k jednotliv´ym stream˚um oznaˇcovan´e jako pathTexture a poˇzadovan´a strana.

Knihovna THREE.js

Knihovna THREE.js je volnˇe ˇsiˇriteln´a knihovna implementuj´ıc´ı aplikaˇcn´ı rozhran´ı WebGL. Tato knihovna obsahuje nejˇcastˇeji pouˇz´ıvan´e metody a objekty pouˇz´ıvan´e pr´avˇe ve WebGL, vytvoˇren´e tak, aby se k nim pˇristupovalo co nejjednoduˇseji.

Struktura a funkce klientsk´e aplikace

Jednotliv´e moduly v r´amci klientsk´e aplikace na sebe navazuj´ı. ˇR´ıd´ıc´ı ˇc´ast obstar´av´a Javascript. Pˇri spuˇstˇen´ı aplikace se naˇcte nejprve defaultn´ı tmav´y vzhled pozad´ı, zjist´ı se velikost zaˇr´ızen´ı a nastav´ı se zobrazen´ı. Zjiˇstˇen´ı velikosti a z´aroveˇn nastaven´ı zobrazen´ı tak, aby se zabr´anilo zmˇen´am velikosti v pr˚ubˇehu zobrazov´an´ı streamu, je zajiˇstˇeno pomoc´ı meta tagu viewport. Nastaven´ı tohoto tagu je n´asleduj´ı:

<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">

V tˇele str´anky pot´e n´asleduje element div s identifik´atorem container, do kter´eho se budou um´ıst’ovat vygenerovan´e elementy pro vykreslov´an´ı grafiky. Jeˇstˇe pˇred spuˇstˇen´ım samotn´eho zpracov´an´ı panoramatu je provedena kontrola pˇr´ıtomnosti a spr´avn´eho spuˇstˇen´ı WebGL, bez kter´eho se aplikace neobejde. Po t´eto kontrole n´asleduje naˇcten´ı parametr˚u aplikace z konfiguraˇcn´ıho souboru uloˇzen´em na serveru.

Pro toto naˇcten´ı se vyuˇz´ıv´a XMLHttpRequest()pro naˇcten´ı souboru JSON popiso-van´eho v´yˇse.

Po t´eto z´akladn´ı inicializaci se zpracuje konfigurace. Prvn´ım krokem je pˇr´ıprava textur jednotliv´ych stran virtu´aln´ı krychle. Tuto pˇr´ıpravu zajiˇstuje funkce getTexture() pro kaˇzdou stranu samostatnˇe. Funkce vytvoˇr´ı HTML5 element video a pˇridˇel´ı mu nastaven´ı, z´aroveˇn naˇcte zdroj tohoto videa a spust´ı jeho pˇrehr´av´an´ı. Z´aroveˇn se vytvoˇr´ı dalˇs´ı element canvas, kter´y slouˇz´ı jako plocha pro kreslen´ı grafiky do webov´e str´anky. Velikost t´eto plochy je stejn´a jako velikost videa. Abychom mohli pouˇz´ıt tento canvas pro zobrazen´ı videa, mus´ıme z´ıskat pˇr´ıstup k jeho obsahu, pro z´ısk´an´ı pˇr´ıstupu k tomuto obsahu slouˇz´ı v aplikaci promˇenn´a context opˇet vytvoˇren´a pro kaˇzdou stranu samostatnˇe. V tomto pˇr´ıpadˇe uˇz je vˇse pˇripraven´e na vytvoˇren´ı tex-tury pro krychli, kter´a se vytvoˇr´ı ve funkci init(). Samotn´e vytvoˇren´ı textury pak

m´a jako parametr zdroje vˇzdy pˇr´ısluˇsn´y vytvoˇren´y canvas. V n´asleduj´ıc´ı uk´azce k´odu je zobrazena funkce z´ısk´an´ı textury pro levou stranu krychle.

function getTextureLeft(path){

Celou tuto srukturu skl´ad´an´ı textury pro jednotliv´e strany vystihuje diagram na obr´azku 7.7.

Obr´azek 7.7: Diagram otexturov´an´ı stran krychle

Inicializaci sc´eny, kamery a samotn´e krychle, na kterou se budou vkl´adat vytvoˇren´e textury, obstar´av´a funkce init(). V t´eto metodˇe se vytvoˇr´ı sc´ena. To je v podstatˇe jen prostor, do kter´eho se vkl´adaj´ı objekty. Do t´eto sc´eny se pot´e pˇrid´a kamera, neboli pohled do sc´eny. ´Uhel pohledu kamery je zvolen na 75. ˇS´ıˇrka a v´yˇska tohoto pohledu se kv˚uli moˇznosti zobrazen´ı na v´ıce typech zaˇr´ızen´ı vypoˇc´ıt´av´a z aktu´aln´ı velikosti okna, to m´a za d˚usledek st´ale optim´aln´ı zobrazen´ı pohledu. Kamera je po vytvoˇren´ı objektu krychle pˇresunuta dovnitˇr do stˇredu krychle. Pˇred vytvoˇren´ım objektu krychle je nutn´e aplikovat vytvoˇren´e textury uveden´e v´yˇse jako samostatn´e plochy, kter´e budou pokr´yvat strany krychle. Toho je doc´ıleno zmapov´an´ım v´yˇse uveden´eho vytvoˇren´ı textur na tyto plochy, opˇet pro jednotliv´e strany samostatnˇe.

Pot´e se vytvoˇr´ı samotn´y objekt krychle a um´ıst´ı se na nˇej jako jednotliv´e textury pr´avˇe tyto plochy.

Pro renderov´an´ı (znovunaˇcten´ı) sc´eny se vyuˇz´ıv´a CanvasRenderer(), kter´y vol´a funkci render(). Ve funkci render se obnovoj´ı jednotliv´e textury a pohyb krychle.

V pˇr´ıpadˇe pohybu po tomto panoramatu se jednotliv´e textury stran deformuj´ı tak, aby vytv´aˇrely dojem pohybu v prostoru. Nejl´epe tuto deformaci vystihuj´ı tzv. dr´atov´a sch´emata vytvoˇren´eho modelu panoramatu na obr´azku 7.8 , jednotliv´e

strany krychle jsou zv´yraznˇeny tuˇcnˇe.

Obr´azek 7.8: Dr´atov´a sch´emata modelu panoramatu

Ovl´ad´an´ı

V pˇr´ıpadˇe spuˇstˇen´ı klientsk´e aplikace se automaticky spust´ı automatick´e posouv´an´ı po panoramatu, kde rozhled kolem dokola trv´a pˇribliˇznˇe tˇri minuty. Aplikaci vˇsak lze ovl´adat dvˇema zp˚usoby, a to pomoc´ı myˇsi, anebo pomoc´ı dotykov´e obrazovky. Po-moc´ı myˇsi pˇri stisknut´em lev´em tlaˇc´ıtku a n´asledn´em pohybu se posouv´ame v r´amci obou os. Pˇribliˇzov´an´ı a odd´alov´an´ı pohledu se prov´ad´ı koleˇckem myˇsi. Pˇri dosaˇzen´ı maxim´aln´ıho odd´alen´ı a pˇribl´ıˇzen´ı se pohled pˇrevr´at´ı. Dotykov´e ovl´ad´an´ı funguje na pˇrirozen´em pohybu prstu po zobrazen´em pohledu. V podstatˇe kamera sleduje a kop´ıruje pohyb prstu po obrazovce. Pˇribl´ıˇzen´ı a odd´alen´ı v tomto pˇr´ıpadˇe ovl´ad´an´ı nen´ı implementov´ano.

V´ysledn´e zobrazen´ı

Obr´azek 7.9 zn´azorˇnuje ˇc´ast v´ysledn´eho zobrazen´ı v m´ıstnosti. Obr´azek 7.10 pˇredstavuje tak´e ˇc´ast v´ysledn´eho zobrazen´ı, ale ve venkovn´ım prostoru. Videa pohybu po tˇechto zobrazen´ıch jsou um´ıstˇen´a na pˇriloˇzen´em CD ve sloˇzce uk´azky. Kvalita n´avaznosti v´ysledn´eho zobrazen´ı je vˇzdy pˇr´ımo z´avisl´a na pˇresn´em rozm´ıstˇen´ı kamer.

Obr´azek 7.9: Uk´azka v´ysledn´eho zobrazen´ı v m´ıstnosti

Obr´azek 7.10: Uk´azka v´ysledn´eho zobrazen´ı venku

7.2.3 N´ avrh ˇ reˇ sen´ı vyuˇ z´ıvaj´ıc´ı stitching

Nad r´amec ˇreˇsen´ı t´eto pr´ace jsem testoval ˇreˇsen´ı, kter´e by vyuˇz´ıvalo stitching sn´ımk˚u v re´aln´em ˇcase. V´yhoda tohoto ˇreˇsen´ı spoˇc´ıv´a ve voln´em rozm´ıstˇen´ı kamer bez nut-nosti kalibrace. V tomto ˇreˇsen´ı je pˇri inicializaci kamer na stranˇe serveru pˇrijat jeden sn´ımek z kaˇzd´e kamery. Tyto sn´ımky se pomoc´ı funkce stitchingu obsaˇzen´ych v kni-hovnˇe JavaCV (OpenCV) spoj´ı a z´ıskaj´ı se jejich koordinaˇcn´ı parametry, natoˇcen´ı a oˇr´ıznut´ı. Tyto kordinaˇcn´ı parametry se pak budou aplikovat na vˇsechny n´asleduj´ıc´ı sn´ımky. Po urˇcit´em ˇcasov´em intervalu se opˇet vybere jeden sn´ımek z kaˇzd´e kamery a znovu se pˇrepoˇc´ıtaj´ı tyto parametry. Pˇrepoˇcet nast´av´a z d˚uvod˚u zmˇen sc´eny a pˇr´ıpadn´eho pohybu kamer. Nev´yhodou ovˇsem je, ˇze v´ysledn´e sn´ımky maj´ı vˇzdy promˇenliv´e rozliˇsen´ı. Toto promˇenliv´e rozliˇsen´ı pak je problematick´e pro stream v´ysledn´ych sn´ımk˚u na stranu klienta. Testovac´ı aplikace dok´azala odeslat jen velmi mal´e mnoˇzstv´ı sn´ımk˚u, a tedy z d˚uvod˚u nestability nen´ı ani obsahem v t´eto pr´aci.

8 Z´ avˇ er

Pˇri vytv´aˇren´ı aplikace pro zobrazov´an´ı 360 panoramat se autor snaˇzil vytvoˇrit ˇreˇsen´ı, kter´e bude jednoduch´e pro uˇzivatele. Jak z hlediska um´ıstˇen´ı kamer, tak i z hlediska jednoduch´eho nastaven´ı aplikace. Hlavn´ım c´ılem bylo vytvoˇren´ı prohl´ıˇzeˇce tˇechto panoramat dostupn´em pˇres webov´e rozhran´ı.

8.1 Sloˇ zitost ˇ reˇ sen´ı

V´ysledn´a aplikace se skl´ad´a ze dvou ˇc´ast´ı serveru a klienta. Obˇe tyto ˇc´asti poskytuj´ı stabiln´ı z´aklad pro moˇznost dalˇs´ıho rozˇs´ıˇren´ı. Pˇri vytv´aˇren´ı t´eto pr´ace musel autor ˇreˇsit nˇekolik probl´em˚u, kter´e se objevovaly postupnˇe s v´yvojem. Mezi nejpodstatnˇejˇs´ı probl´emy patˇrilo zprovoznˇen´ı v´ıce webov´ych kamer na jednom poˇc´ıtaˇci, odes´ıl´an´ı velk´eho mnoˇzstv´ı dat na stranu klienta a nastaven´ı rozm´ıstˇen´ı a kalibrace kamer.

8.2 Vliv kodek˚ u a hardwarov´ a n´ aroˇ cnost

Pouˇzit´e kodeky byly vybr´any, tak aby mˇely co nejlepˇs´ı vlastnosti pro pouˇzit´ı streamov´an´ı videa na internetu. Vybran´e kodeky maj´ı m´ırn´e odliˇsnosti v hardwarov´e n´aroˇcnosti.

Odliˇsnosti jsou zp˚usoben´e tak´e i rozd´ıln´ymi pouˇzit´ymi n´astroji pro dan´e kodeky. Pro srovn´an´ı v´ykonu jednotliv´ych kodek˚u na zvolen´em testovac´ım hardwaru serveru uve-den´em v kapitole 7.1.4 bylo provedeno mˇeˇren´ı spotˇrebovan´e operaˇcn´ı pamˇeti a pro-centu´aln´ı konzumace v´ykonu procesoru. Jako testovac´ı nastaven´ı bylo zvoleno

Related documents