Connect with us

Liderzy opinii

Stosowanie sztucznej inteligencji w przetwarzaniu wideo w czasie rzeczywistym: Podstawy i więcej

mm

Przez Maksyma Tatariants, inżyniera Data Science w MobiDev.

Nie ma nic nowego w używaniu sztucznej inteligencji (AI) w przetwarzaniu wideo. Jeśli spojrzymy poza przetwarzaniem obrazu – jest to jeden z najczęstszych przypadków użycia AI. I podobnie jak przetwarzanie obrazu, przetwarzanie wideo wykorzystuje ustalone techniki, takie jak wizja komputerowa, rozpoznawanie obiektów, uczenie maszynowe i głębokie uczenie, aby udoskonalić ten proces. 

Niezależnie od tego, czy używasz wizji komputerowej i NLP w edycji wideo i generowaniu, rozpoznawaniu obiektów w zadaniach automatycznego tagowania zawartości wideo, uczeniu maszynowym w celu usprawnienia analizy wideo AI, lub głębokim uczeniu, aby przyspieszyć przetwarzanie wideo w czasie rzeczywistym usunięcie tła, przypadki użycia nadal rosną z dnia na dzień.

Czytaj dalej, aby dowiedzieć się, jaki podejście możesz przyjąć, gdy chodzi o używanie AI w przetwarzaniu wideo.

Podstawy przetwarzania wideo w czasie rzeczywistym

Zacznijmy od podstaw. Przetwarzanie wideo w czasie rzeczywistym jest niezwykle ważną technologią w systemach nadzoru, wykorzystujących rozpoznawanie obiektów i twarzy. Jest to również proces, który napędza oprogramowanie do inspekcji wizualnej AI w sektorze przemysłowym.

Jak więc działa przetwarzanie wideo? Przetwarzanie wideo obejmuje szereg kroków, które obejmują dekodowanie, obliczenia i kodowanie. Oto, co musisz wiedzieć:

  • Dekodowanie: Proces wymagany do przekonwertowania wideo z pliku skompresowanego z powrotem do jego surowego formatu.
  • Obliczenia: Konkretna operacja wykonywana na surowym kadrze wideo.
  • Kodowanie: Proces ponownego przekonwertowania przetworzonego kadru z powrotem do jego pierwotnego skompresowanego stanu.

Teraz, celem każdego zadania przetwarzania wideo jest ukończenie tych kroków jak najszybciej i najdokładniej jak to możliwe. Najłatwiejsze sposoby osiągnięcia tego obejmują: pracę w trybie równoległym i optymalizację algorytmu pod kątem szybkości. W prostych słowach? Musisz wykorzystać podział plików i architekturę potoku.

Czym jest podział pliku wideo?

Podział pliku wideo pozwala algorytmom pracować jednocześnie, pozwalając im używać wolniejszych, bardziej dokładnych modeli. To jest osiągane przez podział wideo na oddzielne części, które są następnie przetwarzane w tym samym czasie.

Możesz myśleć o podziale pliku wideo jako o formie wirtualnej generacji plików zamiast generacji podplików. 

Pomimo tego, podział pliku wideo nie jest najlepszą opcją dla przetwarzania wideo w czasie rzeczywistym. Dlaczego dokładnie? Ten proces utrudnia wstrzymanie, wznowienie i przewinięcie pliku podczas jego przetwarzania.

Czym jest architektura potoku?

Inną opcją jest architektura potoku. Ten proces działa w celu podziału i równoległego wykonywania zadań wykonywanych podczas przetwarzania, a nie samodzielnego podziału wideo.

Oto szybki przykład tego, jak wygląda architektura potoku w praktyce, i jak może być używana w systemie nadzoru wideo w celu wykrycia i rozmycia twarzy w czasie rzeczywistym.

W tym przykładzie potok podzielił zadania na dekodowanie, wykrywanie twarzy, rozmycie twarzy i kodowanie. I jeśli chcesz poprawić szybkość potoku, możesz użyć technik głębokiego uczenia potoku.

Dekodowanie i kodowanie wyjaśnione

A co z dekodowaniem i kodowaniem? Istnieją dwie sposoby, aby te procesy wykonać: oprogramowanie i sprzęt.

Możesz już znać pojęcie przyspieszenia sprzętowego. Ten proces jest możliwy dzięki dekoderom i koderom zainstalowanym w najnowszych kartach graficznych NVIDIA, a także rdzeniom CUDA.

Więc, jakie opcje masz do dyspozycji, gdy chodzi o przyspieszenie sprzętowe dla procesów kodowania i dekodowania? Oto niektóre z popularniejszych opcji:

  • Kompilacja OpenCV z obsługą CUDA: Kompilacja OpenCV z optymalizacją CUDA optymalizuje zarówno dekodowanie, jak i obliczenia potoku, które używają OpenCV. Pamiętaj, że będziesz musiał napisać je w C++, ponieważ wrapper Pythona nie obsługuje tego. Ale w sytuacjach, które wymagają zarówno dekodowania, jak i obliczeń numerycznych z użyciem GPU bez kopiowania z pamięci CPU, jest to nadal jeden z lepszych wyborów dostępnych.
  • Kompilacja FFmpeg lub GStreamer z obsługą kodeków NVDEC/NVENC: Inną opcją jest użycie wbudowanego dekodera i kodera NVIDIA, włączonego z niestandardowymi instalacjami FFmpeg i Gstreamer. Jednak sugerujemy użycie FFmpeg, jeśli jest to możliwe, ponieważ wymaga mniej konserwacji. Ponadto, większość bibliotek jest zasilana przez FFmpeg, co oznacza, że automatycznie zwiększysz wydajność biblioteki, zastępując ją.
  • Użycie ramy przetwarzania wideo NVIDIA: Ostateczną opcją jest użycie wrappera Pythona do dekodowania ramki bezpośrednio do tensora PyTorch na GPU. Ta opcja usuwa dodatkowe kopiowanie z CPU do GPU.

Wykrywanie i rozmycie twarzy

Modele wykrywania obiektów (SSD lub RetinaFace) są popularną opcją do wykrywania twarzy. Te rozwiązania pomagają zlokalizować twarz ludzką w kadrze. I na podstawie naszego doświadczenia, tendencja jest taka, aby preferować śledzenie twarzy Caffe i modele wykrywania obiektów TensorFlow, ponieważ dawały one najlepsze wyniki. Dodatkowo, oba są dostępne za pomocą biblioteki dnn OpenCV.

Więc, co dalej, gdy twarz zostanie wykryta? Następnie system oparty na Pythonie i OpenCV-based system will reveal bounding boxes and detection confidence. Finally, a blurring algorithm is applied to cropped areas.

Jak możesz zbudować oprogramowanie do przetwarzania wideo w czasie rzeczywistym zasilane przez AI?

Nie jest żadnym sekretem, że przetwarzanie wideo, kodeki, które je napędzają, oraz zarówno sprzęt, jak i oprogramowanie wymagane są dość techniczne.

Jednak to nie oznacza, że nie możesz użyć tych narzędzi do zbudowania własnego oprogramowania do przetwarzania wideo w czasie rzeczywistym. 

Oto krótkie podsumowanie tego, co musisz zrobić:

  1. Zacznij od dostosowania swojej wstępnie wytrenowanej sieci neuronowej do wykonania wymaganych zadań.
  2. Skonfiguruj swoją infrastrukturę chmurową do obsługi przetwarzania wideo i skalowania w razie potrzeby.
  3. Zbuduj warstwę oprogramowania, aby skondensować proces i zintegrować określone przypadki użycia, takie jak aplikacje mobilne i panele administracyjne lub internetowe.

Rozwój MVP dla podobnego oprogramowania do przetwarzania wideo może zająć do czterech miesięcy przy użyciu wstępnie wytrenowanej sieci neuronowej i prostych warstw aplikacji. Jednak zakres i czas trwania zależą od szczegółów każdego projektu. W większości przypadków ma sens rozpoczęcie od rozwoju Proof of Concept, aby zbadać szczegóły projektu i znaleźć optymalny przepływ.

Maksym jest zainteresowany zdobywaniem nowych spostrzeżeń i doświadczeń w dziedzinie Data Science i Machine Learning. Jest on szczególnie zainteresowany technologiami opartymi na Deep Learning i ich zastosowaniem w przypadkach użycia w biznesie.