Edukując się od jakiegoś czasu w obszarze AI, doszedłem do wniosku, że nie samymi modelami językowymi człowiek żyje i czasem trzeba wrócić do źródeł, czyli do „inteligentnego domu”. Chcę dodać trochę „inteligentnych” funkcji do mojego systemu automatyki, a jednocześnie przebudować system monitoringu. Dlatego zainteresował mnie Google Coral.
Google Coral to TPU (Tensor Processing Unit), czyli akcelerator AI – specjalizowany, energooszczędny układ, który przyspiesza obliczenia potrzebne do działania sieci neuronowych. A po ludzku? Pozwala delegować obliczenia związane z działaniem sieci neuronowych z procesora, który zwykle kiepsko sobie z tym radzi, do dedykowanego układu. A jeszcze prościej? Podam przykład, użyteczny. Gdy chcemy wykrywać jakieś konkretne obiekty na obrazie video – ludzi, samochody czy słonie, to wymaga to sporej mocy obliczeniowej i mocno zajmuje procesor. A taki układ robi to sprawnie i nie potrzebuje do tego za dużo energii. Ale oczywiście nie zastąpi procesora w innych zadaniach, bo to układ specjalizowany.
Przejdźmy jednak do praktyki. Opisywałem nie tak dawno mój pierwszy komputer z procesorem Intel N100. Powiem szczerze, że energooszczędne, tanie i całkiem mocne komputerki urzekły mnie i zacząłem je stosować w różnych miejscach, szczególnie tam gdzie Raspberry Pi nie daje rady. Nie odczytajcie tego źle – nadal jestem fanem Raspberry, ale N100 daje więcej w stosunku ceny do mocy. Nie powinno być więc zaskoczeniem, że Corala postanowiłem zainstalować w Mini PC bazującym na Intelu N100.
Konkretnie jest to Firebat T8 Pro z 16GB RAM (DDR5) i 512GB SSD. Mały, szybki, energooszczędny. Poniżej 5W gdy odpoczywa. Nie więcej niż 20W pod pełnym obciążeniem. Zasilanie z 12V, więc łatwo podtrzymać pracę z użyciem zasilacza buforowego. Nie trzeba więc się bawić w nieefektywne UPSy. Przejdźmy jednak od teorii do praktyki i zobaczmy co jest w środku.
Na początek odkręcam 4 wkręty na dole obudowy. Ale niewiele to zmienia, bo widzę odkryty wiatrak, ale Mini PC pozostaje monolitem. W zagłębieniach są 4 kolejne śruby, bo odkręceniu których niewiele się zmienia. No tak, zatrzaski, jak ja ich nie lubię. Trzeba użyć siły i rozchylić nieco boki obudowy, żeby dostać się do środka. Ale jednak pewna doza wyczucie będzie potrzebna, żeby nie urwać kabli od anten WiFi i głośnika, przyklejonych do obudowy i połączonych z płytą delikatnymi kabelkami.
Tak to wygląda w środku. Całkiem zgrabna płytka. Widać demontowalny SSD, który trzeba odkręcić na chwilę, bo pod nim jest karta WiFi, której będę się pozbywał. No tak, gdzieś tego Corala trzeba włożyć, a WiFi jest dla mnie zupełnie zbędne. Nie jestem fanem WiFi, jeżeli tylko sprzęt stoi w jednym miejscu i można podłączyć go przewodowo.
Poszło łatwo. Teraz można wykręcić kartę WiFi. Ja odkleiłem też anteny od obudowy, bo nie będą już potrzebne, a kartę może kiedyś się jeszcze wykorzysta. Chociaż pewnie nie.
Czysto. Rozszerzenia zdemontowane. Teraz w złącze M.2, gdzie wcześniej było WiFi, można zainstalować Google Coral AI.
Instalacja jest banalna. Oczywiście trzeba ponownie wkręcić śrubkę-przedłużkę.
Na to dysk. Potem już tylko pozostaje włożyć płytę w obudowę, wpasować plastik z wiatrakiem, wcisnąć, żeby zaskoczyły zaczepy. Wkręcenie śrubek i założenie spodu to już tylko formalność. Załatwione.
Oprogramowanie
Firebat T8 Pro przychodzi w komplecie z Windowsem 11, ale ja oczywiście od razu zainstalowałem Debiana 12. Ta operacja trwa mniej więcej 10 minut, łączenie ze ściągnięciem plików instalacyjnych. Przy szybkim łączu oczywiście.
Gdy już udało się zalogować, postępowałem zgodnie z instrukcjami producenta. W pierwszej kolejności sprawdziłem wersję kernela. Trochę pro-forma, bo jaki ma być w nowym Debianie, przecież nie stary.
$ uname -r
6.1.0-20-amd64
Zgodnie z przewidywaniami:
$ lsmod | grep apex
nie zwraca nic. Dobry, przewidywany objaw. Teraz trzeba trochę zaufania i już dodaję repozytoria do mojego Debiana:
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
Instalacja pakietów też bez żadnych problemów:
sudo apt-get install gasket-dkms libedgetpu1-std
Dalej dodanie regułu do udev:
sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"apex\"' >> /etc/udev/rules.d/65-apex.rules"
Potem dodanie grupy i użytkownika do grupy:
sudo groupadd apex
sudo adduser $USER apex
I przychodzi moment, kiedy trzeba zrobić reboot systemu. Nie ma problemu, N100 wstaje błyskawicznie. Zaraz potem lspci już potwierdza, że karta jest zainstalowana:
$ lspci -nn | grep 089a
02:00.0 System peripheral [0880]: Global Unichip Corp. Coral Edge TPU [1ac1:089a]
Urządzenie pojawiło się także w systemie w katalogu /dev/:
$ ls -l /dev/apex_0
crw-rw---- 1 root apex 120, 0 Apr 18 14:51 /dev/apex_0
Sukces. Karta jest zainstalowana, moduł jądra działa. Teraz pora zająć się nieco wyższym poziomem. Trzeba ściągnąć bibliotekę pyCoral:
sudo apt-get install python3-pycoral
Niby prosta sprawa, ale to przecież Python, więc bywa, że jest problem z wersjami. I tak było w moim przypadku. W chwili, gdy ja instalowałem pyCorala, wymagał on Pythona3 w wersji poniżej 3.10, a ja miałem nowszy. Dlatego musiałem zrobić downgrade, dochodząc ostatecznie do wersji 3.9:
$ python --version
Python 3.9.19
Dalej poszło już z góry. Po zainstalowaniu programu testowego i zaprezentowaniu mu przykładowego obrazka papugi, zwrócił zgodnie z oczekiwaniami:
Ara macao (Scarlet Macaw): 0.75781
75% peewności, że to Ara macao. Bardzo dobrze.
Co dalej?
I to tyle. Zadanie wykonane. Dalszym etapem była instalacja Frigate, połączenie z kamerami i serwerem MQTT oraz konfiguracja wykrywania osób i samochodów. Ostatecznie spięcie z moim systemem automatyki. Na początek zrobiłem 3 nowe funkcjonalności:
- automatyczne otwieranie furtki, gdy ktoś do niej podchodzi od strony domu
- zapalanie światła przed domem gdy którakolwiek z kamer wykryje obecność człowieka, a nie tylko ruch jak do tej pory
- zapalanie światła na podjeździe, gdy ktoś wejdzie do tej strefy
Całkiem sporo, jak na jedno popołudnie, prawda? Możliwości są dużo większe, a konfiguracja przyjemna. Ale to już temat na inny wpis, jeżeli będzie konkretne zainteresowanie.
Nie wiem jak wywołać konkretne zainteresowanie, ale ja bardzo chętnie bym poczytał dalej o bardziej zaawansowanym wykorzystaniu obrazu z kamer. Czy możliwe jest zrealizowanie czegoś takiego, że np. gdy w godzinie takiej i takiej wykryje żółty samochód ciężarowy to wyślij mi powiadomienie? Ciekawi mnie jak to wszystko można by spiąć. Obecnie mam kamery podpięte do Synology, a oprócz tego w sieci RPi z Home Assistantem, drugie RPi z Domoticzem, Firebat T8 Plus z Proxmox.
Ale w sensie, jakiego „kopa” daje ten Google Coral AI ? Jaka jest różnica z i bez tego układu?
Domyślam się, iż bez niego byłoby wolniej (mniej fps? przetworzonego obrazu) i przy większym wykorzystaniu CPU?
A może tu do pomocy, wystarczył by tylko GPU?