Jak vypadají moderní dohledové systémy? (2)

13. 9. 2015

Sdílet

Autor: © Axis
Díky nástupu internetu věcí si stále více uživatelů i firem uvědomuje přednosti, které jim připojení na internet přináší. Stejně zřetelně by si je ale měli uvědomovat i bezpečnostní profesionálové či vysocí manažeři, kteří se snaží zajistit ochranu pro své organizace.

Předpokládá se, že se od roku 2015 a dále budou rozvíjet technologie pro průběžné analýzy obrazových dat, od nichž se očekává, že přinesou cenné rozbory ohromných nashromážděných objemů strukturovaných i nestrukturovaných informací (big dat).

Jelikož síťové kamery dokážou poskytovat obraz s vyšším rozlišením a mohou se připojovat odkudkoli a nonstop, bezpečnostní oddělení dostávají více informací z více zdrojů. Je proto nutné nasadit více analytických funkcí, jež by organizacím pomohly smysluplně naložit s nekonečnými objemy informací včetně nestrukturovaných dat, jakými jsou fotografie a videozáznamy.

Jsou zapotřebí další a ještě inteligentnější aplikace, aby pomáhaly kategorizovat a interpretovat informace, tak aby mohly být přetaveny do využitelného nástroje.

Tři velká „R“ platná pro big data – rozsáhlost, rychlost a rozmanitost – mohou poskytnout důležité informace v kritických situacích, budou-li přinášet správná data ve správnou chvíli.

Když začneme od informací představujících faktičtější údaje, například data o dohledu, řídicí data fyzického přístupu a informace o kybernetické aktivitě, a vytvoříme mezi nimi užitečné asociace, lze tak snížit náklady, protože budeme hledat pouze co nejrelevantnější informace.

A právě v tomto bodě IP revoluce proměňuje dohledové kamery z forenzního nástroje určeného pro řešení problémů poté, co k incidentu došlo, na nástroj, jenž se stává součástí proaktivního řetězce.

Ve spojení s výkonnými analytickými nástroji je možné snímané video použít například k tomu, aby se odhalily nejobvyklejší trasy pohybu zákazníků v prodejních místech, doba, kterou zákazníci stráví u určitého vystaveného zboží, nebo pro předcházení tvorby front.

Propojíte-li tyto možnosti s dalšími zdroji strukturovaných i nestrukturovaných dat, jako mohou být například informace o dopravním provozu nebo příjezdech hromadné dopravy, seznamy prodejních akcí, údaje o cenách vašich konkurentů, sociální média, může z nich dovedný odborník v oblasti analýzy dat vytěžit typické vzorce chování a souvislosti, o nichž jste dosud neměli ani tušení, že by mohly existovat. A to už je podstatná konkurenční výhoda.

 

Komprese obrazových dat a využití šířky přenosového pásma

Technologie zajišťující kompresi videa slouží k redukci a odstranění nadbytečných obrazových dat s cílem umožnit efektivní přenos digitálních videosouborů po síti a ukládat je na pevných discích počítačů.

Díky účinným kompresním postupům je možné dosáhnout podstatného zmenšení objemu těchto souborů s nepatrným nebo žádným nepříznivým dopadem na kvalitu obrazu. Kvalita videa nicméně může utrpět, pokud se velikost souboru zmenšuje nadměrně uplatněním větší míry komprese u dané kompresní techniky.

Existuje několik standardů komprese videa, mezi něž patří formáty či protokoly Motion JPEG, MPEG-4 Part 2 (zjednodušeně označovaný jako MPEG-4) a H.264 – což je nejnovější a nejúčinnější protokol pro kompresi videa a v současné době jde o standard v dohledových videosystémech, jakož i v mnoha dalších oblastech – například v zábavním průmyslu.

Souběžně s tím se neustále vylepšují možnosti kamer, například pokud jde o rozlišení obrazu a světelnou citlivost, jež naopak zvyšují objem dat dodávaných z kamer – a tím kladou vyšší nároky na účinnost komprese obrazových dat.

Výrobci videodohledových řešení musí vyvažovat zátěž vyšších rozlišení vylepšováním kompresních algoritmů H.264 – aby zajistili, že náklady na datové přenosy a úložiště se nezačnou spirálovitě vymykat kontrole.

Je zapotřebí vyvíjet mezioborové úsilí na tvorbě metod potlačování obrazového šumu a redukce datového toku paralelně se zkoumáním nových způsobů kódování videa, tak aby výsledný obraz byl co nejlepší.

Kromě vylepšování současného kompresního protokolu H.264 se rýsuje zajímavá budoucí technologie H.265, která již nyní poutá zájem vysílacích společností.

Standard H.265 dokáže za určitých příznivých okolností redukovat šířku pásma (objem přenášených dat) a nároky na úložný prostor podstatným způsobem (až o 50 %) a lze očekávat, že se tato technologie bude v oboru bezpečnostních systémů zavádět již během několika příštích let.

Je pravděpodobné, že zprvu se bude uplatňovat ve špičkových kamerách s vysokým rozlišením, a očekává se, že protokoly H.264 a H.265 budou v tomto odvětví koexistovat poměrně dlouhou dobu.

 

Nepolevit v rozvoji

Je jen logické, že vyšší kvalita obrazu a videa, například s rozlišením 4K, si vyžádá podporu odpovídajících technologií na pozadí, aby firmy nebo organizace mohly ze získaných dat vytěžit co nejlepší výsledky, jež následně mohou proměnit v užitečný přínos nejen v oblasti bezpečnosti, ale též pro zvyšování efektivity a získávání konkurenčního náskoku.

Tyto aspekty jsou klíčové, a neměly by proto uniknout pozornosti všech, kdo od dohledových systémů do budoucna očekávají zásadní přínosy.

Autor je pracovníkem společnosti Axis Communications.

Cyber25

 

Tento příspěvek vyšel v Security Worldu 4/2014

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }