Съдържание:

Система за защита при разпознаване на лица за хладилник с Raspberry Pi: 7 стъпки (със снимки)
Система за защита при разпознаване на лица за хладилник с Raspberry Pi: 7 стъпки (със снимки)

Видео: Система за защита при разпознаване на лица за хладилник с Raspberry Pi: 7 стъпки (със снимки)

Видео: Система за защита при разпознаване на лица за хладилник с Raspberry Pi: 7 стъпки (със снимки)
Видео: 3000+ Common English Words with British Pronunciation 2024, Юли
Anonim
Image
Image
Система за защита при разпознаване на лица за хладилник с Raspberry Pi
Система за защита при разпознаване на лица за хладилник с Raspberry Pi
Система за защита при разпознаване на лица за хладилник с Raspberry Pi
Система за защита при разпознаване на лица за хладилник с Raspberry Pi

Разглеждайки интернет Открих, че цените на системите за сигурност варират от 150 $ до 600 $ и повече, но не всички решения (дори и много скъпите) могат да бъдат интегрирани с други интелигентни инструменти във вашия дом! Например, не можете да настроите охранителна камера на входната си врата, така че тя автоматично да отваря вратата за вас или вашите приятели!

Реших да направя едно просто, евтино и мощно решение, което можете да използвате навсякъде! Има много ръководства за това как да създадете евтини и домашни системи за сигурност, но искам да демонстрирам наистина нетривиално приложение на тези - система за сигурност за хладилник с разпознаване на лица!

Как работи? IP камерата, поставена в горната част на хладилника, сензори (два бутона) откриват, когато човек отвори вратата на хладилника, след което Raspberry Pi прави снимка на това лице (с IP камера), след което я изпраща на Microsoft Face API да анализира изображението и да получи името на лицето. С тази информация Raspberry Pi сканира „списъка за достъп“: ако лицето няма разрешение за достъп до хладилника, Raspberry уведомява собственика по имейл, текстово съобщение и Twitter! (Вижте снимките по -горе)

Защо? Системата ви позволява да контролирате членовете на семейството си, особено когато са на диета или се борят да не ядат след полунощ! Или го използвайте само за забавление!

Нещо повече, всъщност можете да настроите камерата на входната си врата и да конфигурирате системата да отваря вратата, когато вие, членовете на вашето семейство или приятели се приближавате. И това не е краят! Възможностите на приложението са безкрайни!

Нека да започнем!

Стъпка 1: Подготовка

Подготовка
Подготовка

Ще имаш нужда:

  • Raspberry Pi 3 (можете да използвате по-стари версии, но третото поколение има Wi-Fi, така че е много удобно)
  • Бутони
  • Проводници
  • Стар смартфон или Raspberry Pi камера

Първото нещо, което трябва да направите, е да конфигурирате вашия Raspberry Pi. Подробни инструкции как да направите това можете да намерите тук и тук, но ние ще обхванем най -важните стъпки в това ръководство.

  1. Изтеглете Win32 DiskImager от тук (ако използвате Windows)
  2. Изтеглете SD Formatter от тук
  3. Поставете SD картата в компютъра си и я форматирайте с SD Formatter
  4. Изтеглете Raspbian изображение от тук (Изберете „Raspbian Jessie с пиксел“)
  5. Стартирайте Win32 DiskImager, изберете вашата SD карта, посочете пътя към изображението на Raspbian, щракнете върху „Писане“
  6. Поставете SD карта във вашия Raspberry Pi и включете захранването!

Освен това ще трябва да конфигурирате вашия Raspberry Pi да има достъп до системата чрез SSH. В интернет има много инструкции, можете да използвате това например или можете да свържете монитор и клавиатура.

Сега вашият Pi е конфигуриран и сте готови да продължите!

Стъпка 2: Изработка на сензор

Изработване на сензор
Изработване на сензор
Изработване на сензор
Изработване на сензор
Изработване на сензор
Изработване на сензор

Стъпка Описание: В тази стъпка ще направим сензор, който открива кога човек отваря вратата на хладилник и активира Raspberry Pi.

За да го настроите, ще ви трябват 2 -те бутона, които първоначално сте подготвили. Първият бутон ще открива, когато вратата се отвори, вторият бутон ще открие, когато вратата се отвори до точката, когато правим снимка на човек.

  1. Запоявайте проводници към бутоните.
  2. Прикрепете първия бутон към вратата на хладилника, така че да бъде натиснат, когато вратата е затворена (вижте снимката по -горе)
  3. Прикрепете втория бутон към вратата на хладилника, както е показано на снимката по -горе. Този бутон трябва да се отпуска по всяко време, освен когато вратата достигне точката, когато системата прави снимка. За да го настроите, трябва да прикачите нещо към хладилника си, така че този бутон да се натисне, когато вратата се отвори в желаната степен (вижте снимките по -горе).
  4. Прикрепете проводници от бутоните към Raspberry Pi: първият бутон към GPIO 23 и земята, вторият бутон към GPIO 24 и земята (Вижте диаграмата за фризиране).

Забележка: Използвам разклонител BCM (не Board), повече за разликата прочетете тук.

След като се свържете с вашия Raspberry Pi чрез SSH, за да стартирате черупката на python, въведете терминала:

python3

Ако свързвате монитор и клавиатура към Raspberry Pi, просто стартирайте „Python 3 IDLE“от менюто.

Следващата стъпка е да накарате Raspberry Pi да работи с бутоните. Ние ще прикачим специални слушатели към GPIO 23 и 24 пина, които ще слушат за събитие „нарастващ ръб“и „падащ ръб“на тези щифтове. В случай на събитие слушателите ще извикат функциите, които сме дефинирали. „Нарастващ ръб“означава, че бутонът е бил натиснат и сега освободен (първият бутон - вратата се отваря), „падащ ръб“означава, че бутонът е освободен и сега е натиснат (вторият бутон - вратата е достигнала определена точка). Повече за функционалността на бутоните - тук.

Първо импортирайте библиотека, която ни дава достъп до щифтовете:

импортирайте RPi. GPIO като GPIO

Сега дефинирайте специални функции, които ще се извикват при задействане на събитие:

def сензор1 (канал): печат („сензор 1 задействан“) def сензор2 (канал): печат („сензор 2 задействан)

Задайте тип разводка:

GPIO.setmode (GPIO. BCM)

Конфигуриране на щифтове:

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

Прикачете слушатели:

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

Сега можете да го тествате! Ако натиснете бутона 1, ще видите съобщение в терминал „сензор 1 задействан“, бутон 2 ви дава съобщение „сензор 2 задействан“.

Забележка: Когато приключите с експериментирането, не забравяйте да извикате следната функция: GPIO.cleanup ().

Нека настроим още една функция, която се извиква, когато вратата достигне точката, където правим снимка! Можете да го направите сами или да използвате моето изпълнение, което съм приложил тук (sensor.py)

Забележка: sensor.py се използва само за целите на тестването, файловете с пълна функционалност съм приложил към последната стъпка.

Стъпка 3: Конфигурирайте IP камерата

Конфигуриране на IP камера
Конфигуриране на IP камера
Конфигурирайте IP камера
Конфигурирайте IP камера
Конфигуриране на IP камера
Конфигуриране на IP камера

Стъпка описание: Сега ще конфигурираме стария смартфон като IP камера.

Използването на смартфон като IP камера става чрез приложение. Има различни приложения за Android, iOS, Windows Phone, които можете да използвате. Избрах тази, наречена „IP уеб камера“за Android. Това е безплатно приложение и е лесно за конфигуриране.

Стартирайте приложението, отидете на „Предпочитания за видеоклипове“, за да настроите разделителната способност на снимките, които приложението ще предоставя. След това докоснете „Стартиране на сървъра“(Първото изображение по -горе). В долната част на екрана трябва да видите ip адрес на камерата (вижте второто изображение по -горе). В браузъра можете да напишете https://cam_ip_address/photo-j.webp

Накрая прикрепете камерата към хладилника (последното изображение по -горе).

Стъпка 4: Face API

API за лице
API за лице

Стъпка Описание: В тази стъпка ще говорим за Microsoft Face API, който разпознава лица и идентифицира хората.

API на Face на Microsoft е услуга за разпознаване на лица, чрез която можем да анализираме снимки и да идентифицираме хората на тях.

Първо, имате нужда от акаунт в Microsoft Azure. Ако нямате такъв, можете да го създадете безплатно тук.

Второ, отидете на https://portal.azure.com, щракнете върху „Ново“вляво, въведете във формуляра „API за когнитивни услуги“, изберете го и кликнете върху „Създаване“. Или можете да отворите тази връзка. Сега трябва да въведете Име на вашата услуга, да изберете типа абонамент, типа API, от който се нуждаете (в нашия случай това е Face API), местоположение, ниво на ценообразуване, група ресурси и да приемете Правни условия (вижте екранната снимка, добавена към тази стъпка).

Трето, щракнете върху „Всички ресурси“, изберете услугата Face API и вижте статистиката за използване, идентификационни данни и т.н.

Подробности за API на Face могат да бъдат намерени тук, предоставени са примери на различни езици за програмиране. За този проект използваме python. Можете да прочетете документация и да създадете свой собствен набор от функционалности или да използвате предоставения тук (това не е пълният набор от функционалности, предоставени от Microsoft, само точките, които са необходими за този проект). Моите файлове на python са прикрепени към тази стъпка.

Нека преминем към структурата на работа с Face API. За да използваме функционалността „Идентификация“, трябва да създадем библиотека от хора, с помощта на която услугата Face API ще разпознава снимките, направени от приложението. За да го настроите, моля, изпълнете стъпките:

  1. Създайте група
  2. Добавяне на лица към тази група
  3. Добавете лица към тези лица
  4. Влак група
  5. Изпратете снимка с лице, което искате да идентифицирате (трябва да предоставите снимка и идентификатор на групата, в която услугата ще търси кандидати)
  6. Резултат: В отговор ще получите списък с кандидати, които могат да бъдат на снимката, която сте изпратили.

Създадох три файла със специфична функционалност, която позволява работа с групи, единични лица и единични снимки:

  • PersonGroup.py - съдържа функции, които позволяват: създаване на група, получаване на информация за групата, получаване на списък с всичките ви групи, обучение на група и получаване на статут на обучение
  • Person.py - съдържа функции, които позволяват: създаване на човек, получаване на информация за човека, изброяване на всички лица в определена група, добавяне на лица към посочено лице
  • Face.py - съдържа функции, които позволяват: откриване на лице върху изображението, идентифициране на лице, получаване на име на идентифицирано лице

Във файла, наречен „узнаване.py“, предоставям функции, които ви позволяват да проверите дали изображението съдържа лице и да добавите лица към определено лице (автоматично добавя лице от много изображения от определена папка).

Изтеглете файла, прикачен към тази стъпка, разопаковайте го, променете глобалната променлива „KEY“в тези три файла: PersonGroup.py, Person.py и Face.py към вашия собствен ключ, който можете да намерите: portal.azure.com> всички ресурси > услуга face api (или как го нарекохте)> раздел клавиши. Можете да използвате всеки от двата ключа.

Забележка: тук ще обучим услугата Face API да разпознава хората, така че следните действия могат да се извършват от всеки компютър (Raspberry Pi не е необходим за това) - промените се запазват на сървъра на Microsoft.

След като промените KEY, стартирайте Recovery.py и въведете следната команда в черупката на python:

PersonGroup.create ("family", 'fff-fff')) // можете да използвате собствено име и идентификатор за

групово printResJson (PersonGroup.getPersonGroup ('fff-fff'))

Трябва да видите данни за групата, която току -що сте създали. Сега въведете:

printResJson (Person.createPerson ('fff-fff', 'име на човек'))

Сега получавате идентификационен номер на човек. Създайте папка с изображения на този човек, така че всички изображения да съдържат лицето на този човек. Можете да използвате функцията detectFaceOnImages в Recognition.py, която ви показва на кои снимки е разпознато лицето. Сега изпълнете командата:

addFacesToPerson ('папка с изображения', 'идентификатор на човек, който сте получили след предишната команда', 'fff-fff')

След това трябва да обучим услугата си, като въведем следното:

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

Сега нашата група е обучена и е готова да идентифицира човек.

За да проверите човек на изображението, можете:

Face.checkPerson (изображение, 'fff-fff')

В отговор ще получите списък с кандидати и вероятност кой е на снимката.

Забележка: всеки път, когато добавяте лица към човек или човек към група, трябва да обучавате групата!

Стъпка 5: Конфигурация Node-Red

Node-Red конфигурация
Node-Red конфигурация

Стъпка Описание: В тази стъпка ще създадем Node-Red поток, който ще ви уведоми за нарушение на достъпа до вашия хладилник =)

Ако вашият Raspberry Pi работи на Raspbian Jessie през ноември 2015 г. или по-нова версия, не е необходимо да инсталирате Node-Red, защото той вече е предварително инсталиран. Просто трябва да го актуализирате. Моля, използвайте ръководство тук.

Сега трябва да инсталираме Twilio възел на Node-Red, за да можем да задействаме текстово съобщение. Отворете терминала и въведете:

cd ~/.node-rednpm инсталирайте node-red-node-twilio

Повече за възела Twilio тук. След това стартирайте Node-Red, като въведете в терминала:

възел-червен

След това отидете на: https://127.0.0.1:1880/ - ако отворите браузъра на вашия Raspberry Pihttps:// {raspberry_pi_ip}: 1880/ - ако искате да отворите Node -Red редактора от друг компютър

За да знаете ip адреса на raspberry pi използвайте тази инструкция.

Сега трябва да намерите възела Twilio в списъка с възли във вашия Node-Red редактор (обикновено той се появява след „социална“група).

Време е да създадете потока!

Забележка: можете да използвате моя поток, прикрепен към тази стъпка, но не забравяйте да конфигурирате възлите: имейл, twitter и twilio. Прочетете за това по -късно.

Нашият поток започва с възел „уведомяване“, който приема POST заявка от основната ни програма с някои данни за нарушение на достъпа (пример за данните можете да намерите в възела за коментари „за получаване на обекти“). Този възел незабавно отговаря със съобщение "Ok", така че основната програма знае, че данните са получени (Flow: /notify> response with Ok> response). Зеленият възел в долната част с име msg.payload е там за отстраняване на грешки: ако нещо не работи, можете да го използвате.

От първия възел (/нотифициране) данните се разпространяват до "Тема на данните" и "Тема на изображението", където темите "данни" и "изображение" са добавени съответно.

В възела "компилиране" получаваме данни (които получаваме по време на първата стъпка) с темата "данни" и изображение с темата "изображение" (изображението е взето от /home/pi/image.jpg). Тези две съобщения трябва да бъдат компилирани в един обект, но двата обекта се получават по различно време! За да се справим с това, ще използваме функцията „контекст“, която ни позволява да съхраняваме данни между извикванията на функции.

Следващата стъпка е да проверите дали човек от нашия списък за достъп или е непознат (възел checkConditions). В данните, които получаваме, има поле „trustedPerson“: „true“означава, че познаваме този човек, но той/тя е нарушил разрешението за достъп, „false“означава, че лицето е непознато.

Когато резултатът е „истина“, изпращаме известие до Twitter, twilio и имейл; когато резултатът е „невярно“- само имейл и twilio. Създаваме обект за имейл със съобщение, прикачено изображение и тема на имейл, обект за twilio със съобщение. За Twitter добавяме данни към обект, ако „trustedPerson“е вярно. След това изпратете тези три обекта на три различни възли.

Забележка: Ако следният възел не трябва да получава съобщение, ние просто му изпращаме „null“.

Време е да конфигурирате възли за известие!

Twitter Добавете „twitter“възел към потока. Отворете го с двойно щракване. Кликнете върху молив до „Twitter ID“. След това кликнете върху „Щракнете тук, за да удостоверите с Twitter“. Влезте в акаунта си в Twitter и дайте необходимите разрешения на Node-Red.

Имейл Добавете възела „имейл“към потока. Ако не използвате Gmail, ще трябва да промените данните в следните полета - „Сървър“и „Порт“(можете да намерите кой сървър и порт да използвате на страниците за помощ на вашия имейл агент) в противен случай не променяйте тези полета.

  • До> имейл адрес, на който ще се изпращат съобщения
  • Userid> вход от вашия имейл (може би същото като полето „До“)
  • Парола> парола от вашия имейл акаунт
  • Име> име за този възел

Twilio Отидете на https://www.twilio.com/try-twilio и регистрирайте акаунт. Проверете го. Отидете на https://www.twilio.com/console. Кликнете върху „Телефонни номера“(голяма икона #) и създайте безплатен номер. Ако сте извън САЩ, трябва да добавите разрешения за GEO, отидете на https://www.twilio.com/console/sms/settings/geo-pe… и добавете вашата държава.

Сега отидете на редактора Node-Red, добавете възела Twilio, щракнете двукратно върху него, за да конфигурирате и попълните всички полета:

  • Идентификационни данни> Използвайте местни идентификационни данни
  • Twilio> редактиране

    • SID на профила> вземете от тук
    • От> въведете създадения от вас виртуален номер
    • Токен> вземете от тук
    • Име> Twilio
  • Изход> SMS
  • До> вашия телефонен номер
  • Име> име за този възел.

Щракнете върху Разгръщане

Сега вашият поток е готов! Можете да го тествате, като изпратите POST заявка с посочен обект!

Стъпка 6: Съставяне на целия проект

Съставяне на целия проект
Съставяне на целия проект
Съставяне на целия проект
Съставяне на целия проект

Стъпка Описание: В тази стъпка ще съберем всички части заедно и ще ги накараме да работят като отделна система.

С тази стъпка трябва:

  1. Конфигурирайте стария смартфон като ip камера
  2. Имате работещи сензори
  3. Обучен Face API на Microsoft
  4. Конфигуриран поток-червен поток

Сега трябва да подобрим кода, който написахме в стъпка 2. По -конкретно функция process (), която се извиква, когато човек отвори вратата. В тази функция ще направим следното:

  1. Вземете изображение от ip камера и го запазете в „/home/pi/“с името „image.jpg“(функция „fromIpCam“във файл „getImage“)
  2. Вземете името на лицето на това изображение (функция „checkPerson“във файл „разпознаване“)
  3. Проверете разрешението за достъп за това лице (функция „проверка“във файл „достъп“)
  4. Въз основа на резултата от функцията „проверка“съставете съобщение
  5. Изпратете съставено съобщение до Node-Red (функция „toNodeRed“във файл „sendData“)

Забележка: за да видите пълния код на споменатите функции, моля, изтеглете zip файл, прикачен към тази стъпка.

За функцията „fromIpCam“. Тази функция прави GET заявката към вашата ip камера, получава фокусирано изображение в отговор и го записва на посочения от вас път. Трябва да предоставите ip адрес на камерата на тази функция.

За функцията „checkPerson“. Функцията получава път към изображението и групата, в която искате да потърсите човек от снимката като параметри. Първо, той разпознава лице на предоставеното изображение (файл Face.py, функция „откриване“). В отговор той получава идентификатор, ако лицето е открито. След това извиква функция „идентифициране“(файл Face.py), която намира подобни лица в определена група. В отговор той получава идентификатор на човек, ако човек бъде намерен. След това извикайте функцията „лице“(файл Person.py) с идентификатор на човек като параметър, функцията „човек“връща лице с посочен идентификатор, получаваме името на лицето и го връщаме.

Относно функцията „проверка“. Тази функция е поставена във файла „достъп“, където също така поставя „списък за достъп“като глобална променлива (можете да я промените, както искате). Получавайки името на човек от предишната функция, функцията „проверка“сравнява това лице със списъка за достъп и връща резултата.

Забележка: пълният проект е приложен към следващата стъпка.

Стъпка 7: Заключение

В тази стъпка прикачих пълния проект, който трябва да разархивирате и поставите във вашия Raspberry Pi.

За да работи този проект, стартирайте файла „main.py“.

Ако управлявате Raspberry Pi чрез SSH, трябва да стартирате две програми от една обвивка: програма на python и Node-Red. Въведете следното в терминала:

възел-червен

Натиснете „Ctrl + Z“и въведете:

работни места

Виждате процес Node-Red. Погледнете ID на процеса и въведете:

bg

Сега Node-Red трябва да започне да работи във фонов режим. След това отидете в директорията с вашия проект и стартирайте основната програма:

python3 main.py

Забележка: не забравяйте да промените KEY в python файлове (стъпка 4) и идентификационни данни в Node-Red поток (стъпка 5)

Свършен! Вашият хладилник е безопасен!

Надявам се да ви е харесал този неразрешим! Не се колебайте да оставите мислите си в коментари.

Ще съм благодарен, ако гласувате за моя проект =)

Благодаря ти!

Препоръчано: