• No results found

WebGL aplikace pro prohl´ıˇzen´ı ˇziv´ych 360

N/A
N/A
Protected

Academic year: 2022

Share "WebGL aplikace pro prohl´ıˇzen´ı ˇziv´ych 360"

Copied!
54
0
0

Loading.... (view fulltext now)

Full text

(1)

WebGL aplikace pro prohl´ıˇ zen´ı ˇ ziv´ ych 360 panoramat

Diplomov´ a pr´ ace

Studijn´ı program: N2612 – Elektrotechnika a informatika Studijn´ı obor: 1802T007 – Informaˇcn´ı technologie

Autor pr´ace: Bc. Daniel V´ıch Vedouc´ı pr´ace: Ing. Jiˇr´ı Jen´ıˇcek, Ph.D.

(2)

WebGL based application for live 360 panorama

Diploma thesis

Study programme: N2612 – Electrotechnics and informatics Study branch: 1802T007 – Information technology

Author: Bc. Daniel V´ıch

Supervisor: Ing. Jiˇr´ı Jen´ıˇcek, Ph.D.

(3)
(4)
(5)
(6)

Podˇ ekov´ an´ı

Na tomto m´ıstˇe bych r´ad podˇekoval vedouc´ımu m´e diplomov´e pr´ace, Ing. Jiˇr´ımu Jen´ıˇckovi, Ph.D., za vˇsechny rady, bohat´e zkuˇsenosti a poznatky, kter´e mnˇe pomohly k ´uspˇeˇsn´e realizaci t´eto pr´ace. D´ale bych chtˇel podˇekovat sv´e rodinˇe za jej´ı podporu a moˇznost studovat na vysok´e ˇskole. Nakonec vˇsem sv´ym bl´ızk´ym pˇr´atel˚um, kteˇr´ı mnˇe pˇri studiu velice pomohli a motivovali.

(7)

Abstrakt

Tato pr´ace se zab´yv´a ˇreˇsen´ım streamov´an´ı ˇziv´ych panoramat zaob´ıraj´ıc´ı ´uhel pohledu 360 pouˇzit´ım vˇetˇs´ıho mnoˇzstv´ı webkamer a jejich zobrazen´ım pomoc´ı aplikaˇcn´ı rozhran´ı WEBGL ve we- bov´em prohl´ıˇzeˇci. V´ysledkem t´eto pr´ace je aplikace s ˇreˇsen´ım typu server-klient, kde server zajiˇst’uje zpracov´an´ı a stream videa z webkamer a klient umoˇzˇnuje zobrazen´ı tohoto streamu na zaˇr´ızen´ıch disponuj´ıc´ıch webov´ym prohl´ıˇzeˇcem s podporou ap- likaˇcn´ıho rozhran´ı WEBGL.

Kl´ıˇcov´a slova: panor´ama, videopanor´ama, stream videa, stream videa v re´aln´em ˇcase, WEBGL, aplikace server-klient

(8)

Abstract

This thesis deals with streaming 360 degree panoramas with mul- tiple webcams. The final view is provided by WebGL API in a web browser. The final outcome of this thesis is to find a solution for a server-client type of application, where the server side provide processing and webcam streams and the client side can view such streams on devices that are supported by a web browser with (an application interface) WEBGL API.

Keywords: panorama, videopanorama, video sream, realtime video stream, WEBGL, server-client application

(9)

Obsah

Seznam obr´azk˚u . . . 9

Seznam tabulek . . . 10

Seznam zkratek . . . 12

1 Uvod´ 13 2 Panor´ama 15 2.1 Technika poˇr´ızen´ı panoramatick´ych sn´ımk˚u . . . 15

2.1.1 Statick´e panor´ama . . . 15

2.1.2 Dynamick´e panor´ama . . . 16

2.1.3 Typy panoramat . . . 17

3 Streamov´an´ı videa 20 4 WebGL 22 5 Existuj´ıc´ı ˇreˇsen´ı 23 6 N´avrh vlastn´ıho ˇreˇsen´ı 26 6.1 Sezn´amen´ı se s problematikou . . . 26

6.2 N´avrh vlastn´ıho ˇreˇsen´ı . . . 27

7 Vlastn´ı ˇreˇsen´ı 28 7.1 Hardwarov´a ˇc´ast . . . 28

7.1.1 Poˇzadavky na webkamery . . . 29

7.1.2 Pouˇzit´e webkamery . . . 30

(10)

7.1.3 Poˇzadavky na server . . . 31

7.1.4 Pouˇzit´a konfigurace serveru . . . 32

7.1.5 Pˇripojen´ı v´ıce kamer na rozhran´ı USB . . . 32

7.1.6 Poˇzadavky klienta . . . 33

7.2 Softwarov´a ˇc´ast . . . 34

7.2.1 Server . . . 34

7.2.2 Klient . . . 39

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

8 Z´avˇer 48 8.1 Sloˇzitost ˇreˇsen´ı . . . 48

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

8.3 Celkov´a funkˇcnost a moˇzn´a vylepˇsen´ı . . . 50

8.4 Zhodnocen´ı . . . 51

(11)

Seznam obr´ azk˚ u

2.1 Objektiv PanoPro . . . 16

5.1 Verze ˇreˇsen´ı kamer Aliie od IC Realtech . . . 23

5.2 Nokia OZO . . . 24

5.3 Google JUMP camera rig . . . 25

6.1 N´avrh ˇreˇsen´ı . . . 27

7.1 Webkamera Logitech QuickCam PTZ . . . 30

7.2 Kalibrace pomoc´ı ˇsachovnice pro krychlov´e panorama . . . 31

7.3 Funkˇcn´ı ˇc´asti serveru . . . 34

7.4 Grafick´e uˇzivatelsk´e rozhran´ı . . . 39

7.5 Grafick´e uˇzivatelsk´e rozhran´ı - spuˇstˇen´y stream . . . 39

7.6 Funkˇcn´ı ˇc´asti klienta . . . 40

7.7 Diagram otexturov´an´ı stran krychle . . . 44

7.8 Dr´atov´a sch´emata modelu panoramatu . . . 45

7.9 Uk´azka v´ysledn´eho zobrazen´ı v m´ıstnosti . . . 46

7.10 Uk´azka v´ysledn´eho zobrazen´ı venku . . . 46

(12)

Seznam tabulek

7.1 Zat´ıˇzen´ı pˇrenosov´eho p´asma . . . 33

8.1 Zat´ıˇzen´ı serveru . . . 49

8.2 V´ykon prohl´ıˇzeˇce Windows . . . 49

8.3 V´ykon prohl´ıˇzeˇce Linux . . . 50

8.4 Mnoˇzstv´ı pˇrenesen´ych dat . . . 50

(13)

Seznam zkratek

HTTP Hypertext transfer protocol - internetov´y protokol pro v´ymˇenu hypertextov´ych dokument˚u

RTP Real-time transport protocol - protokol standardizuj´ıc´ı paketov´e doruˇcov´an´ı zvukov´ych a obrazov´ych dat po in- ternetu

RTMP Real-time messaging protocol - protokol vyvinut´y firmou Macromedia urˇcen´y pro streamov´an´ı audia a videa po internetu

MP4 Multimedi´aln´ı kontejner

HEVC High efficiency video coding - video kodek

VP8 video kodek vyvinut´y firmou Google

VP9 video kodek vyvinut´y firmou Google

WMV komprimovan´y souborov´y videoform´at vyvinut´y firmou Microsoft

CMOS (fototechnika) typ sn´ımaˇce fotoap´ar´atu

FOV Field of view - ´uhel viditeln´eho pohledu

SSD Solid-state drive - vysokokapacitn´ı pamˇet’ov´e m´edium neobsahuj´ıc´ı pohybliv´e souˇc´asti

USB Universal serial bus - komunikaˇcn´ı sbˇernice

(14)

1 Uvod ´

Pokud se ohl´edneme do nejmladˇs´ıch dob naˇs´ı civilizace, tak se vˇzdy lid´e snaˇzili uloˇzit jist´e v´yjevy a situace pomoc´ı obr´azk˚u a maleb. Pravˇec´ı lid´e tyto v´yjevy vyr´yvali do skal, pozdˇeji mal´ıˇri zaˇcali pouˇz´ıvat r˚uzn´e typy pl´aten, n´aslednˇe pak vyn´alez fotoa- par´atu uˇcinil obrovsk´y pokrok v rychl´em zachycen´ı obrazu okamˇziku. Ve vˇsech tˇechto etap´ach v´yvoje se poˇrizovatel´e snaˇzili zachytit ty nejd˚uleˇzitˇejˇs´ı ˇc´asti dan´eho v´yjevu, a to bud’ v ´uzk´em, nebo ˇsirok´em z´abˇeru. Speci´aln´ım typem je zobrazen´ı panoramat- ick´e, kter´e umoˇzn´ı zobrazit cel´y prostor kolem pozorovatele.

Pr´avˇe panoramatick´e zobrazen´ı je probl´em, kter´y se m˚uˇze ˇreˇsit nˇekolika r˚uzn´ymi zp˚usoby. V pˇr´ıpadˇe mal´ıˇre je ˇreˇsen´ım ˇsirok´e pl´atno, na nˇemˇz dok´aˇze zachytit vˇetˇs´ı

´

uhel pohledu, mal´ıˇr je tedy limitov´an pouze ˇs´ıˇrkou pl´atna a nem´a probl´em se zo- brazen´ım i cel´eho ´uhlu pohledu (360). Ale v pˇr´ıpadˇe pouˇzit´ı fotoapar´atu uˇz takov´e trivi´aln´ı ˇreˇsen´ı neexistuje. U analogov´eho fotoapar´atu existuje pouze ˇreˇsen´ı po- moc´ı speci´aln´ıch optik. U digit´aln´ıch fotoapar´at˚u jiˇz existuje v´ıce variant stejnˇe jako u analogov´ych fotoapar´at˚u m˚uˇzeme zvolit pouˇzit´ı speci´aln´ı optiky, nebo tak´e dok´aˇzeme se sn´ımkem, nebo i v´ıce sn´ımky d´ale pracovat pomoc´ı tzv. postprocesingu (zpracov´an´ı sn´ımku po jeho poˇr´ızen´ı).

Postprocesing pro panoramatick´e zobrazen´ı pomoc´ı digit´aln´ıch zaˇr´ızen´ı m˚uˇzeme aplikovat jak na statick´e, tak i dynamick´e sn´ımky(video). V´yhodou statick´ych sn´ımk˚u je, ˇze obraz je vˇzdy st´al´y a v ˇcase se nemˇen´ı, t´ım se vytv´aˇren´ı panoramatick´ych

(15)

sn´ımk˚u zjednoduˇsuje a existuje i mnoho n´astroj˚u, kter´e dok´aˇz´ı vytvoˇrit z v´ıce sn´ımk˚u panoramatick´y obraz. Ale u dynamick´eho zobrazen´ı uˇz nast´avaj´ı pr´avˇe komplikace se zmˇenou obrazu sn´ımk˚u v ˇcase, tyto komplikace jsou pops´any tak´e v t´eto pr´aci.

Ale i pro toto dynamick´e zobrazen´ı existuj´ı n´astroje.

Samostatnou problematikou je zobrazen´ıˇziv´ych panoramat. Touto problematikou se zab´yv´a tato pr´ace, proto je jej´ım c´ılem vytvoˇren´ı komplet´ıho ˇreˇsen´ı pro poˇr´ızen´ı tˇechto sn´ımk˚u a jejich zobrazen´ı jako interaktivn´ı aplikace v podporovan´em webov´em prohl´ıˇzeˇci.

(16)

2 Panor´ ama

Panor´ama je ˇsirok´y pohled na krajinu nebo na jak´ykoliv objekt. Jedn´a se o kompozici se ˇsirok´ym z´abˇerem. Velikost ´uhlu z´abˇeru t´eto kompozice nen´ı pˇresnˇe specifikov´ana.

Pojem panor´ama je zn´am uˇz z d´avn´ych dob a s panoramatick´ymi sn´ımky se setk´ame napˇr´ıklad v z´amc´ıch a hradech, kde najdeme vˇetˇsinou v´yjevy z bitev. Panoramatick´e fotografie se ˇcasto i objevuj´ı jako sn´ımky krajin, mˇest a r˚uzn´ych prostor.

2.1 Technika poˇ r´ızen´ı panoramatick´ ych sn´ımk˚ u

2.1.1 Statick´ e panor´ ama

Statick´e panor´ama urˇcuj´ı sn´ımky, kter´e se v r´amci ˇcasu nemˇen´ı. Zejm´ena reprezen- tuje poˇr´ızen´ı sn´ımk˚u fotapar´atem s panoramatick´ym objektivem nebo poˇr´ızen´ı nˇekolika sn´ımk˚u navazuj´ıc´ıch v kompozici na sebe a jejich n´asledn´ym spojen´ım. Poˇrizov´an´ı sn´ımk˚u pomoc´ı speci´aln´ıch objektiv˚u je tou nejjednoduˇsˇs´ı variantou, ale ovˇsem vyˇzaduje speci´aln´ı a ˇcasto n´akladn´e optiky. Jeden z tˇechto objektiv˚u je na obr´azku 2.1, tento objektiv m´a pozorovac´ı ´uhly 60 nad a pod horizontem a 360 horizont´alnˇe.

Levnˇejˇs´ı variantou je vytvoˇren´ı panoramatick´eho sn´ımku pomoc´ı soustavy v´ıce sn´ımk˚u, kter´e na sebe navazuj´ı, a jejich n´asledn´em spojen´ı. Spojen´ı tˇechto sn´ımk˚u je zajiˇstˇeno pomoc´ı programu. Program˚u pro vytvoˇren´ı panoramatick´ych sn´ımk˚u existuje hodnˇe, ale vˇzdy z´aleˇz´ı na jejich schopnostech. Nˇekter´e vyˇzaduj´ı sn´ımky nafocen´e s pˇresnou n´avaznost´ı, kde software tyto sn´ımky pouze spoj´ı. Lepˇs´ı n´astroje dok´aˇz´ı sestavit

(17)

panoramatick´y sn´ımek i z nepˇresn´eho napojen´ı jednotliv´ych sn´ımk˚u. V tˇechto pro- gramech se vyuˇz´ıv´a spojov´an´ı a nat´aˇcen´ı obrazu dle nˇekolika specifick´ych bod˚u spojovan´ych sn´ımk˚u. Jako pˇr´ıklad takov´eho softwaru m˚uˇzu uv´est bezplatn´e Easy- pano, ArcSoft Panorama Maker, Hugin, Picassa a mnoho dalˇs´ıch, mezi placen´e patˇr´ı napˇr´ıklad PanoramPlus X4, Adobe Photoshop. Funkce vytvoˇren´ı panoramat z v´ıce sn´ımk˚u je dnes i implementov´ana ve vˇetˇsinˇe digit´aln´ıch fotapar´at˚u. Tak´e lze nal´ezt velk´e mnoˇzstv´ı aplikac´ı pro chytr´e telefony.

Obr´azek 2.1: Objektiv PanoPro

2.1.2 Dynamick´ e panor´ ama

Dynamick´e panor´ama oproti statick´emu vyuˇz´ıv´a sn´ımky, kter´e se v ˇcase mˇen´ı.

V tomto pˇr´ıpadˇe lze opˇet vyuˇz´ıt dvou moˇznost´ı pro poˇr´ızen´ı sn´ımk˚u, stejnˇe jako u statick´ych vyuˇzit´ım speci´aln´ıch panoramatick´ych optik a tak´e i poˇr´ızen´ım sn´ımk˚u v´ıce zaˇr´ızen´ımi a jejich n´asledn´e spojen´ı. V r´amci optik jsou vlastnosti stejn´e jako statick´e sn´ımky. Druh´a varianta - spojov´an´ı sn´ımk˚u m´a v tomto pˇr´ıpadˇe rozd´ıl zda se kamery ve sc´enˇe pohybuj´ı ˇci ne.

V pˇr´ıpadˇe nepohybliv´ych kamer je spojov´an´ı sn´ımk˚u jednoduˇsˇs´ı z d˚uvodu stat-

(18)

ick´e pozice pro v´ypoˇcet spojovac´ıch bod˚u. V tomto pˇr´ıpadˇe staˇc´ı v´ypoˇcet spojovac´ıch bod˚u a natoˇcen´ı obrazu pouze pro jednu sadu sn´ımk˚u v jednom ˇcasov´em okamˇziku.

Ostatn´ı sady sn´ımk˚u pak budou pouze aplikovat vytvoˇren´e rozloˇzen´ı a natoˇcen´ı.

2.1.3 Typy panoramat

Cylindrick´e panor´ama

Cylindrick´e panor´ama zajiˇstuje rotace kolem horizont´aln´ı osy. V podstatˇe si toto panor´ama m˚uˇzeme pˇredstavit jako obraz vytvoˇren´y uvnitˇr horizont´aln´ı stˇeny v´alce.

Poˇr´ızen´ı sn´ımk˚u pro toto panor´ama m˚uˇzeme realizovat speci´aln´ım objektivem, nebo pomoc´ı poˇr´ızen´ı v´ıce sn´ımk˚u a jejich vz´ajemn´eho stitchingu.

Prvn´ı zp˚usob vyuˇz´ıv´a tzv. catadioptrick´y objektiv. Jedn´a se o objektiv, kter´y je sloˇzen z nˇekolika ˇcoˇcek a zakˇriven´ych zrcadel, kter´e odr´aˇzej´ı sv˚uj obraz do zorn´eho pole optiky objektivu. V´yhodou t´eto metody je okamˇzit´e poˇr´ızen´ı cel´eho panoramatu a kvalita obrazu. Nev´yhodou samozˇrejmˇe je n´akladnost a sloˇzitost v´yroby takov´eho objektivu.

Druh´y zp˚usob vyˇzaduje poˇr´ızen´ı v´ıce sn´ımk˚u tak, aby sn´ımaˇc byl na stejn´em m´ıstˇe a ot´aˇcel se po horizont´aln´ı ose. V r´amci tohoto ot´aˇcen´ı se poˇrizuj´ı postupnˇe sn´ımky. Poˇr´ızen´ı tˇechto sn´ımk˚u lze prov´est tak, ˇze jednotliv´e sn´ımky budou na sebe tˇesnˇe napojeny nebo se budou navz´ajem ˇc´asteˇcnˇe pˇrekr´yvat. V pˇr´ıpadˇe tˇesn´eho napo- jen´ı m˚uˇze nastat problematika poˇr´ızen´ı cel´eho 360, kde posledn´ı sn´ımek mus´ı b´yt oˇr´ıznut tak, aby nenastal pˇrekryv se sn´ımkem prvn´ım. Varianta ˇc´asteˇcn´eho pˇrekryt´ı vyuˇz´ıv´a stitchingu. Podstatn´ym parametrem je velikost pˇrekryt´ı a vz´ajemn´e natoˇcen´ı jednotliv´ych sn´ımk˚u.

(19)

Krychlov´e panor´ama

Krychlov´e panorama se vytv´aˇr´ı uvnitˇr krychle na jednotliv´e stˇeny. Na kaˇzdou stˇenu t´eto krychle je potˇreba samostatn´y sn´ımek, z toho vypl´yv´a, ˇze je nutn´e pro vytvoˇren´ı takov´eho panoramatu ˇsest sn´ımk˚u. Aby sn´ımky na sebe navazovaly mus´ı se poˇr´ıdit z jednoho bodu - stˇredu krychle. D´ale je nutn´e, aby jednotliv´e sn´ımky byly poˇr´ızeny optikou s ´uhlem z´abˇeru 90. Ve v´ysledn´em sloˇzen´em obrazu lze zpozorovat pravo´uhl´e napojen´ı jednotliv´ych sn´ımk˚u. V´yhoda tohoto ˇreˇsen´ı je v n´ızk´e n´aroˇcnosti na v´ykon pˇri zpracov´an´ı obrazu.

P˚ulkulov´e panor´ama

Vyuˇz´ıv´a efektu ryb´ıho oka, to znamen´a, ˇze se sn´ım´a obraz polokoule, kde v jej´ım kruhov´em obvodu je zdrojov´y obraz hustˇs´ı a s pˇribliˇzov´an´ım ke stˇredu se postupnˇe st´av´a ˇr´ıdk´ym. To m´a za d˚usledek velk´e mnoˇzstv´ı detail˚u uprostˇred a mal´e detaily pˇri ´uhlech zobrazen´ı vˇetˇs´ım jak 90. Poˇr´ızen´ı sn´ımku lze zajistit optikou s efektem ryb´ıho oka nebo lze dopoˇc´ıtat z v´ıce sn´ımk˚u pomoc´ı stitchingu a deformace obrazu.

Kulov´e panor´ama

Kulov´e panor´ama vyuˇz´ıv´a stejnou techniku zpracov´an´ı jako p˚ulkulov´e, ale s rozd´ılem, ˇze se vyuˇzij´ı 2 poloukoule se spoleˇcn´ym stˇredem a opaˇcn´ym smˇerem vypoukl´e strany.

Stereografick´e panor´ama

Typ panoramatu vyuˇz´ıvaj´ıc´ı stereografick´e projekce. Nejˇcastˇeji se tato projekce vyuˇz´ıv´a na kulov´e plochy. V´yhodou t´eto projekce je zachov´an´ı ´uhlu zobrazen´ych objekt˚u v kruhov´em obvodu, to m´a za n´asledek lepˇs´ı zobrazen´ı detail˚u v tˇechto m´ıstech oproti klasick´emu p˚ulkulov´emu panoramatu.

(20)

Panografie

Technika zpracov´an´ı nˇekolika sn´ımk˚u tak, ˇze v´ysledn´y obraz je sestaven ze vz´ajemnˇe se pˇrekr´yvaj´ıc´ıch se sn´ımk˚u tvoˇr´ıc´ıch panoramatick´e zobrazen´ı. V t´eto technice se neˇreˇs´ı oˇrez´an´ı pˇrekryvu, ale pouze jen natoˇcen´ı a um´ıstˇen´ı jednotliv´ych sn´ımk˚u.

(21)

3 Streamov´ an´ı videa

Stream nebo ˇcesky proud je technologie pro pˇrenos audia a videa mezi serverem (zdrojem) a klienty. Existuj´ı 2 typy streamu, a to v re´aln´em ˇcase nebo tzv. zp˚usobem video on demand. Stream v re´aln´em ˇcase je zp˚usob, kdy se uˇzivatel˚um pos´ıl´a aktu´aln´ı pˇrehr´avan´e nebo vys´ılan´e video. V tomto streamu se nelze pohybovat dopˇredu po ˇcasov´e ose. Druh´y zp˚usob video on demand je zp˚usob streamov´an´ı videa na vyˇz´ad´an´ı uˇzivatele. To znamen´a, ˇze streamovac´ı server m´a uloˇzen´e video, o kter´e si uˇzivatel poˇz´ad´a a server pot´e uˇzivateli vys´ıl´a stream videa po m´ediu. Tento zp˚usob umoˇzˇnuje uˇzivateli pˇresouv´an´ı se po ˇcasov´e ose videa.

Nejd˚uleˇzitˇejˇs´ım parametrem pro streamov´an´ı videa je volba zp˚usobu pˇrenosu a k´odov´an´ı dat. Pˇrenos dat urˇcuje pouˇzit´y protokol. Protokol je standard, kter´y urˇcuje pr˚ubˇeh komunikace mezi zaˇr´ızen´ımi. Mezi nejpouˇz´ıvanˇejˇs´ı protokoly patˇr´ı HTTP, RTP, RTMP, Adobe HTTP Dynamic Streaming, Microsoft Smooth Stream- ing a Shoutcast. K´odov´an´ı dat zajiˇstuj´ı kodeky. Kaˇzd´y kodek m´a sv´e specifick´e vlast- nosti, jako jsou kompresn´ı pomˇer, rozliˇsen´ı, ˇr´ızen´ı datov´ych tok˚u, rychlost komprese a dalˇs´ı. Pro streamov´an´ı videa je nejd˚uleˇzitˇejˇs´ı vlastnost´ı pr´avˇe rychlost komprese.

C´ım rychleji dok´ˇ aˇze kodek data zkomprimovat, t´ım i v´ysledn´e video bude m´ıt menˇs´ı zpoˇzdˇen´ı oproti re´aln´emu obrazu. Mezi vhodn´e form´aty kodek˚u pro streamov´an´ı videa lze zaˇradit H.264(MP4), H.265(HEVC), RealVideo, Theora, VP8, VP9 a WMV.

(22)

Pro streamov´an´ı videa pro v´ıce klient˚u je duleˇzit´e pouˇzit´ı streamovac´ıho serveru.

Tento server zajiˇst’uje distribuci zdroj˚u mezi pˇripojen´ymi klienty. Kromˇe t´eto dis- tribuce vytv´aˇr´ı mezipamˇet’ mezi jednotliv´ymi zdroji a klienty. Tato mezipamˇet’ oproti pˇr´ım´emu vys´ıl´an´ı videa umoˇzˇnuje jednotliv´ym klient˚um plynul´e pˇrehr´av´an´ı. M˚uˇze nastat situace, kdy napˇr´ıklad dva klienti A a B se pˇripoj´ı k serveru a poˇzaduj´ı stream videa. Server jim tento stream poskytne. U klienta B ale napˇr´ıklad nastane zpoˇzdˇen´ı pˇr´ıjmu o nˇekolik ms, aby klient B nepˇriˇsel o sn´ımky, kter´e v r´amci tohoto zpoˇzdˇen´ı klient A pˇrijmul, tak server v r´amci pouˇzit´ı mezipamˇeti klientovi B tyto sn´ımky zaˇsle a vˇsechny n´asleduj´ıc´ı sn´ımky bude zas´ılat posunut´e pr´avˇe o toto zpoˇzdˇen´ı. Pr´avˇe velikost mezipamˇeti je jedn´ım z parametr˚u nastaven´ı serveru. Dalˇs´ımi vlastnosmi stream server˚u je kontrola a ˇr´ızen´ı pˇr´ıstupu k m´edi´ım, ˇreˇsen´ı ˇspatn´ych pˇripojen´ı, statistika, ˇr´ızen´ı zdroj˚u. Mezi nejzn´amˇejˇs´ı servery pro streamov´an´ı videa patˇr´ı ze skupiny s volnou licenc´ı napˇr´ıklad Icecast, FFServer, Red5 a Darwin Streaming server. Mezi servery s placenou licenc´ı se ˇrad´ı QuickTime Broadcaster, WOWZA Streaming engine, Adobe Media server, Evostream.

(23)

4 WebGL

Je Javascriptov´e aplikaˇcn´ı rozhran´ı pro zobrazov´an´ı 3D grafiky ve webov´ych prohl´ıˇzeˇc´ıch.

V´yvoj WebGL zajiˇstuje neziskov´a organizace Khronos Group. WebGL pro svoji funkc´ı vyuˇz´ıv´a shader˚u realizovan´ych v jazyce GLSL (OpenGL Shading Language) postaven´ych na aplikaˇcn´ım rozhran´ı OpenGL ES 2.0. Implementaci tohoto rozhran´ı najdeme ve vˇsech dnes nejpouˇz´ıvanˇejˇs´ıch prohl´ıˇzeˇc´ıch. Pro zobrazen´ı grafick´e sc´eny se vyuˇz´ıv´a HTML elementu canvas. Mezi zaj´ımav´e projekty realizovan´e pomoc´ı We- bGL lze zaˇradit Google mapy, Zygote Body (model lidsk´e anatomie), popul´arn´ı hru Angry birds, Autocad 360 WEB.

(24)

5 Existuj´ıc´ı ˇ reˇ sen´ı

Existuje nˇekolik ˇreˇsen´ı pro sn´ım´an´ı 360 videa, ale vˇsechna tato ˇreˇsen´ı vyˇzaduj´ı

konkr´etn´ı hardware anebo zpracov´avaj´ı 360video aˇz po poˇr´ızen´ı jednotliv´ych videosekvenc´ı.

V r´amci reˇserˇse kompletn´ıho ˇreˇsen´ı jsem vybral zaˇr´ızen´ı Allie od firmy IC Real- tech, kter´e bylo jako prvn´ı veˇrejnˇe prezentov´ano jako plnˇe funkˇcn´ı ˇreˇsen´ı s podporou streamu v re´aln´em ˇcase. Toto zaˇr´ızen´ı se vyr´ab´ı v nˇekolika verz´ıch, rozd´ıl mezi nimi je zejm´ena v r´amci rozliˇsen´ı pouˇzit´eho fotosn´ımaˇce. Jedn´a se o konstrukci dvou fotosn´ımaˇc˚u um´ıstˇen´ych z´ady k sobˇe s velmi ˇsiroko´uhlou optikou. V´ysledn´y panora- matick´y obraz je pak pomoc´ı softwaru spojen a distribuov´an do aplikace, kter´a tento obraz zobraz´ı. Ovl´ad´an´ı je zajiˇstˇeno orbit´aln´ım posuvem po obrazu anebo, pokud se jedn´a o zaˇr´ızen´ı s gyroskopem, ovl´ad´ano pomoc´ı nakl´apˇen´ı a rozpozn´av´an´ı dat p´avˇe z tohoto gyroskopu. Zaˇr´ızen´ı dle v´yrobce umoˇzˇnuje streamov´an´ı videa v re´aln´em ˇcase. Toto streamov´an´ı prob´ıh´a opˇet do speci´aln´ı aplikace od v´yrobce. V r´amci pro- duktov´eho videa na veletrhu CES 2015 je tento stream prezentov´an, ale nenab´ız´ı dostateˇcn´y poˇcet sn´ımk˚u za sekundu aby byl v´ysledn´y obraz plynul´y.

Obr´azek 5.1: Verze ˇreˇsen´ı kamer Aliie od IC Realtech

(25)

Dalˇs´ı ze zaj´ımav´ych ˇreˇsen´ı nab´ız´ı firma Nokia se zaˇr´ızen´ım OZO. Jedn´a se o zaˇc´ınaj´ıc´ı projekt s vyroben´ym prototypem. Zaˇr´ızen´ı dle ofici´aln´ı zpr´avy v´yrobce um´ı nahr´avat a i pomoc´ı specializovan´eho softwaru zobrazovat stream tohoto videa v re´aln´em ˇcase.

Zaˇr´ızen´ı se skl´ad´a z osmi kamer um´ıstˇen´ych v kouli. Na obr´azku 5.2 je uk´azka tohoto zaˇr´ızen´ı.

Obr´azek 5.2: Nokia OZO

Spoleˇcnost Google pro 360 videa pˇrizp˚usobila svoji sluˇzbu YouTube. Podpora tˇechto vide´ı ale zat´ım nen´ı pro videa v re´aln´em ˇcase. Pro nahr´an´ı takov´eho videa na servery YouTube mus´ı b´yt video natoˇcen´e nˇekterou z doporuˇcen´ych nebo pod- porovan´ych kamer. Nahr´avan´ı tˇechto vide´ı lze tak´e pomoc´ı obyˇcejn´ych kamer a po- moc´ı specializovan´eho softwaru vytvoˇrit podporovan´e video. Pˇr´ıkladem tohoto soft- waru m˚uˇze b´yt napˇr´ıklad Kolor Autopano nebo VideoStitch. V tomto roce spoleˇcnost Google na konferenci Google I/O pˇredstavila ˇreˇsen´ı, kter´e by v budoucnu mˇelo umoˇzˇnovat zobrazen´ı videa v re´aln´em ˇcase. Toto ˇreˇsen´ı nese n´azev Google JUMP a pˇr´ıstup k nˇemu je zat´ım jen pro vybran´e ´uzk´e testovac´ı skupiny. Jednou ze souˇc´ast´ı

(26)

je YouTube360. Na obr´azku 5.3 je r´ameˇcek JUMP camera rig osazen´y kamerami Go- PRO.

Obr´azek 5.3: Google JUMP camera rig

(27)

6 N´ avrh vlastn´ıho ˇ reˇ sen´ı

C´ılem pr´ace bylo sezn´amen´ı se s problematikou streamov´an´ı videa na internetu a 3D WebGL aplikac´ı. N´aslednˇe dan´e znalosti uplatnit pro n´avrh a realizaci WebGL ap- likace pro prohl´ıˇzen´ı ˇziv´ych 360 panoramat.

6.1 Sezn´ amen´ı se s problematikou

Souˇcasn´a ˇreˇsen´ı nejˇcastˇeji zpracov´avaj´ı tzv. offline video panoramata. To znamen´a, ˇze zaznamenan´a videa se nahraj´ı a pak teprve zpracuj´ı, aby se mohla zobrazit. Soft- ware, kter´y tyto videa zpracov´av´a, ovˇsem nelze pouˇz´ıt pro videa v re´aln´em ˇcase.

Dalˇs´ım probl´emem je, ˇze i tato ˇreˇsen´ı ˇcasto vyˇzaduj´ı specializovan´y hardware pro sv´e pouˇzit´ı (viz kapitola Existuj´ıc´ı ˇreˇsen´ı). Streamov´an´ı videa na webu je dnes jiˇz bˇeˇznou prax´ı, a to i v pˇr´ıpadˇe ˇziv´ych vide´ı. V letoˇsn´ım roce spustil port´al YouTube streamov´an´ı 360 vide´ı v r´amci sv´eho standardu, jedn´a se ale pouze opˇet o post- procesingem zpracovan´e video. V pˇr´ıpadˇe streamov´an´ı 360 vide´ı se pˇren´aˇs´ı velk´e mnoˇzstv´ı dat, to uˇz ale tak´e neb´yv´a probl´em z d˚uvodu neust´al´eho zkvalitˇnov´an´ı rychlosti pˇripojen´ı k internetu. Tato pr´ace tedy pˇrin´aˇs´ı ˇreˇsen´ı pro spojen´ı 360 vide´ı a jejich ˇziv´eho pˇrenosu.

(28)

6.2 N´ avrh vlastn´ıho ˇ reˇ sen´ı

Pro n´avrh ˇreˇsen´ı jsem zvolil krychlov´e panorama. Pro z´aznam sn´ımk˚u bude tedy potˇreba 6 kamer um´ıstˇen´ych ve spoleˇcn´em stˇredu. Cel´e ˇreˇsen´ı bude typu server- klient. Server bude zajiˇst’ovat zpracov´an´ı obrazu z jednotliv´ych kamer tak, aby ˇsly co nejl´epe um´ıstit na virtu´aln´ı krychli. D´ale bude m´ıt na starosti distribuci tˇechto upraven´ych sn´ımk˚u pˇres internet ke klientsk´e ˇc´asti aplikace a sv´e grafick´e uˇzivatelsk´e rozhran´ı. Server bude sestaven´y pro operaˇcn´ı syst´em Linux. Klienstsk´a ˇc´ast aplikace bude postavena na technologi´ıch HTML p´at´e verze, Javascriptu a ap- likaˇcn´ıho rozhran´ı WebGL. D´ıky tˇemto technologi´ım m˚uˇze b´yt klientsk´a aplikace co nejv´ıce multiplatformn´ı. Klient ˇreˇs´ı pˇr´ıjem streamu videa ze serveru a vytvoˇr´ı pr´avˇe onu virtu´aln´ı krychli, na kterou se jako textura pˇrilep´ı jednotliv´e sn´ımky z kamer.

Uˇzivateli bude poskytnuto tzv. orbit´aln´ı ovl´ad´an´ı ve stˇredu t´eto krychle. Ovl´ad´an´ı klientsk´e aplikace bude pˇrizp˚usobeno tak´e pro uˇzivatele s dotykov´ymi zaˇr´ızen´ımi jako telefony a tablety. N´avrh ˇreˇsen´ı popisuje obr´azek 6.1.

Obr´azek 6.1: N´avrh ˇreˇsen´ı

(29)

7 Vlastn´ı ˇ reˇ sen´ı

V n´asleduj´ıc´ıˇc´asti pr´ace se budu zab´yvat popisem vytvoˇren´eho ˇreˇsen´ı. V Hardwarov´e ˇc´asti bude pops´ana testovac´ı konfigurace, zejm´ena pouˇzit´e kamery, jejich pˇripojen´ı, pouˇzit´e rozhran´ı a problematika pˇripojen´ı vˇetˇs´ıho mnoˇzstv´ı kamer k poˇc´ıtaˇci. Na to nav´aˇze softwarov´a ˇc´ast, kde pop´ıˇsi vytvoˇrenou aplikaci, jej´ı implementaci a nas- taven´ı. Z´aroveˇn v t´eto ˇc´asti pr´ace bude kapitola s n´avrhem ˇreˇsen´ı vyuˇz´ıvaj´ıc´ı stitchingu v re´aln´em ˇcase, kter´e umoˇzˇnuje volnˇejˇs´ı rozm´ıstˇen´ı kamer v prostoru. V z´avˇereˇcn´e kapitole t´eto pr´ace jsou v´ysledky testov´an´ı vliv˚u kodek˚u a n´aroˇcnosti na pˇrenosov´e m´edium v r´amci testovac´ı hardwarov´e konfigurace.

7.1 Hardwarov´ a ˇ c´ ast

Uˇz z n´avrhu ˇreˇsen´ı je jako v´ysledn´y typ panoramatu zvolen´e krychlov´e panorama a koncepce server-klient. Pro tento pˇr´ıpad je tedy nutn´e pouˇzit´ıˇsesti kamer sn´ımaj´ıc´ıch dan´y prostor ze spoleˇcn´eho stˇredu. Z d˚uvod˚u dostupnosti ˇreˇsen´ı ˇsirok´emu mnoˇzstv´ı uˇzivatel˚u byly zvoleny webov´e kamery pˇripojen´e pomoc´ı rozhran´ı USB k poˇc´ıtaˇci (serveru). Jednotliv´e poˇzadavky na webkamery a serverov´y poˇc´ıtaˇc jsou pops´any v n´asleduj´ıc´ıch podkapitol´ach. V r´amci klientsk´eho hardwaru nejsou kladeny ˇz´adn´e speci´aln´ı poˇzadavky, pouze zaˇr´ızen´ı disponuj´ıc´ı webov´ym prohl´ıˇzeˇcem podporuj´ıc´ım standard HTML5, Javascript a WebGL. V dneˇsn´ı dobˇe existuje obrovsk´e mnoˇzstv´ı zaˇr´ızen´ı s touto podporou, od mobiln´ıch telefon˚u po chytr´e televize.

(30)

7.1.1 Poˇ zadavky na webkamery

Jako hlavn´ı poˇzadavek na webkameru se v pˇr´ıpadˇe krychlov´eho panoramatu ˇrad´ı zobrazovac´ı ´uhel. V nejide´alnˇejˇs´ım pˇr´ıpadˇe je nejlepˇs´ı zobrazovac´ı ´uhel (FOV) 90, pr´avˇe z d˚uvodu jednoduch´eho sloˇzen´ı v´ysledn´eho panoramatick´eho obrazu. V´ysledn´y obraz z jednotliv´ych kamer je pot´e pomoc´ı softwaru sloˇzen do tzv. krychlov´e mapy.

Dalˇs´ı vlastnosti kamer jako rozliˇsen´ı sn´ımaˇce, typ sn´ımaˇce, svˇetelnost uˇz z´aleˇz´ı na individu´aln´ıch potˇreb´ach. V´ysledn´a aplikace dok´aˇze pracovat s webov´ymi kamerami pˇripojen´ymi pˇres libovoln´a rozhran´ı, ale s podm´ınkou, ˇze v operaˇcn´ım syst´emu se k nim bude pˇristupovat jako ke standardn´ımu video zaˇr´ızen´ı. Tento parametr v pod- statˇe splˇnuj´ı veˇsker´e USB webkamery. Jelikoˇz pro v´ysledn´e panorama potˇrebujeme ˇsest kamer, tak je vhodn´e, aby tyto kamery mˇely stejn´e vlastnosti, nejl´epe byly totoˇzn´e.

(31)

7.1.2 Pouˇ zit´ e webkamery

Pro testov´an´ı aplikace bylo zap˚ujˇceno ˇsest webov´ych kamer Logitech QuickCam PTZ z ´Ustavu informaˇcn´ıch technologi´ı a elektroniky Technick´e univerzity v Liberci.

Parametry tˇechto kamer:

• Maxim´aln´ı rozliˇsen´ı: 1600x1200 (2MP)

• Typ senzoru: CMOS

• Bit˚u na pixel: 12

• Zobrazovac´ı ´uhel (FOV): 75 diagon´alnˇe

• Komprese: MJPEG

• Max. sn´ımkovac´ı rychlost:

– 30 sn´ımk˚u/s pˇri rozliˇsen´ı 320x240, 640x480, 800x600 – 15 sn´ımk˚u/s pˇri rozliˇsen´ı 960x720, 1280x960, 1600x1200

• Rozhran´ı: High Speed USB 2.0

Obr´azek 7.1: Webkamera Logitech QuickCam PTZ

(32)

Rozm´ıstˇen´ı kamer

Pro usnadnˇen´ı pˇresn´eho rozm´ıstˇen´ı, tak aby byl sn´ım´an prostor kop´ıruj´ıc´ı pohled ze stˇredu krychle na jej´ı jednotliv´e strany, je vhodn´e kamery kalibrovat. Jednou z moˇznost´ı kalibrace je ˇsachovnicov´e sch´ema. Pouˇzit´ıˇsachovnice pro krychlov´e panorama ukazuje obr´azek 7.2. Samotn´a kalibrace se prov´ad´ı natoˇcen´ım a um´ıst’ov´an´ım kamer tak, aby jednotlivˇe vˇsechna krajn´ı pole ˇsachovnice na sebe v n´ahledu pˇr´ımo navazo- vala a jejich natoˇcen´ı bylo shodn´e.

Obr´azek 7.2: Kalibrace pomoc´ı ˇsachovnice pro krychlov´e panorama

7.1.3 Poˇ zadavky na server

Pro variantu krychlov´eho panoramatu s pˇresn´ym rozm´ıstˇen´ım kamer popsan´ych v´yˇse nen´ı minim´aln´ı hardwarov´a konfigurace pˇr´ıliˇs n´aroˇcn´a. Pro spuˇstˇen´ı v´ysledn´e ap- likace postaˇc´ı souˇcasn´a konfigurace bˇeˇzn´e kancel´aˇrsk´e sestavy. Jedinou podm´ınkou je dostatek rozhran´ı pro pˇripojen´ı dan´eho mnoˇzstv´ı kamer tak, aby vˇsechny mohly pracovat najednou. Pro n´avrh ˇreˇsen´ı vyuˇz´ıvaj´ıc´ı stitching v re´aln´em ˇcase je v´ykon sestavy pˇr´ımo zavisl´y na kvalitˇe a plynulosti v´ysledn´eho obrazu.

(33)

7.1.4 Pouˇ zit´ a konfigurace serveru

Testovac´ı konfigurace serveru m´a tyto parametry:

• Procesor: Intel Core i3 4010U Hasswell (1.7 GHz)

• Operaˇcn´ı pamˇet’: 4GB DDR3

• Pevn´y disk: 500GB (5400rpm) + 16GB SSD Cache

• Pouˇzit´e rozhran´ı pro pˇripojen´ı kamer: 2 xUSB 3.0

• Dalˇs´ı zaˇr´ızen´ı: aktivn´ı USB3.0 rozboˇcovaˇc

7.1.5 Pˇ ripojen´ı v´ıce kamer na rozhran´ı USB

Z d˚uvodu, ˇze pro testovac´ı konfiguraci byly zvoleny webkamery na rozhran´ı USB, jsem se setkal pr´avˇe s problematikou pˇripojen´ı v´ıce webkamer. Probl´em nast´av´a v ˇs´ıˇrce komunikaˇcn´ıho p´asma sbˇernice USB, jelikoˇz se standardnˇe sn´ımky z we- bkamer odes´ılaj´ı do poˇc´ıtaˇce v nekomprimovan´em form´atu, tak pro pouˇzit´ı vˇetˇs´ıho rozliˇsen´ı sn´ımk˚u a v´ıce kamer tato ˇs´ıˇrka p´asma je nedostaˇcuj´ıc´ı. ˇC´asteˇcn´ym ˇreˇsen´ım je vyuˇzit´ı novˇejˇs´ıho standardu USB3.0, kter´y m´a pˇrenosov´e p´asmo ˇsirˇs´ı. Ovˇsem pokud chceme vyuˇz´ıvat nekompresn´ı pˇrenos sn´ımk˚u, nastane jeˇstˇe probl´em s nemoˇznost´ı vytvoˇren´ı v´ıce komunikaˇcn´ıch kan´al˚u na jednom ˇradiˇci pos´ılaj´ıc´ı tato surov´a data.

Optim´aln´ım ˇreˇsen´ım by tedy bylo m´ıt na kaˇzdou pˇripojenou webkameru samostatn´y ˇradiˇc, ovˇsem tuto moˇznost nelze aplikovat na vˇsech zaˇr´ızen´ıch z d˚uvodu absence adekv´atn´ıch pˇripojen´ı. ˇReˇsen´ı se tedy nach´az´ı jiˇz ve v´ybˇeru kamer, a to takov´ych, aby mˇely hardwarovou podporu kompresn´ıho pˇrenosu. Nejˇcastˇejˇs´ı kompresn´ı pˇrenos zajiˇst’uje komprese typu MJPG (motion JPEG). V´yhoda t´eto komprese je v jej´ı rychlosti, kter´a je zajiˇstˇena pomoc´ı intra-frame komprese. Nejlepˇs´ı kompresn´ı pomˇer, kter´eho lze doc´ılit, je 1:20. Tato komprese, pokud nen´ı nastavena jako v´ychoz´ı typ

(34)

pˇrenosu na webkameˇre, se mus´ı aktivovat softwarovˇe pˇred vytvoˇren´ım datov´eho ko- munikaˇcn´ıho kan´alu. V tabulce 7.1 je pˇrehled zat´ıˇzen´ı jednou testovac´ı kamerou pˇrenosov´eho p´asma pro vybran´a rozliˇsen´ı bez a s kompres´ı MJPG. V´ypoˇcet je d´an n´asleduj´ıc´ım vzorcem:

Zat´ıˇzen´ı p´asma = sn´ımk˚u za sekundu (fps)∗ˇs´ıˇrka sn´ımku∗v´yˇska sn´ımku∗bit˚u na pixel

Komprese MJPEG je ve v´ypoˇctu v tabulce 7.1 br´ana jako maxim´aln´ı moˇzn´a. Na re´aln´ych sn´ımc´ıch bude komprese niˇzˇs´ı.

Tabulka 7.1: 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.

(35)

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.

Webkamera

Server (JAVA)

FFMPEG Capture

JavaCV (úprava snímku)

Instance webkamery

Konfigurace od uživatele (konfigurační soubor, GUI)

GUI

Parametry

Konfigurace

Stream server OGV (Theora) Stream server MP4 (H.264) Stream

server WEBM

Jádro aplikace Ovládání

WEBSERVER

HTTP

Parametry

Parametry

Ovládání

Snímky

Internet

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

(36)

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.

(37)

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

(38)

• 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.

(39)

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

(40)

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´ı

(41)

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) Internet

Konfigurace Načtení konfigurace

HTML

Layout Canvas

WEBGL Javascript

Objekt

Video element Skybox

Textura (cubemap)

Ovládání

Příprava dat

Video stream

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

(42)

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",

"globalWidth":320,"globalHeight":240,

"pathTextureRight":"http://192.168.0.30:8080/consume/videoRight",

"pathTextureLeft":"http://192.168.0.30:8080/consume/videoLeft",

"pathTextureFront":"http://192.168.0.30:8080/consume/videoFront",

"pathTextureBack":"http://192.168.0.30:8080/consume/videoBack",

"pathTextureTop":"http://192.168.0.30:8080/consume/videoTop",

"pathTextureBottom":"http://192.168.0.30:8080/consume/videoBottom"}

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.

(43)

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

(44)

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){

videoLeft = document.createElement( ’video’ );

videoLeft.id = ’videoLeft’;

videoLeft.type = globalCodec;

videoLeft.src = path;

videoLeft.load();

videoLeft.play();

canvasLeft = document.createElement( ’canvas’ );

canvasLeft.id = "canvasLeft";

canvasLeft.width = globalWidth;

canvasLeft.height = globalHeight;

contextLeft = canvasLeft.getContext( ’2d’ );

contextLeft.fillStyle = ’#000000’;

contextLeft.fillRect( 0, 0, canvasLeft.width, canvasLeft.height );

textureLeft = new THREE.Texture( canvasLeft );

textureLeft.minFilter = THREE.LinearFilter;

textureLeft.magFilter = THREE.LinearFilter;

return textureLeft;}

(45)

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

(46)

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.

(47)

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

(48)

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.

(49)

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 ro-

(50)

zliˇsen´ı 320x240 pˇri sn´ımkovac´ı rychlosti 10 sn´ımk˚u za sekundu a velikost vyrovn´avac´ı pamˇeti 1 000KB. Vˇsechna v´ysledn´a data jsou pr˚umˇern´e hodnoty za ˇcasov´y interval jedn´e minuty. K serveru byl v dobˇe mˇeˇren´ı pˇripojen jeden klient. Tyto v´ysledky jsou uvedeny v tabulce 8.1

Tabulka 8.1: Zat´ıˇzen´ı serveru

Pro mˇeˇren´ı na stranˇe klienta bylo pouˇzito stejn´e nastaven´ı. V tomto pˇr´ıpadˇe mˇeˇren´ı prob´ıhalo na dvou testovac´ıch sestav´ach. Pro klientskou ˇc´ast byla prove- dena dvˇe mˇeˇren´ı. Prvn´ı slouˇz´ı pro otestovan´ı implementace v r˚uzn´ych prohl´ıˇzeˇc´ıch na platformˇe Windows (verze 10) a Linux (Fedora 22). Bylo tedy provedeno mˇeˇren´ı procentu´aln´ı konzumace v´ykonu a velikosti spotˇrebovan´e pamˇeti na prohl´ıˇzeˇc´ıch Mi- crosoft Internet Explorer 11, Mozzila Firefox a Google Chrome verze 44. Prohl´ıˇzeˇc In- ternet Explorer pro chod kodeku WEBM mus´ı m´ıt integrovan´e roˇs´ıˇren´ı pro podporu tohoto form´atu. V´ysledky tohoto mˇeˇren´ı jsou uvedeny v tabulce 8.2 pro syst´em Win- dows a v tabulce 8.3 pro syst´em Linux. Testovac´ı sestava pro operaˇcn´ı syst´em Linux je stejn´e konfigurace jako uveden´a testovac´ı sestava serveru. Sestava pro syst´em Windows m´a n´asleduj´ıc´ı parametry:

• Procesor: Intel Core 2 Duo T5870 (2.00 GHz)

• Operaˇcn´ı pamˇet’: 2GB DDR2

• Pevn´y disk: 500GB (5400rpm)

Tabulka 8.2: V´ykon prohl´ıˇzeˇce Windows

(51)

Tabulka 8.3: V´ykon prohl´ıˇzeˇce Linux

Druh´e proveden´e mˇeˇren´ı poukazuje na zat´ıˇzen´ı pˇrenosov´eho p´asma. Bylo zvoleno mˇeˇren´ı mnoˇzstv´ı pˇrenesen´ych dat za dan´y ˇcasov´y interval. ˇCasov´y interval byl urˇcen na jednu minutu. V´ysledky mˇeˇren´ı jsou zn´azornˇeny v tabulce 8.4.

Tabulka 8.4: Mnoˇzstv´ı pˇrenesen´ych dat

V r´amci proveden´ych mˇeˇren´ı se jako nejvhodnˇejˇs´ı pouˇziteln´y kodek jev´ı WEBM.

Oproti namˇeˇren´ym hodnot´am m´a v˚uˇci kodeku MP4 podstatnou v´yhodu pr´avˇe v r´amci streamov´an´ı dat, a to konkr´etnˇe v rychl´em naˇcten´ı pˇr´ıchoz´ıho streamu. Tato vlast- nost je zp˚usobena velmi n´ızkou velikost´ı startovac´ı vyrovn´avac´ı pamˇeti tzv. precache.

Nev´yhodou tohoto form´atu je nutnost rozˇs´ıˇren´ı pro prohl´ıˇzeˇc Internet Explorer.

Oproti kodek˚um WEBM a MP4 m´a kodek OGV n´ızk´e zat´ıˇzen´ı serveru. Rozd´ıl v kvalitˇe v´ystupn´ıho videa nebyl v porovn´an´ı vˇsech tˇechto tˇr´ı moˇznost´ı kodek˚u znateln´y. Pro pouˇzit´ı na zaˇr´ızen´ıch maj´ıc´ıch omezen´ı v rychlosti a mnoˇzstv´ı dat se opˇet nejlepˇs´ı v´ysledky uk´azal kodek WEBM.

8.3 Celkov´ a funkˇ cnost a moˇ zn´ a vylepˇ sen´ı

V r´amci t´eto pr´ace bylo vytvoˇreno ˇreˇsen´ı server-klient, kde server zprostˇredkov´aval sn´ımky z kamer a zajiˇst’oval jejich stream ke klientovi. Klient byl vytvoˇren tak, aby byl pˇr´ıstupn´y z webov´eho rozhran´ı a zajiˇst’oval jednoduchost ovl´ad´an´ı. Celkov´e

(52)

ˇreˇsen´ı bylo odzkouˇseno a v r´amci proveden´ych mˇeˇren´ı zaznamenan´ych v´yˇse byly zpracov´any poznatky z tˇechto mˇeˇren´ı. Aplikace je vhodn´a pro pouˇzit´ı streamov´an´ı velk´ych prostor˚u a krajin. Autorov´ym impulsem k vytvoˇren´ı t´eto pr´ace bylo streamov´an´ı 360 ˇziv´eho pohledu na Liberec.

Autor chce na t´eto problematice d´ale pracovat a bude se snaˇzit vylepˇsit nˇekter´e ˇc´asti, kter´e uv´adˇel v textu t´eto pr´ace. Jednou z moˇznost´ı zkvalitnˇen´ı je moˇznost voln´eho rozm´ıstˇen´ı kamer a ˇziv´eho stitchingu obrazu. Dalˇs´ı navrhovan´e vylepˇsen´ı se t´yk´a sn´ıˇzen´ı mnoˇzstv´ı pˇren´aˇsen´ych dat, kde pˇr´ıjem streamu videa by byl odeb´ır´an jen pouze z kamer v aktu´aln´ım n´ahledu. V´yhodn´ym vylepˇsen´ım m˚uˇze v budoucnosti tak´e b´yt vytvoˇren´ı serverov´e aplikace na platformu Windows.

8.4 Zhodnocen´ı

V pr˚ubˇehu t´eto pr´ace musel autor ˇreˇsit st´ale se objevuj´ıc´ı probl´emy jak hard- warov´e, tak i softwarov´e, a tud´ıˇz v´ysledn´a aplikace pˇri sv´em v´yvoje proch´azela ˇradou razantn´ıch zmˇen. Stanoven´e c´ıle pr´ace byly splnˇeny a v r´amci z´ıskan´ych poznatk˚u byly navrˇzeny moˇznosti vylepˇsen´ı. Vˇsechny body zad´an´ı t´eto pr´ace byly splnˇeny a je vytvoˇreno funkˇcn´ı ˇreˇsen´ı s jednoduchou implementac´ı. Aplikace proˇsla testov´an´ım na uveden´e hardwarov´e konfiguraci s oˇcek´avan´ym funkˇcn´ım v´ysledkem.

(53)

Literatura

[1] Makzan: Programujeme hry v HTML5, Computer Press, 2012, EAN:9788025137314

[2] Zakas, Z. N.: JavaScript pro webov´e v´yvoj´aˇre, Computer Press, 2009, EAN:9788025125090

[3] COMPUPHASE,. Panoramic images. Panoramic images [online]. 2000, (7) [cit.

2015-09-09]. Dostupn´e z: http://www.compuphase.com/panorama.pdf

[4] DIRKSEN, Jos. Learning Three The JavaScript 3D Library for WebGL. New Edition. Birmingham: Packt Publishing, 2013. ISBN 17-821-6628-9.

[5] MATSUDA, Kouchi a Rodger LEA. WebGL programming guide: interactive 3D graphics programming with WebGL. xxv, 516 pages. Always learning. ISBN 03- 219-0292-0.

[6] PARISI, Tony. Programming 3D applications with HTML5 and WebGL. First edition. xv, 384 pages. ISBN 978-144-9362-966.

[7] AUSTERBERRY, David. The technology of video and audio streaming. 2nd ed.

Burlington, MA: Focal Press, 2004. ISBN 02-408-0580-1.

[8] SIMPSON, Wes. Video over IP: a practical guide to technology and applications.

2nd ed. Boston: Focal Press, c2006, xix, 493 p. ISBN 978-024-0805-573.

[9] ThreeJS Docs. MRDOOB. ThreeJS Docs [online]. [cit. 2015-09-09]. Dostupn´e z:

http://threejs.org/docs/

[10] OpenCV [online]. 2015 [cit. 2015-09-09]. Dostupn´e z: http://opencv.org/

[11] WEITZ, Allan. The Tools and Techniques of Panoramic Pho- tography [online]. (1) [cit. 2015-09-09]. Dostupn´e z: http://www.

bhphotovideo.com/explora/photography/tips-and-solutions/

tools-and-techniques-panoramic-photography

[12] CLARK, Richard. Beginning HTML5 and CSS3: the Web evolved : next gen- eration Web standards. New York: Distributed to the book trade worldwide by Springer Science+Business Media, c2012, xx, 600 p. Expert’s voice in Web de- velopment. ISBN 1430228741.

(54)

[13] HAGGAR, Peter. Practical Java: programming language guide. Reading, Mass.:

Addison-Wesley, c2000, xxx, 279 p. ISBN 0201616467-.

[14] SOUKUP, Roman. ˇSkola digit´aln´ı fotografie. 1. vyd. Praha: Grada, 2006, 146 s., 28 s. barev. obr. pˇr´ıl. Pr˚uvodce (Grada). ISBN 80-247-1077-3.

References

Related documents

Nicm´ enˇ e v t´ eto pr´ aci byla vyuˇ zita pouze jej´ı element´ arn´ı funkˇ cnost, tedy zazn´ amen´ av´ an´ı pohybu prstu po vymezen´ em prostoru bez moˇ znosti

Pr´ ace navazuj´ıc´ı na tuto by se mohly zab´ yvat vlivem r˚ uzn´ ych pˇredpomiˇ novaˇ c˚ u na ˇ casovou n´ aroˇ cnost ˇreˇsen´ı pˇri pouˇ zit´ı monolitick´

Kromˇ e fin´ aln´ı verze, kter´ a komplexnˇ e zpracov´ av´ a veˇsker´ e dan´ e poˇ zadavky, vzni- kala souˇ casnˇ e i verze, kter´ a fungovala bez pouˇ zit´ı detektoru

Ke kaˇ zd´ emu videu pouˇ zit´ emu pˇri testov´ an´ı byly hod- noty poˇ ctu osob, kter´ e proˇsly a poˇ ctu unik´ atn´ıch osob, kter´ e se ve videu objevily tak´ e

Další úrovní je nastavení komponent Struts 2 v souboru struts.properties (viz. Pro nastavení připojení k databázi se používá soubor context.xml. Dále je tu nastavení

Myˇslenka generov´ an´ı hudby pomoc´ı umˇ el´ ych neuronov´ ych s´ıt´ı nen´ı nov´ a a byla ˇ casto zpracov´ av´ ana vˇ edeck´ ymi t´ ymy v minulosti, ovˇsem nyn´ı,

Na z´ akladˇ e minim a maxim porovn´ avan´ ych element˚ u se vyhodnot´ı, zda elementy mohou nebo nemohou m´ıt spoleˇ cn´ y pr˚ unik, pokud elementy nemohou m´ıt spoleˇ cn´

Uveden´ a simulace je zaloˇ zena, jak jiˇ z bylo zm´ınˇ eno, na opakovan´ em gene- rov´ an´ı n´ ahodn´ ych dat, na kter´ ych se prov´ ad´ı dan´ y algoritmus a jsou