Łączenie Edge AI z wykrywaniem twarzy na OrangePi 5

Ari Mahpour
|  Utworzono: listopad 27, 2024  |  Zaktualizowano: styczeń 17, 2025
Łączenie Edge AI z wykrywaniem twarzy na OrangePi 5

Silniki wnioskowania AI stają się coraz bardziej popularne na obrzeżach sieci. Obserwujemy, jak algorytmy uczenia maszynowego, a nawet duże modele językowe są przenoszone do systemów wbudowanych zarówno w przestrzeni hobbystycznej, jak i komercyjnej. W tym projekcie będziemy budować detektor twarzy działający w czasie rzeczywistym, wykorzystujący Orange Pi 5 napędzany procesorem Rockchip 3588. Oznacza to, że będziemy w czasie rzeczywistym wykrywać ludzkie twarze z naszego strumienia wideo z kamery internetowej.

Przygotowanie projektu

Aby rozpocząć, użyjemy Orange Pi 5, kamery internetowej USB oraz kodu z mojego publicznego repozytorium. Możesz odnieść się do Podstawy pracy z Orange Pi 5 i procesorem Rockchip RK3588, aby dowiedzieć się, jak skonfigurować swoje Orange Pi 5. Co wspaniałe w tym przykładzie, to fakt, że może on również działać na PC lub innym wydajnym urządzeniu wbudowanym z systemem Linux (np. Raspberry Pi 5). Po skonfigurowaniu i uruchomieniu Orange Pi 5 (lub innego urządzenia) będziemy musieli zainstalować kilka bibliotek. Ten przykład jest zaprojektowany z myślą o systemie Linux (konkretnie z uruchomionym Ubuntu), więc zakładamy, że masz dostęp do menedżera pakietów Debian. W terminalu uruchom następujące polecenie:

sudo apt update -y && sudo apt install -y python3 python3-pip libopencv-dev python3-opencv v4l-utils

To zainstaluje wszystkie niezbędne pakiety do uruchomienia demonstracji. Zainstaluj również pakiet Python OpenCV za pomocą pip:

pip3 install opencv-python

Możesz również zapoznać się z README, aby znaleźć więcej kroków weryfikujących twoją konfigurację.

CPU vs. GPU vs. FPGA

W AI Vision with the Kria KV260 Vision AI Starter Kit zademonstrowaliśmy, jak zbudować silnik wnioskowania AI do wykrywania twarzy, używając FPGA, ale poziom złożoności był niezwykle wysoki. W tym przykładzie będziemy badać znacznie prostszy sposób robienia tego samego. Jest to łatwiejsze, ponieważ przenosimy złożoność na CPU lub GPU, które oba zbadamy w tym artykule. Prawdziwym pięknem jest to, jak dobrze OpenCV jest zoptymalizowane dla naszych komputerów. Użycie tej biblioteki całkowicie abstrahuje wszystkie złożoności uczenia maszynowego, z którymi mieliśmy do czynienia, próbując zbudować własną sieć neuronową na FPGA.

Przegląd kodu i uruchamianie projektu

Kod jest dość prosty. Możemy go podzielić na kilka kroków:

Part Insights Experience

Access critical supply chain intelligence as you design.

  1. Konfiguracja OpenCL (tj. ustalenie, czy używany jest GPU).
  2. Wczytaj klasyfikator kaskadowy
  3. Przechwyć strumień wideo i ustaw go na odcienie szarości
  4. Uruchom klasyfikator kaskadowy z OpenCV
  5. Jeśli wykryta zostanie twarz, narysuj wokół niej niebieską ramkę
  6. Powtarzaj kroki 3-5 w pętli, aż zostanie spełniony warunek "zakończenia" (np. naciśnięcie "q" lub zamknięcie wyskakującego okna)

Prawdziwa magia tkwi tutaj w "klasyfikatorze kaskadowym", z którego korzystamy w OpenCV. Jest to narzędzie oparte na uczeniu maszynowym do wykrywania obiektów, które działa poprzez serię coraz bardziej złożonych etapów (podobnie do koncepcji sieci neuronowej). Można to porównać do precyzyjnie dostrojonej linii montażowej, gdzie każdy etap ma jeden cel: wykryć konkretne cechy, takie jak krawędzie, narożniki czy kształty. Jeśli region obrazu przejdzie przez wszystkie te punkty kontrolne, jest oznaczany jako wykryty obiekt. W przeciwnym razie jest odrzucany na wczesnym etapie, aby zaoszczędzić czas i moc obliczeniową.

Klasyfikator kaskadowy to przede wszystkim szybkość i wydajność. Używa on predefiniowanych cech (np. wzorców takich jak krawędzie czy kontrasty) i przetwarza je etapami, co czyni go idealnym do zadań w czasie rzeczywistym na urządzeniach o ograniczonych możliwościach przetwarzania. Sieci neuronowe grają natomiast w innej lidze. Automatycznie uczą się cech bezpośrednio z danych, więc mogą radzić sobie z bardziej złożonymi i zróżnicowanymi scenariuszami. Ta moc jednak ma swoją cenę: sieci neuronowe wymagają znacznie więcej zasobów obliczeniowych i czasu. Klasyfikatory kaskadowe są szybkie i lekkie, ale mniej elastyczne, podczas gdy sieci neuronowe są solidne, ale żarłoczne pod względem zasobów. Chodzi o wybranie odpowiedniego narzędzia do pracy.

W naszym przypadku korzystamy z wytrenowanego modelu, detektora twarzy Haar Frontal Face (w formie pliku XML), który dokładnie wie, czego szukać w twarzy i co odfiltrować. Praktycznie rzecz biorąc, jest to wystarczająco dobre jako prosty przykład, który badaliśmy. Jak wspomniano powyżej, nie będzie tak precyzyjny, ale nadal wystarczająco dobry dla większości prostych przykładów wykrywania twarzy.

Aby uruchomić kod, wszystko, co musisz zrobić, to:

python3 face_detection.py --use-gpu

Lub pomiń flagę --use-gpu, jeśli nie masz GPU w swoim urządzeniu (tj. nie używasz Orange Pi 5). W tym momencie powinno pojawić się małe okienko, a na twojej twarzy powinien pojawić się niebieski prostokąt. W moim przypadku pojawił się natychmiast:

Cloud Storage and Version Control

Store your libraries and design data in one secure, accessible, and version-controlled space.

Real-time face detection using OpenCV and a Webcam
Rysunek 1: Wykrywanie twarzy w czasie rzeczywistym przy użyciu OpenCV i kamery internetowej

Podsumowanie

Ten projekt pokazuje, jak dostępna stała się detekcja twarzy w czasie rzeczywistym dzięki narzędziom takim jak OpenCV i urządzeniom takim jak Orange Pi 5. Wykorzystując lekki i wydajny klasyfikator kaskadowy (poprzez użycie wczytanego wcześniej pliku XML), zbudowaliśmy funkcjonalny przykład bez skomplikowanych sieci neuronowych czy programowania FPGA. Chociaż to podejście ma swoje ograniczenia, takie jak radzenie sobie z różnym oświetleniem czy kątami, jest doskonałym punktem wyjścia do eksperymentowania z AI na krawędzi.

Z użyciem zaledwie kilku bibliotek i minimalnej konfiguracji, możesz zreplikować ten projekt na urządzeniu wbudowanym lub nawet standardowym PC. W miarę jak silniki wnioskowania AI będą się ulepszać, spodziewaj się zobaczyć bardziej zaawansowane modele działające na urządzeniach o ograniczonych zasobach, czyniąc zaawansowane AI bardziej dostępnym dla wszystkich. Aby zobaczyć repozytorium zawierające cały kod potrzebny do rozpoczęcia, odwiedź https://gitlab.com/ai-examples/orange-pi-face-detection.

About Author

About Author

Ari jest inżynierem z rozległym doświadczeniem w projektowaniu, produkcji, testowaniu i integracji systemów elektrycznych, mechanicznych i oprogramowania. Jego pasją jest łączenie inżynierów zajmujących się projektowaniem, weryfikacją i testowaniem, aby pracowali jako jeden zespół.

Powiązane zasoby

Powiązana dokumentacja techniczna

Powrót do strony głównej
Thank you, you are now subscribed to updates.
Altium Need Help?