Title: 16. Príklady
Course: AI Projects for Students (SK) > Section: AI S rPI 5

1. 16. Príklady
16.1     Vytvorte si vlastný bezpečnostný systém "detektor rodičov"
Prehľad projektu: Premýšľali ste niekedy, kto sa vkráda do vašej izby, keď nie ste nablízku? V tomto projekte si postavíte inteligentný bezpečnostný systém – často nazývaný "Detektor rodičov", aby ste zistili, kto presne bol vo vašej izbe.
Dosiahnete to kombináciou Raspberry Pi, pohybového senzora a kamery, ktorá automaticky spúšťa a nahráva videozáznam akýchkoľvek votrelcov.
Krok 1: Zhromaždite svoj hardvér
Na zostavenie tejto automatizovanej bezpečnostnej kamery budete potrebovať tri hlavné hardvérové komponenty:
·        Raspberry Pi: Toto funguje ako mozog vášho projektu, spracováva signály a spúšťa kód.
·        Pasívny infračervený (PIR) pohybový senzor: Táto súčasť funguje ako "oči" vášho systému, deteguje zmeny infračerveného tepla, aby rozpoznala, keď sa osoba pohybuje v blízkosti.
·        Modul kamery Raspberry Pi: Toto je zariadenie, ktoré zachytí video dôkazy o votrelcovi.

Krok 2: Pochopte a naladite PIR senzor
Pred zapojením čohokoľvek káblom je potrebné nastaviť fyzické nastavenia priamo na PIR senzore. Ak sa pozriete na zadnú stranu PIR modulu, uvidíte dva oranžové komponenty s malými krížovými zásuvkami, ktoré dokonale pasujú na skrutkovač Philips.
Tieto oranžové ciferníky sa nazývajú potenciometre a umožňujú vám manuálne upravovať správanie senzora:
·        Citlivosť: Určuje, koľko pohybu je potrebné na spustenie senzora.
·        Čas (oneskorenie): Určuje, ako dlho zostáva senzor "aktivovaný" po detekcii pohybu pred jeho resetovaním.
Počiatočné nastavenie: Aby tento projekt fungoval najlepšie, použite skrutkovač na nastavenie potenciometra citlivosti na absolútne maximum a časový potenciometer na absolútne minimum. Tieto nastavenia môžete neskôr vždy upraviť a zmeniť, ak zistíte, že senzor je príliš citlivý alebo zostáva zapnutý príliš dlho.
Krok 3: Bezpečne zapojte komponenty
Teraz je čas pripojiť váš hardvér k Raspberry Pi. Kľúčové pravidlo: Vždy sa uistite, že máte Raspberry Pi úplne vypnuté a odpojené od siete pred pripojením hardvéru.
1. Pripojte kameru: Opatrne vložte plochý kábel kamerového modulu do samostatného portu fotoaparátu na Raspberry Pi.

2. Pripojiť PIR senzor: PIR senzor musí poslať svoje pohybové dáta do Raspberry Pi. Dátový výstupný pin PIR senzora pripojíte priamo k pinu označenému GPIO 4 na vašej doske Raspberry Pi. (Budete tiež musieť pripojiť napájacie (VCC) a zemné (GND) piny na príslušné 5V a GND piny na Pi).

Krok 4: Napíšte bezpečnostný softvér (Python)
Keď máte hardvér zapojený, zapnite Raspberry Pi. Otvorte programovacie prostredie s názvom Thonny, vytvorte nový súbor a okamžite ho uložte ako parent_detector.py.
Aby náš hardvér fungoval, musíme importovať konkrétne knižnice. Použijeme MotionSensor z knižnice gpiozero na spracovanie PIR senzora a triedu Camera z knižnice picamzero na ovládanie Camera Module.
Logika kódexu:
1. Kontinuálne monitorovanie: Používame while True: slučka, čo je nekonečná slučka, ktorá udržiava program neustále kontrolovať pohyb.
2. Čakanie na akciu: Program používa pir.wait_for_motion() na pozastavenie kódu, kým senzor nezaznamená pohyb. Keď je pohyb zistený, vytlačí správu na obrazovku.
3. Nahrávanie: Kamera začína zachytávať video pomocou funkcie cam.start_recording().
4. Zastavenie: Nechceme nahrávať prázdnu miestnosť navždy. Kód používa pir.wait_for_no_motion() na čakanie, kým narušiteľ odíde, a potom bezpečne zastaví video súbor pomocou cam.stop_recording().
Riešenie kritickej chyby (problém prepísania): Ak jednoducho povieme kamere, aby súbor uložila ako intruder.mp4, zakaždým, keď do miestnosti vstúpi nová osoba, staré video bude úplne prepísané a vymazané. Aby sme si zabezpečili videozáznam všetkých (otravných rodičov alebo súrodencov), potrebujeme dynamický názov súboru. Môžeme použiť časovú knižnicu v Pythone na automatické zistenie aktuálneho dátumu a času a vloženie ich do názvu súboru videa.
Začnite s týmto kódom a vašimi obľúbenými AI nástrojmi na jeho testovanie:
Toto napíšte do svojho parent_detector.py súboru:
1. z gpiozero importovať MotionSensor
 2. z picamzero import fotoaparátu
 3. Čas importu
 4.
 5. # 1. Inicializovať hardvér
 6. # Nastavte PIR senzor na GPIO 4
 7. pir = MotionSensor(4)
 8.
 9. # Vytvoriť objekt kamery na ovládanie modulu
10. cam = Camera()
11.
12. tlač ("Bezpečnostný systém ozbrojený. Čakanie na votrelcov...")
13.
14. # 2. Hlavná bezpečnostná slučka
15. zatiaľ čo je pravda:
16. #     Program sa tu zastaví, kým nie je zistený pohyb
17.     pir.wait_for_motion()
18. tlač ("UPOZORNENIE: Zistený pohyb!")
19.
20.     #3. Vygenerujte jedinečný názov súboru
21.     # Tým vzniká reťazec ako "20231025-143000" (RokMesiacDeň-HodinaMinútaSekunda)
22. časová značka = čas.strftime("%Y%m%d-%H%M%S")
23. názov súboru = f"intruder_{časová značka}.mp4"
24.
25.     # Začnite nahrávať videozáznam do nového spisu
26.     print(f"Nahrávanie videa: {názov súboru}")
27. kamera.start_recording(názov súboru)
28.
29.     #4. Počkaj, kým bude miestnosť opäť prázdna
30.     pir.wait_for_no_motion()
31. tlač ("Návrh zastavený.")
32.
33.     # Zastavte nahrávanie, aby ste video súbor dokončili a bezpečne uložili
34. kamera.stop_recording()
35. print("Systém sa vracia do pohotovostného režimu.")
Teraz, keď je váš kód úplne napísaný a hardvér bezpečne pripojený, je čas otestovať, či váš rodičovský detektor naozaj funguje v reálnom svete! Najprv kliknite na tlačidlo Run vo vašom programovacom prostredí Thonny, aby ste spustili skript. Keď program beží a čaká, zámerne mávnite rukou priamo pred PIR pohybovým detektorom, aby ste simulovali votrelca vstupujúceho do miestnosti. Okamžite sa pozrite na obrazovku počítača; mali by ste vidieť v oblasti konzoly vytlačené slová "Detekcia pohybu!", čo potvrdzuje, že senzor úspešne spustil kameru na začatie nahrávania.
Po spustení alarmu je potrebné otestovať vypínací mechanizmus. Vystúpte z zorného poľa senzora, zostaňte úplne nehybní alebo jemne zakryte bielu kupolu senzora rukou. Počkajte pár sekúnd, kým vám konzola oznámi, že pohyb sa zastavil a systém sa vráti do pohotovostného režimu. To znamená, že program bezpečne dokončil a uzavrel video súbor. Nakoniec otvorte správcu súborov na Raspberry Pi a prejdite do presne toho istého priečinka, kde ste uložili parent_detector.py skript. Teraz by ste mali vidieť úplne nový .mp4 video súbor, ktorý bude mať v názve jedinečný dátum a čas, presne tak, ako sme naprogramovali. Dvakrát kliknite na tento novo vytvorený súbor, aby ste si pozreli zaznamenané dôkazy, overili kvalitu videa a uistili sa, že váš uhol kamery dokonale zachytáva vchod!
Ďalšie obrázky:

Zdroj: https://www.electronicwings.com/raspberry-pi/pir-motion-sensor-interfacing-with-raspberry-pi
Zdroj: https://thepihut.com/products/pir-camera-case-for-raspberry-pi-4-3
16.2   Rozpoznávanie odhadu pózy YOLO
V tomto sprievodcovi si ich pripravíme s OpenCV a modelovou rodinou YOLO na Raspberry Pi 5. Pozrieme sa na niekoľko rôznych dostupných modelov YOLO, ako ich optimalizovať pre plynulejšie FPS, a tiež na to, ako využiť kľúčové dáta generované modelom, aby ste mohli do svojho ďalšieho projektu implementovať odhad pózy. Toto je jeden z najzábavnejších sprievodcov, aké sme za poslednú dobu vytvorili, tak poďme na to!
Na sledovanie tohto návodu budete potrebovať:
·        Raspberry Pi 5 – Tu bude fungovať buď model s 4GB alebo 8GB. Aj keď by sa to technicky dalo urobiť na Pi 4, je oveľa pomalší ako Pi 5 a nebola by to príjemná skúsenosť, a práve preto sme na Pi 4 netestovali
·        Pi Camera - Používame Camera Module V3
·        Adaptér – Pi 5 má kábel CSI kamery inej veľkosti a váš fotoaparát môže mať starší hrubší, takže sa oplatí to skontrolovať. Camera Module V3 BUDE potrebovať jeden
·        Cooling Solution – Používame aktívny chladič (počítačové videnie naozaj potlačí vaše Pi na maximum)
·        Napájanie
·        Micro SD karta - Minimálne 16GB veľkosti
·        Monitor a kábel Micro-HDMI na HDMI
·        Myš a klávesnica
Montáž hardvéru
Čo sa týka montáže hardvéru, tu je to dosť ľahké. Hrubšiu stranu kábla pripojte ku fotoaparátu a tenšiu stranu k Pi 5. Tieto konektory majú záložku – zdvihnite ich a potom vložte kábel do slotu. Keď už tam pekne a správne sedí, zatlačte západku späť dole, aby ste kábel upevnili.
Len dávajte pozor, pretože tieto konektory fungujú len v jednej orientácii a môžu byť krehké, preto ich neohnite príliš (trochu je v poriadku).
Inštalácia Pi OS
Najprv musíme nainštalovať Pi OS na micro SD kartu. Pomocou Raspberry Pi Imageru vyberte Raspberry PI 5 ako zariadenie, Raspberry Pi OS (64-bit) ako operačný systém a vašu microSD kartu ako úložné zariadenie.
Rovnaký postup ako pri PiRacer.
Nastavenie virtuálneho prostredia a inštalácia knižníc
S príchodom Bookworm OS v roku 2023 sme teraz povinní používať virtuálne prostredia (venv), pretože ide o izolovaný priestor na Pi, kde môžeme experimentovať bez rizika poškodenia zvyšku nášho Pi OS alebo projektov. V tomto sprievodcovi máme všetky potrebné príkazy a inštrukcie.
Na vytvorenie virtuálneho prostredia otvorte nové okno terminálu a zadajte:
python3 -m venv --system-site-packages yolo_pose
Po vytvorení venv môžeme do neho vstúpiť zadaním:
zdroj yolo_pose/bin/aktivovať
Po tomto zobrazení uvidíte názov vo virtuálnom prostredí naľavo od zeleného textu – to znamená, že v ňom správne pracujeme. Ak budete niekedy potrebovať znovu vstúpiť do tohto prostredia (napríklad ak zatvoríte okno terminálu, prostredie opustíte), stačí znova zadať zdrojový príkaz vyššie.

Teraz, keď pracujeme vo virtuálnom prostredí, môžeme začať inštalovať potrebné balíky. Najprv sa uistite, že PIP (správca balíkov v Pythone) je aktuálny zadaním troch nasledujúcich riadkov:
Aktualizácia Sudo APT
sudo apt install python3-pip-y -y
inštalácia pip -U pip
Potom nainštalujte balík Ultralytics s:
PIP inštalujte ultralytics[export]
Milí ľudia z Ultralytics patria medzi kľúčových vývojárov a údržbárov najnovších modelov YOLO. Tento ich balík urobí veľkú časť ťažkej práce a nainštaluje OpenCV, ako aj všetku potrebnú infraštruktúru na prevádzku YOLO.
Tento proces tiež nainštaluje pomerne veľké množstvo ďalších balíkov, a preto je náchylný na zlyhania. Ak vaša inštalácia zlyhá (zobrazí sa celá stena červeného textu), stačí znova zadať inštalačný riadok Ultralytics a malo by to pokračovať. V zriedkavých prípadoch môže byť potrebné inštalačnú linku niekoľkokrát zopakovať.
Keď sa dokončí inštalácia, reštartuj Raspberry Pi. Ak chcete byť pokročilým používateľom, môžete to urobiť zadaním do shellu:
Reštart
Máme ešte jednu úlohu, a tou je nastaviť Thonny tak, aby používal virtuálne prostredie, ktoré sme práve vytvorili. Thonny je program, z ktorého budeme spúšťať všetok náš kód, a potrebujeme, aby fungoval z toho istého venv, aby mal prístup ku knižniciam, ktoré sme nainštalovali.
Prvýkrát, keď otvoríte Thonny, môže to byť v zjednodušenom režime a v pravom hornom rohu uvidíte "prepnúť do bežného režimu". Ak je to prítomné, kliknite naň a reštartujte Thonny zatvorením.
Teraz vstúpte do ponuky možností interpretera výberom Spustiť > Konfigurovať interpreta.  Pod možnosťou spustiteľného súboru v Pythone je tlačidlo s tromi bodkami. Vyberte ho a prejdite do Python spustiteľného súboru vo virtuálnom prostredí, ktoré sme práve vytvorili.

Ten bude umiestnený pod home/pi/yolo_pose/bin a v tomto súbore budete musieť vybrať súbor s názvom "python3". Stlačte ok a teraz budete pracovať v tomto venv.
Kedykoľvek otvoríte Thonny, automaticky bude fungovať mimo tohto prostredia. Prostredie, z ktorého pracujete, môžete zmeniť výberom z rozbaľovacieho menu pod Python spustiteľným súborom v tom istom menu možností interpretera. Ak chcete opustiť virtuálne prostredie, vyberte option bin/python3.
Odhad bežiaceho postoja
Teraz, keď máme nainštalované knižnice a Thonny pracuje vo virtuálnom prostredí, môžeme spustiť náš skript na odhad polohy. Pokračujte a rozbalte zip priečinok projektu (stiahnite si ho zo servera) na pohodlné miesto, napríklad na desktop. Tam nájdete prvý scenár, ktorý použijeme "pose demo.py". Otvor to, Thonny, a stlač veľké zelené tlačidlo behu. Pri prvom spustení sa môže automaticky nainštalovať niekoľko potrebných vecí navyše a po pár sekundách by sa mal zobraziť náhľad s vaším odhadom pózy.
Malo by sa tu diať niekoľko vecí. Po prvé, YOLO sa bude snažiť detegovať ľudí, a ak jedného rozpozná, nakreslí okolo neho rámeček s hodnotením dôvery na vrchu. Dôležité je, že bude umiestňovať body tam, kde si myslí, že sú niektoré podstatné miesta na vašom tele (tieto sa nazývajú kľúčové body), a nakreslí medzi nimi čiary, aby odhadol postoj a orientáciu osoby. V pravom hornom rohu bude tiež FPS, na ktorom tento systém beží (čo o chvíľu zlepšíme).
A to je všetko! S týmito niekoľkými krokmi už máme odhad pozície na Pi!
Zmena modelov YOLO
Doteraz používame YOLO11 a jednou z krás tohto balíka Ultralytics je, že môžeme jednoducho vymeniť jeden riadok v kóde a úplne zmeniť model. Môžeme to použiť na spustenie pokročilejšieho modelu YOLO11, alebo dokonca staršieho modelu. Všetko, čo potrebujete zmeniť, je tento riadok tu v nastavení:
# Načítaj náš model YOLO11
model = YOLO("yolo11n-pose.pt")
Táto séria momentálne používa nano model, ktorý je najmenší, najmenej výkonný, ale najrýchlejší model YOLO11, a môžeme túto radu zmeniť tak, aby používala jednu z rôznych veľkostí tohto modelu, zmenou jedného písmena za "11", ako je znázornené vpravo. Ak zmeníte tento riadok na inú veľkosť modelu a spustíte ho, skript automaticky stiahne nový model (čo môže byť v stovkách Mb pre väčšie modely).
Rozdiel medzi týmito modelmi je kompromisom medzi výkonom odhadu pózy a FPS. Čím väčší model, tým lepšie odhaduje časti tela, ktoré kamera nemusí vidieť, ako aj zložitejšie uhly a snímky s viacerými ľuďmi, avšak môžete očakávať, že sa spracuje len jeden snímok každých 10 sekúnd! V ďalšom kroku to zvýšime.
Nano model na druhej strane beží najrýchlejšie, dosahuje približne 1,5 FPS bez optimalizácie, ale nemá výpočtový výkon väčších modelov. Čo sa týka odhadu pózy, väčšinou stačí nano model, pretože zvyčajne stačí na vaše potreby, ale ak potrebujete niečo výkonnejšie, stále zvyšujte veľkosť modelu, aby vyhovovala vašim potrebám.
V tejto línii môžeme tiež zmeniť verziu YOLO running. Ak chcete, môžete sa vrátiť k staršiemu modelu, alebo použiť novší. Tento sprievodca bude časom zastaraný a ak Ultralytics vydá YOLO13, mali by ste jednoducho zmeniť radu na nasledujúcu, aby ste mohli začať používať novšiu verziu YOLO:
# Načítaj náš model YOLO11
model = YOLO("yolo13n-pose.pt")
Zvyšovanie rýchlosti spracovania
Existujú dve veci, ktoré môžeme urobiť na zvýšenie FPS na Pi a najefektívnejším spôsobom je konvertovať model do formátu nazývaného NCNN. Toto je formát modelu, ktorý je viac optimalizovaný na procesory založené na ARM, ako sú Raspberry Pi. Otvorte skript s názvom "ncnn conversion.py" a nájdete nasledujúce:
z importu ultralytics  YOLO
# Načítaj model YOLO11n PyTorch
model = YOLO("yolo11n-pose.pt")
# Exportovať model do formátu NCNN
model.export(format="ncnn", imgsz=640) # vytvára 'yolov11n-pose_ncnn_model'
Na použitie tohto skriptu najprv špecifikujte model, ktorý chcete konvertovať. Toto používa rovnaké pomenovávacie konvencie, o ktorých sme hovorili v predchádzajúcej časti. Potom sa ako výstupný formát a rozlíšenie špecifikuje formát modelu "ncnn". Zatiaľ nechajte predvolenú hodnotu 640. Prvýkrát, keď spustíte tento skript, stiahne sa ešte niekoľko ďalších vecí, ktoré potrebuje, ale skutočná konverzia by mala trvať len pár sekúnd.
Keď je to hotové, v priečinku, v ktorom sa nachádzajú skripty, nájdete nový priečinok s názvom niečo ako "yolo11n-pose_ncnn_model". Skopírujte názov tohto súboru a vráťte sa k nášmu demo skriptu z predtým.
Teraz musíte skriptu povedať, aby použil tento model, ktorý sme vytvorili, zmenou modelovej línie na názov priečinka, ktorý práve vytvoril. Malo by to vyzerať asi takto:
# Načítaj náš model YOLO11
model = YOLO("yolo11n-pose_ncnn_model")