Obsah:

Bezpečnostní systém rozpoznávání obličeje pro lednici s Raspberry Pi: 7 kroků (s obrázky)
Bezpečnostní systém rozpoznávání obličeje pro lednici s Raspberry Pi: 7 kroků (s obrázky)

Video: Bezpečnostní systém rozpoznávání obličeje pro lednici s Raspberry Pi: 7 kroků (s obrázky)

Video: Bezpečnostní systém rozpoznávání obličeje pro lednici s Raspberry Pi: 7 kroků (s obrázky)
Video: Kamerový systém na vjezdu. Rozpoznání RZ. www.KamerovySystem.cz 2024, Červenec
Anonim
Image
Image
Bezpečnostní systém rozpoznávání obličeje pro ledničku s Raspberry Pi
Bezpečnostní systém rozpoznávání obličeje pro ledničku s Raspberry Pi
Bezpečnostní systém rozpoznávání obličeje pro ledničku s Raspberry Pi
Bezpečnostní systém rozpoznávání obličeje pro ledničku s Raspberry Pi

Při procházení internetu jsem zjistil, že ceny za bezpečnostní systémy se pohybují od 150 $ do 600 $ a výše, ale ne všechna řešení (i ta velmi drahá) lze integrovat s jinými chytrými nástroji u vás doma! Nemůžete například nastavit bezpečnostní kameru u vašich předních dveří, takže automaticky otevře dveře vám nebo vašim přátelům!

Rozhodl jsem se vytvořit jednoduché, levné a výkonné řešení, které můžete použít kdekoli! Existuje mnoho příruček o tom, jak vytvořit levné a domácí bezpečnostní systémy, nicméně chci ukázat jejich skutečně netriviální použití - bezpečnostní systém pro lednici s rozpoznáváním obličeje!

Jak to funguje? IP kamera umístěná na horní straně chladničky, senzory (dvě tlačítka) detekují, když osoba otevře dveře chladničky, poté Raspberry Pi vyfotí tuto osobu (s IP kamerou) a poté ji odešle do Microsoft Face API analyzovat obraz a získat jméno osoby. S těmito informacemi Raspberry Pi skenuje „přístupový seznam“: pokud osoba nemá oprávnění k přístupu do chladničky, upozorní Raspberry majitele prostřednictvím e -mailu, textové zprávy a twitteru! (Viz obrázky výše)

Proč? Tento systém vám umožňuje ovládat členy vaší rodiny, zvláště když drží dietu nebo zápasí s tím, že po půlnoci už nejedí! Nebo ji použijte jen pro zábavu!

Kromě toho můžete skutečně nastavit kameru u předních dveří a nakonfigurovat systém tak, aby otevřel dveře, když se blížíte vy, vaši rodinní příslušníci nebo přátelé. A to není konec! Možnosti aplikace jsou nekonečné!

Pojďme začít!

Krok 1: Příprava

Příprava
Příprava

Budete potřebovat:

  • Raspberry Pi 3 (můžete použít starší verze, ale třetí generace má Wi-Fi, takže je to velmi výhodné)
  • Tlačítka
  • Dráty
  • Starý smartphone nebo Raspberry Pi fotoaparát

První věc, kterou musíte udělat, je nakonfigurovat váš Raspberry Pi. Podrobný návod, jak to udělat, najdete zde a zde, ale my se budeme zabývat nejdůležitějšími kroky v této příručce.

  1. Stáhněte si Win32 DiskImager odtud (pokud používáte Windows)
  2. Stáhněte si SD Formatter odtud
  3. Vložte SD kartu do počítače a zformátujte ji pomocí SD Formatteru
  4. Stáhněte si obrázek Raspbian odtud (vyberte „Raspbian Jessie s pixelem“)
  5. Spusťte Win32 DiskImager, vyberte kartu SD, zadejte cestu k obrázku Raspbian a klikněte na „Napsat“
  6. Vložte kartu SD do svého Raspberry Pi a zapněte napájení!

Kromě toho budete muset svůj Raspberry Pi nakonfigurovat tak, aby měl přístup k systému přes SSH. Na internetu je spousta návodů, můžete použít například toto nebo můžete připojit monitor a klávesnici.

Nyní je vaše Pi nakonfigurováno a jste připraveni pokračovat!

Krok 2: Výroba senzoru

Výroba senzoru
Výroba senzoru
Výroba senzoru
Výroba senzoru
Výroba senzoru
Výroba senzoru

Popis kroku: V tomto kroku vyrobíme senzor, který detekuje, kdy osoba otevře dveře chladničky a aktivuje Raspberry Pi.

K nastavení budete potřebovat 2 tlačítka, která jste původně připravili. První tlačítko detekuje otevření dveří, druhé tlačítko detekuje otevření dveří až do okamžiku, kdy pořizujeme fotografii osoby.

  1. Pájecí vodiče k tlačítkům.
  2. Připojte první tlačítko ke dvířkům chladničky tak, aby se na ně při zavření dvířek zatlačilo (viz obrázek výše)
  3. Připojte druhé tlačítko ke dveřím chladničky, jak je znázorněno na fotografii výše. Toto tlačítko musí být uvolněno vždy, kromě případů, kdy dveře dosáhnou bodu, kdy systém pořídí snímek. Chcete -li jej nastavit, musíte k chladničce něco připevnit, aby bylo toto tlačítko stisknuto při otevření dveří v požadovaném rozsahu (viz fotografie výše).
  4. Připojte kabely z tlačítek k Raspberry Pi: první tlačítko ke GPIO 23 a uzemnění, druhé tlačítko ke GPIO 24 a uzemnění (viz schematický diagram).

Poznámka: Používám pinout BCM (ne Board), více o rozdílu čtěte zde.

Po připojení k Raspberry Pi přes SSH spusťte shell pythonu a zadejte terminál:

python3

Pokud k Raspberry Pi připojujete monitor a klávesnici, spusťte z nabídky „Python 3 IDLE“.

Dalším krokem je, aby Raspberry Pi fungoval pomocí tlačítek. Na piny GPIO 23 a 24 připojíme speciální posluchače, kteří budou na těchto pinech naslouchat událostem „stoupající hrana“a „sestupná hrana“. V případě události budou posluchači volat funkce, které jsme definovali. „Náběžná hrana“znamená, že tlačítko bylo stisknuto a nyní uvolněno (první tlačítko - dveře jsou otevřeny), „sestupná hrana“znamená, že tlačítko bylo uvolněno a nyní stisknuto (druhé tlačítko - dveře dosáhly určitého bodu). Více o funkcích tlačítek - zde.

Nejprve importujte knihovnu, která nám umožní přístup k pinům:

importujte RPi. GPIO jako GPIO

Nyní definujte speciální funkce, které budou vyvolány při spuštění události:

def senzor1 (kanál): tisk („senzor 1 spuštěn“) def senzor2 (kanál): tisk („senzor 2 spuštěn)

Nastavit typ pinoutu:

GPIO.setmode (GPIO. BCM)

Konfigurace pinů:

GPIO.setup (23, GPIO. IN, pull_up_down = GPIO. PUD_UP) GPIO.setup (24, GPIO. IN, pull_up_down = GPIO. PUD_UP)

Připojit posluchače:

GPIO.add_event_detect (23, GPIO. RISING, callback = sensor1, bouncetime = 300) GPIO.add_event_detect (24, GPIO. FALLING, callback = sensor2, bouncetime = 300)

Nyní to můžete vyzkoušet! Pokud stisknete tlačítko 1, uvidíte zprávu na terminálu „senzor 1 spuštěn“, tlačítko 2 vám poskytne zprávu „senzor 2 spuštěn“.

Poznámka: Až budete s experimentováním hotovi, nezapomeňte zavolat následující funkci: GPIO.cleanup ().

Nastavme ještě jednu funkci, která se nazývá, když dveře dosáhnou bodu, kde pořídíme fotografii! Můžete to udělat sami nebo použít moji implementaci, kterou jsem zde připojil (sensor.py)

Poznámka: sensor.py se používá pouze pro testovací účely, soubory s plnou funkčností jsem připojil k poslednímu kroku.

Krok 3: Konfigurace IP kamery

Konfigurace IP kamery
Konfigurace IP kamery
Konfigurace IP kamery
Konfigurace IP kamery
Konfigurace IP kamery
Konfigurace IP kamery

Popis kroku: Nyní nakonfigurujeme starý smartphone jako IP kameru.

Použití smartphonu jako IP kamery se provádí pomocí aplikace. Můžete použít různé aplikace pro Android, iOS a Windows Phone. Vybral jsem ten s názvem „IP Webcam“pro Android. Toto je bezplatná aplikace a snadno se konfiguruje.

Spusťte aplikaci, přejděte na „Předvolby videa“a nastavte rozlišení fotografií, které aplikace poskytne. Poté klepněte na „Spustit server“(první obrázek výše). Ve spodní části obrazovky musíte vidět IP adresu kamery (viz druhý obrázek výše). Do prohlížeče můžete zadat https://cam_ip_address/photo-j.webp

Nakonec připojte fotoaparát k chladničce (poslední obrázek výše).

Krok 4: Face API

Face API
Face API

Popis kroku: V tomto kroku budeme hovořit o rozhraní Microsoft Face API, které rozpoznává obličeje a identifikuje lidi.

Microsoft Face API je služba rozpoznávání tváří, pomocí které můžeme analyzovat fotografie a identifikovat na nich lidi.

Nejprve potřebujete účet Microsoft Azure. Pokud žádný nemáte, můžete si jej zdarma vytvořit zde.

Za druhé, přejděte na https://portal.azure.com, vlevo klikněte na „Nový“, do formuláře zadejte „API pro kognitivní služby“, vyberte jej a klikněte na „Vytvořit“. Nebo můžete otevřít tento odkaz. Nyní musíte zadat Název vaší služby, vybrat typ předplatného, typ API, které potřebujete (v našem případě je to Face API), umístění, cenovou úroveň, skupinu zdrojů a odsouhlasit právní podmínky (viz snímek obrazovky přidaný k tomuto kroku).

Za třetí, klikněte na „Všechny prostředky“, vyberte službu Face API a podívejte se na statistiky využití, přihlašovací údaje atd.

Podrobnosti o Face API najdete zde, jsou uvedeny příklady v různých programovacích jazycích. Pro tento projekt používáme python. Můžete si přečíst dokumentaci a vytvořit si vlastní sadu funkcí, nebo můžete použít tu uvedenou (nejedná se o úplnou sadu funkcí poskytovaných společností Microsoft, ale pouze o body, které jsou pro tento projekt potřeba). K tomuto kroku jsou připojeny mé soubory pythonu.

Přejdeme ke struktuře práce s Face API. Abychom mohli používat funkci „Identifikace“, musíme vytvořit knihovnu lidí, pomocí kterých služba Face API rozpozná fotografie, které aplikace pořizuje. Chcete -li jej nastavit, postupujte takto:

  1. Vytvořte skupinu
  2. Přidat osoby do této skupiny
  3. Přidejte k těmto osobám tváře
  4. Vlaková skupina
  5. Odešlete fotografii s osobou, kterou chcete identifikovat (musíte zadat ID fotografie a skupiny, ve které služba bude hledat kandidáty)
  6. Výsledek: Jako odpověď dostanete seznam kandidátů, kteří mohou být na fotografii, kterou jste odeslali.

Vytvořil jsem tři soubory se specifickými funkcemi, které umožňují pracovat se skupinami, jednotlivci a fotografiemi:

  • PersonGroup.py - obsahuje funkce, které umožňují: vytvořit skupinu, získat informace o skupině, získat seznam všech vašich skupin, trénovat skupinu a získat stav školení
  • Person.py - obsahuje funkce, které umožňují: vytvořit osobu, získat informace o osobě, vypsat všechny osoby v určené skupině, přidat tváře určené osobě
  • Face.py - obsahuje funkce, které umožňují: detekovat obličej na obrázku, identifikovat osobu, získat jméno identifikované osoby

V souboru s názvem "recognition.py" poskytuji funkce, které vám umožňují zkontrolovat, zda obrázek obsahuje obličej, a přidat tváře určené osobě (automaticky přidá obličej z mnoha obrázků ze zadané složky).

Stáhněte si soubor připojený k tomuto kroku, rozbalte jej a změňte globální proměnnou „KEY“v těchto třech souborech: PersonGroup.py, Person.py a Face.py na vlastní klíč, který najdete: portal.azure.com> všechny zdroje > služba face api (nebo jak jste to nazvali)> karta klíče. Můžete použít kterýkoli ze dvou klíčů.

Poznámka: zde budeme trénovat službu Face API, aby rozpoznávala lidi, takže následující akce lze provést z jakéhokoli počítače (Raspberry Pi k tomu není potřeba) - změny se ukládají na server společnosti Microsoft.

Po změně KEY spusťte rozpoznávání.py a do shellu pythonu zadejte následující příkaz:

PersonGroup.create ("rodina", 'fff-fff'))) // můžete použít své vlastní jméno a ID pro

skupina printResJson (PersonGroup.getPersonGroup ('fff-fff'))

Musíte vidět data o skupině, kterou jste právě vytvořili. Nyní zadejte:

printResJson (Person.createPerson ('fff-fff', 'jméno osoby'))

Nyní získáte ID osoby. Vytvořte složku s obrázky této osoby, aby všechny obrázky obsahovaly tvář této osoby. Můžete použít funkci detectFaceOnImages v Nyní spusťte příkaz:

addFacesToPerson ('složka s obrázky', 'ID osoby, které jste získali po předchozím příkazu', 'fff-fff')

Poté musíme vycvičit naši službu zadáním následujícího:

PersonGroup.trainPersonGroup ('fff-fff') printResJson (PersonGroup.getPersonGroupTrainingStatus ('fff-fff'))

Nyní je naše skupina vyškolená a je připravena identifikovat osobu.

Chcete -li zkontrolovat osobu na obrázku, můžete:

Face.checkPerson (obrázek, 'fff-fff')

Jako odpověď dostanete seznam kandidátů a pravděpodobnost, kdo je na fotografii.

Poznámka: pokaždé, když přidáte obličeje k osobě nebo osobě do skupiny, musíte skupinu vycvičit!

Krok 5: Konfigurace Node-Red

Konfigurace Node-Red
Konfigurace Node-Red

Popis kroku: V tomto kroku vytvoříme tok Node-Red, který vás upozorní na narušení přístupu k vaší chladničce =)

Pokud váš Raspberry Pi běží na verzi Raspbian Jessie z listopadu 2015 nebo novější, Node-Red nemusíte instalovat, protože je již předinstalován. Stačí to aktualizovat. Zde prosím použijte manuál.

Nyní musíme do uzlu Red nainstalovat uzel Twilio, abychom mohli spustit textovou zprávu. Otevřete terminál a zadejte:

cd ~/.node-rednpm nainstalovat node-red-node-twilio

Více o uzlu Twilio zde. Poté spusťte Node-Red zadáním do terminálu:

uzlově červená

Poté přejděte na: https://127.0.0.1:1880/ - pokud na svém Raspberry otevřete prohlížeč Pihttps:// {raspberry_pi_ip}: 1880/ - pokud chcete otevřít editor Node -Red z jiného počítače

Chcete -li zjistit IP adresu maliny pi, použijte tento návod.

Nyní musíte najít uzel Twilio v seznamu uzlů ve vašem editoru Node-Red (obvykle se zobrazí po „sociální“skupině).

Je čas vytvořit tok!

Poznámka: můžete použít můj tok připojený k tomuto kroku, ale nezapomeňte nakonfigurovat uzly: e -mail, twitter a twilio. Přečtěte si o tom později.

Náš tok začíná uzlem „upozornit“, který přijímá požadavek POST z našeho hlavního programu s některými údaji o narušení přístupu (příklad dat najdete v uzlu komentáře „o přijímání objektů“). Tento uzel okamžitě odpoví zprávou „Ok“, takže hlavní program ví, že data byla přijata (Flow: /Notify> response with Ok> response). Zelený uzel v dolní části s názvem msg.payload je zde pro účely ladění: pokud něco nefunguje, můžete to použít.

Z prvního uzlu (/upozornění) se data šíří na „Datové téma“a „Téma obrázku“, kde byla přidána témata „data“a „obrázek“.

V uzlu „kompilace“přijímáme data (která získáme během prvního kroku) s tématem „data“a obrázek s tématem „obrázek“(obrázek je převzat z /home/pi/image.jpg). Tyto dvě zprávy by měly být kompilovány do jednoho objektu, ale tyto dva objekty jsou přijímány v jiném čase! Abychom to zvládli, použijeme funkci „kontext“, která nám umožní ukládat data mezi vyvoláním funkcí.

Dalším krokem je zkontrolovat, zda je osoba z našeho přístupového seznamu nebo je cizí (uzel checkConditions). V údajích, které obdržíme, je pole „TrustPerson“: „true“znamená, že tuto osobu známe, ale ona porušila přístupové oprávnění, „false“znamená, že tato osoba je cizinec.

Pokud je výsledek „pravdivý“, odešleme oznámení na twitter, twilio a e -mail; když je výsledek „nepravdivý“- pouze e -mail a twilio. Vytvoříme objekt pro e -mail se zprávou, připojený obrázek a předmět e -mailu, objekt pro twilio se zprávou. Pro twitter přidáváme data do objektu, je -li „TrustPerson“pravdivý. Poté odešlete tyto tři objekty do tří různých uzlů.

Poznámka: Pokud by následující uzel neměl obdržet zprávu, pošleme mu pouze „null“.

Je čas nakonfigurovat uzly pro upozornění!

Twitter Přidejte do toku uzel „twitter“. Otevřete jej dvojitým kliknutím. Klikněte na tužku vedle „Twitter ID“. Poté klikněte na „Kliknutím sem se autentizujete pomocí Twitteru“. Vstupte do svého twitterového účtu a udělte Node-Red potřebná oprávnění.

E -mail Přidejte do toku uzel „e -mail“. Pokud nepoužíváte Gmail, budete muset změnit data v následujících polích - „Server“a „Port“(server a port, které byste měli použít, najdete na stránkách nápovědy svého e -mailového agenta), jinak je neměňte pole.

  • Komu> e -mailová adresa, na kterou budou zprávy zasílány
  • Userid> přihlášení z vašeho e -mailu (možná stejné jako pole „Komu“)
  • Heslo> heslo z vašeho e -mailového účtu
  • Název> název tohoto uzlu

Twilio Přejděte na https://www.twilio.com/try-twilio a zaregistrujte si účet. Ověřte to. Přejděte na https://www.twilio.com/console. Klikněte na „Telefonní čísla“(velká ikona #) a vytvořte si bezplatné číslo. Pokud se nacházíte mimo USA, musíte přidat oprávnění GEO, přejděte na https://www.twilio.com/console/sms/settings/geo-pe… a přidejte svou zemi.

Nyní přejděte do editoru Node-Red, přidejte uzel Twilio, dvojitým kliknutím na něj nakonfigurujte a vyplňte všechna pole:

  • Pověření> Použít místní pověření
  • Twilio> upravit

    • Účet SID> odtud
    • Od> zadejte virtuální číslo, které jste vytvořili
    • Token> vezměte odtud
    • Jméno> Twilio
  • Výstup> SMS
  • Komu> vaše telefonní číslo
  • Název> název tohoto uzlu.

Klikněte na Nasadit

Nyní je váš tok připraven! Můžete to vyzkoušet odesláním požadavku POST se zadaným objektem!

Krok 6: Kompilace celého projektu

Kompilace celého projektu
Kompilace celého projektu
Kompilace celého projektu
Kompilace celého projektu

Popis kroku: V tomto kroku dáme dohromady všechny části a necháme je fungovat jako samostatný systém.

V tomto kroku musíte:

  1. Nakonfigurujte starý smartphone jako IP kameru
  2. Mají funkční senzory
  3. Vyškolené rozhraní Microsoft Face API
  4. Konfigurovaný tok Node-Red

Nyní musíme vylepšit kód, který jsme napsali v kroku 2. Konkrétněji funkce process (), která se volá, když osoba otevře dveře. V této funkci provedeme následující:

  1. Získejte obrázek z IP kamery a uložte jej do „/home/pi/“s názvem „image.jpg“(funkce „fromIpCam“v souboru „getImage“)
  2. Získejte jméno osoby na tomto obrázku (funkce „checkPerson“v souboru „rozpoznávání“)
  3. Zkontrolujte přístupové oprávnění pro tuto osobu (funkce „zkontrolovat“v souboru „přístup“)
  4. Na základě výsledku funkce „kontrola“sestavte zprávu
  5. Odeslat složenou zprávu na Node-Red (funkce „toNodeRed“v souboru „sendData“)

Poznámka: Chcete -li zobrazit úplný kód uvedených funkcí, stáhněte si soubor zip připojený k tomuto kroku.

O funkci „fromIpCam“. Tato funkce vytvoří požadavek GET na vaši ip kameru, v reakci na něj zaostří obraz a uloží jej na vámi určenou cestu. K této funkci musíte zadat IP adresu kamery.

O funkci „checkPerson“. Funkce získá cestu k obrázku a skupině, ve které chcete jako parametry vyhledat osobu z fotografie. Nejprve detekuje obličej na poskytnutém obrázku (soubor Face.py, funkce „detekovat“). V odpovědi dostane ID, pokud byla detekována tvář. Poté zavolá funkci „identifikovat“(soubor Face.py), která vyhledá podobné osoby v zadané skupině. V reakci na to dostane ID osoby, pokud je osoba nalezena. Poté zavoláme funkci „person“(soubor Person.py) s ID osoby jako parametrem, funkce „person“vrátí osobu se zadaným ID, dostaneme jméno osoby a vrátíme ji.

O funkci „zkontrolovat“. Tato funkce je umístěna v souboru „access“, kde je také umístěn „access list“jako globální proměnná (můžete ji libovolně upravovat). Získání jména osoby z předchozí funkce, funkce „kontrola“porovná tuto osobu s přístupovým seznamem a vrátí výsledek.

Poznámka: celý projekt je připojen k dalšímu kroku.

Krok 7: Závěr

V tomto kroku jsem připojil celý projekt, který byste měli rozbalit a umístit na svůj Raspberry Pi.

Aby tento projekt fungoval, spusťte soubor „main.py“.

Pokud ovládáte Raspberry Pi přes SSH, musíte spustit dva programy z jednoho shellu: program python a Node-Red. Do terminálu zadejte následující:

uzlově červená

Stiskněte „Ctrl + Z“a zadejte:

pracovní místa

Viděli jste proces Node-Red. Podívejte se na ID procesu a zadejte:

bg

Nyní musí Node-Red začít pracovat na pozadí. Poté přejděte do adresáře se svým projektem a spusťte hlavní program:

python3 main.py

Poznámka: nezapomeňte změnit KEY v souborech pythonu (krok 4) a přihlašovací údaje v toku Node-Red (krok 5)

Hotovo! Vaše lednička je v bezpečí!

Doufám, že se vám toto neřešitelné líbilo! Neváhejte zanechat svou mysl v komentářích.

Ocenil bych, kdybyste hlasovali pro můj projekt =)

Děkuji!

Doporučuje: