Peter Širka
Peter Širka

Osobný blog programátora a IT nadšenca.

Platforma Total.js a NVIDIA DeepStream: automatická anonymizácia videa

Platforma Total.js a NVIDIA DeepStream: automatická anonymizácia videa

V tomto článku opisujem riešenie, ktoré sme dodali jednému z našich významných podnikových zákazníkov: automatickú anonymizáciu videa zo skutočných záznamov. Tento projekt je zároveň súčasťou našich širších skúseností s technológiou NVIDIA DeepStream. V priebehu rokov sme vyvinuli viacero riešení využívajúcich NVIDIA DeepStream v rôznych odvetviach a na rôzne účely. Opakovane sa pritom ukazuje rovnaký architektonický vzor: DeepStream zabezpečuje výpočtovo náročné spracovanie videa a úlohy umelej inteligencie na GPU, zatiaľ čo Total.js všetko prepája do kompletného integrovaného riešenia.

Čo systém robí

Pred vstupom do procesu anonymizácie prechádzajú videá úvodnou fázou predspracovania, ktorú riadi Total.js Flow. Pôvodné nahrávky vo Full HD sa pomocou FFmpeg automaticky konvertujú do rozlíšenia HD. Tým sa zmenší veľkosť súborov a videá sa optimalizujú na následné spracovanie umelou inteligenciou.

Systém každý deň spracuje viac ako 20 GB videozáznamov, pričom jednotlivé videá zvyčajne trvajú 3 až 7 hodín. Total.js Flow túto konverznú pipeline spravuje automaticky, takže prichádzajúce nahrávky sú pripravené na ďalšiu fázu.

Mimoriadne zaujímavá je veľmi nízka pamäťová náročnosť Total.js Flow. Aj počas riadenia konverzií videa pomocou FFmpeg spotrebuje aplikácia Flow približne 20 MB RAM. Samotné spracovanie videa zabezpečuje FFmpeg ako samostatný proces, vďaka čomu môže Total.js Flow zostať mimoriadne ľahký a zároveň koordinovať operácie náročné na zdroje.

Konverzia videa

Po konverzii sa videá umiestnia do frontu, kde čakajú na explicitnú požiadavku na anonymizáciu.

Po spustení anonymizácie prevezme výpočtovo náročnú prácu NVIDIA DeepStream. Systém vo videozázname deteguje ľudí a pomocou akcelerácie GPU automaticky rozmaže ich hlavy a tváre.

Nie každý však musí byť nevyhnutne anonymizovaný. Operátor môže skontrolovať detegované osoby a vybrať tie, ktoré majú zostať viditeľné. Systém potom anonymizuje všetkých ostatných a vybrané osoby vo výslednom videu zachová rozpoznateľné.

Po dokončení spracovania sa anonymizované video uloží na nakonfigurované výstupné miesto. Odtiaľ Total.js Flow pokračuje v riadení pracovného postupu — odosiela upozornenia, presúva súbory, ukladá výsledky alebo spúšťa ďalšie služby.

Tento prístup kombinuje spracovanie umelej inteligencie akcelerované GPU s flexibilnou automatizáciou pracovných postupov. Celá pipeline tak dokáže spracovať veľké množstvo dlhých videozáznamov s minimálnym manuálnym zásahom.

Snímka z anonymizovaného videa: tvár osoby aj tváre ľudí v pozadí sú skrytéĎalšia snímka z toho istého videa so skrytými tvárami

Dve snímky videa anonymizovaného systémom. Tvár každého človeka vrátane ľudí v pozadí sa automaticky skryje.

Použité technológie

  • NVIDIA Jetson Thor s DeepStream 9 a lokálnym inferenčným serverom Triton, spusteným v Dockeri.
  • Aplikačný server so systémom Red Hat Enterprise Linux (RHEL), ktorý poskytuje stabilné a spoľahlivé prostredie pre backendové služby a celkovú orchestráciu systému.
  • PostgreSQL ako primárna relačná databáza na ukladanie aplikačných údajov a metadát o spracovaní a na správu informácií súvisiacich s pracovnými postupmi.
  • Model na detekciu hláv a tvárí s malým vlastným parserom napísaným v C++.
  • Rozmazávanie na GPU a kódovanie H.264 v rámci rovnakej pipeline.
  • Total.js Flow na prepojenie všetkých častí, automatizáciu pracovných postupov spracovania videa a koordináciu komunikácie medzi komponentmi systému.
  • Trénovanie modelov: keď hotový model nevyhovuje, trénujeme aj vlastné modely pomocou datasetov pripravených pre konkrétny prípad použitia a balíme ich pre DeepStream.
  • Total.js v5 s architektúrou založenou na pluginoch, ktorá poháňa hlavný aplikačný server a používateľské rozhranie.

Všetko spracovanie videa prebieha v infraštruktúre zákazníka. Videozáznamy nikdy neopúšťajú prostredie zákazníka, takže citlivé nahrávky zostávajú počas celého procesu pod jeho kontrolou.

Úloha Total.js

NVIDIA DeepStream zabezpečuje výpočtovo náročné spracovanie videa a úlohy umelej inteligencie. Total.js Flow všetko prepája a riadi celý proces na viacerých lokalitách.

Distribuovaná architektúra Flow

Pre tohto zákazníka prevádzkujeme viacero inštancií Total.js Flow distribuovaných na rôznych miestach po celej krajine. Každá lokalita používa vlastnú inštanciu Flow s identickou implementáciou, takže spracovanie videa a prenosy súborov možno riadiť lokálne.

Jednou z hlavných výhod tejto architektúry je automatická synchronizácia medzi inštanciami Flow. Všetky distribuované inštancie sa synchronizujú s centrálnou hlavnou inštanciou Flow. Kedykoľvek zmeníme hlavnú implementáciu Flow, aktualizácia sa v priebehu niekoľkých sekúnd automaticky prenesie do každej pripojenej lokality.

To znamená, že celý distribuovaný systém môžeme udržiavať a vylepšovať z jedného miesta bez manuálnej aktualizácie jednotlivých inštalácií. Či už upravíme existujúci pracovný postup, opravíme problém alebo pridáme novú funkciu, všetky lokality dostanú zmeny takmer okamžite.

Orchestrácia Total.js Flow:

Orchestrácia Total.js Flow

Spoľahlivý prenos videa cez WebSocket

Videozáznamy sa z geograficky rozptýlených inštancií Flow prenášajú do centrálnej infraštruktúry pomocou protokolu WebSocket.

Na zaistenie spoľahlivosti týchto prenosov sme vyvinuli dva vlastné komponenty Total.js Flow:

  • File uploader WS — odosiela video súbory zo vzdialených lokalít do centrálnej infraštruktúry.
  • File receiver WS — prijíma prichádzajúce súbory a riadi proces prenosu na strane prijímača.

Oba komponenty podporujú obnoviteľný prenos súborov, čo je mimoriadne dôležité pri práci s veľkými videozáznamami na viacerých lokalitách.

Súbory sa prenášajú v 1 MB blokoch. Ak sa sieťové pripojenie počas nahrávania preruší, prenos sa nemusí začínať od začiatku. Po opätovnom nadviazaní spojenia WebSocket komponenty automaticky pokračujú v nahrávaní od miesta, kde bolo prerušené.

Tým sa výrazne znižuje zbytočná sieťová prevádzka a systém je odolnejší voči dočasným problémom s pripojením, najmä pri prenose záznamov trvajúcich niekoľko hodín.

Detekcia a anonymizácia osôb pomocou AI

Vyvinuli sme aj dva špecializované komponenty Flow, ktoré sa priamo integrujú s NVIDIA DeepStream:

Person detector prijme video, vykoná detekciu pomocou umelej inteligencie a vráti obrázok každej detegovanej osoby spolu s príslušnou časovou značkou v zázname. Tieto obrázky sa potom zobrazia v centrálnom rozhraní na správu, kde môže operátor skontrolovať detegované osoby.

Flow Person detector

Anonymizer queue riadi anonymizáciu na GPU a vytvára výsledné video MP4. Podporuje spracovanie až štyroch videí v jednej dávke.

Flow anonymizácia

Pracovný postup anonymizácie prebieha v dvoch fázach:

  1. Úvodná anonymizácia: Všetky detegované osoby sa predvolene anonymizujú, takže hlavy a tváre sú rozmazané počas celého záznamu.
  2. Selektívna deanonymizácia: Po skontrolovaní detegovaných osôb v centrálnom rozhraní na správu môže oprávnený operátor vybrať konkrétne osoby, ktoré majú zostať viditeľné. Systém potom vytvorí príslušný výstup videa: vybrané osoby zostanú rozpoznateľné, zatiaľ čo všetci ostatní zostanú anonymizovaní.

Tento prístup zabezpečuje, že súkromie je predvolené, pričom v prípade potreby stále umožňuje riadené výnimky podľa pracovného postupu zákazníka.

Deanonymizácia

Orchestrácia pracovných postupov a spoľahlivosť

Okrem spracovania videa a prenosov súborov Total.js Flow riadi aj prevádzkové aspekty, ktoré zabezpečujú spoľahlivosť celého systému:

  • Videá čakajú vo fronte, aby nepreťažili GPU.
  • Priebeh spracovania sa zobrazuje v reálnom čase prostredníctvom Flow Activities.
  • Chyby sa smerujú cez vyhradené výstupy, čo umožňuje vytvárať vlastné pracovné postupy na spracovanie chýb.
  • Nereagujúce úlohy spracovania sa automaticky detegujú a reštartujú.
  • Distribuované inštancie Flow zostávajú synchronizované s centrálnou implementáciou.
  • Prerušené prenosy súborov sa po opätovnom pripojení automaticky obnovia.

Jednotlivé komponenty zostávajú relatívne malé a zamerané na konkrétne úlohy. Spúšťajú operácie, sledujú ich priebeh, zabezpečujú komunikáciu a odovzdávajú údaje do ďalšieho kroku pracovného postupu.

Skutočná sila Total.js Flow spočíva v tom, ako jednoducho možno tieto komponenty skombinovať do kompletného distribuovaného systému. Pridanie nového kroku, napríklad e-mailového upozornenia, integrácie externého úložiska, schvaľovacieho procesu alebo ďalšej služby umelej inteligencie, často nevyžaduje nič viac než pripojenie ďalšieho komponentu.

Vďaka tejto architektúre môžeme centrálne spravovať geograficky distribuovanú infraštruktúru na spracovanie videa, pričom jednotlivé lokality zostávajú synchronizované, prenosy spoľahlivé a záťaž GPU pod kontrolou.

Flow + NVIDIA Jetson Thor

Ďalšie skúsenosti s DeepStream

Anonymizácia je len jednou z vecí, ktoré DeepStream dokáže. Súčasne načítava veľké množstvo videozdrojov a v reálnom čase na nich spúšťa modely umelej inteligencie — na zariadení, ktoré sa zmestí vedľa kamery. V kombinácii s Total.js to otvára dlhý zoznam možností pre každú spoločnosť s kamerami. Na viacerých z nich sme pracovali a zvyšok poznáme dostatočne dobre na to, aby sme vám pomohli posúdiť, čo je realistické:

  • Detekcia a sledovanie ľudí, ich počítanie, meranie radov a obsadenosti priestorov.
  • Rozpoznávanie situácií, napríklad pádu osoby, preplnenej oblasti alebo vstupu niekoho na miesto, kam nemá prístup.
  • Doprava a parkovanie: počítanie vozidiel, ich klasifikácia, meranie intenzity premávky a počtu voľných miest. Toto riešenie sme nasadili na mestských križovatkách a parkoviskách, pričom DeepStream bežal na zariadeniach Jetson a výsledky spracovával Flow.
  • Detekcia objektov: výrobky na výrobnej linke, chýbajúce bezpečnostné vybavenie, balíky, nástroje či poškodenia.
  • Kontrola kvality vo výrobe pomocou kamery a modelu natrénovaného na vaše súčiastky.
  • Ochrana súkromia: rozmazanie tvárí, osôb alebo evidenčných čísel pred uložením či zdieľaním videa.
  • Upozornenia a dôkazy: možná udalosť sa odošle správnej osobe spolu s priloženou snímkou videa.

V každom prípade platí vyššie opísaný vzor. DeepStream vykoná detekciu, Total.js Flow prepojí výsledok s vaším procesom, údajmi a ľuďmi a používateľské rozhranie sa tiež vytvorí pomocou Total.js. Ide o kompletné riešenie, nielen o samotný model.

Prečo na tom záleží

Toto je vzor, ktorý sa nám na Total.js páči a ktorý sme použili znova a znova. Výkonný nástroj napísaný v C++, Pythone alebo inom jazyku môže fungovať za komponentom Flow. Váš tím získa vizuálny proces, ktorému rozumie a ktorý môže meniť. Špecializovaná technológia zostáva tam, kde je najsilnejšia.

S DeepStream to pokrýva množstvo potrieb v oblasti videa a umelej inteligencie. Ak máte konkrétny nápad, ozvite sa nám. Radi ho s vami preberieme.