Описание задачи 📄

❄️ Создайте программу, которая выполняет указанную ниже задачу при распознавании определенного лица.

📌 Когда он распознает ваше лицо, то -
👉 Он отправляет почту на ваш почтовый идентификатор, написав, что это лицо your_name.
👉 Во-вторых, он отправляет сообщение WhatsApp вашему другу, это может быть что угодно.

📌 Когда он распознает второе лицо, это может быть лицо вашего друга или члена семьи.
👉 Создайте экземпляр EC2 в AWS с помощью интерфейса командной строки.
👉 Создайте том EBS объемом 5 ГБ и прикрепите его к экземпляру.

В этой статье показано, как легко справиться с этой задачей.

Для распознавания лиц здесь мы используем предварительно созданный каскадный классификатор Хаара. Каскады Хаара можно использовать для обнаружения объектов любого типа, если для них есть соответствующий файл XML. Вы даже можете создавать свои собственные файлы XML с нуля, чтобы определять любой тип объекта, который вам нужен.

Теперь давайте импортируем XML-файл NumPy и haar cascade. Вы можете получить это любое фронтальное обнаружение лица отсюда: https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

На первом этапе мы обнаруживаем лицо с помощью XML-файла Haar Cascade, а затем конвертируем эти изображения в серую форму и далее обрезаем изображение таким образом, чтобы было видно только лицо. Кроме того, инициализация Camera (0) означает, что наш код Python будет использовать внутреннюю веб-камеру.

Фрагмент кода приведен ниже:

Затем веб-камера соберет 100 образцов изображений. Для этого используется операция счетчика, а затем он сохранит файл по указанному пути, как показано ниже.

Обучим модель

Следующим шагом является обучение модели с помощью LBPH Face Recognizer. Это один из самых простых алгоритмов поиска узора на изображении.

Гистограмма локального двоичного узора (LBPH) - это очень эффективный оператор текстуры, который маркирует пиксели изображения, устанавливая пороговое значение окрестности каждого пикселя, и рассматривает результат как двоичное число.

Ниже приведен фрагмент кода

После завершения обучения он будет выводиться следующим образом

Последний шаг - проверка обученной модели. На этом этапе он запускает камеру, обнаруживает лицо и сопоставляет его с моделью, которая была создана ранее, и сравнивает ее с данными изображений / образцов лиц, которые были собраны ранее.

При сравнении нашей модели в реальном времени с текущим видео, она покажет текст на изображении, который узнал вас или нет, и покажет процент точности (показатель достоверности) / процент сходства текущего пользователя с ранее собранным лицом .

После обнаружения реального лица, на котором он был обучен, он отправит Mail и текст Whatsapp на указанный номер. Кроме того, он запустит экземпляр AWS EC2, затем создаст дополнительный том EBS объемом 8 ГБ из интерфейса командной строки и присоединит его к запущенному в данный момент экземпляру EC2.

Ниже приведен пример фрагмента кода:

импорт ОС

импорт cv2

подпроцесс импорта

импорт потоковой передачи

импортировать numpy как np

импортировать sendmail как sd

face_classifier = cv2.CascadeClassifier («haarcascade_frontalface_default.xml»)

def face_detector (img, size = 0.5):

# Преобразовать изображение в оттенки серого

серый = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)

Faces = face_classifier.detectMultiScale (серый, 1.3, 5)

если лица есть ():

вернуть img, []

для (x, y, w, h) в гранях:

cv2.rectangle (img, (x, y), (x + w, y + h), (0,255,255), 2)

roi = img [y: y + h, x: x + w]

roi = cv2.resize (roi, (200, 200))

вернуть img, roi

# Открой вебкамеру

cap = cv2.VideoCapture (0)

email_sent = Ложь

в то время как True:

ret, frame = cap.read ()

изображение, лицо = face_detector (кадр)

пытаться:

лицо = cv2.cvtColor (лицо, cv2.COLOR_BGR2GRAY)

# Передать лицо модели прогнозирования

# «Результаты» состоят из кортежа, содержащего метку и значение достоверности

results = ajmal_model.predict (лицо)

# harry_model.predict (лицо)

если результаты [1] ‹500:

уверенность = int (100 * (1 - (результаты [1]) / 400))

display_string = str (уверенность) + «% уверен, что это пользователь»

cv2.putText (изображение, отображаемая_строка, (100, 120), cv2.FONT_HERSHEY_COMPLEX, 1, (255,120,150), 2)

если уверенность ›90:

cv2.putText (изображение, «Эй, Аджмал», (250, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (0,255,0), 2)

cv2.imshow («Распознавание лиц», изображение)

если не email_sent:

print («Отправка электронной почты»)

email_sent = Верно

file_name_path = «./faces/email/» + «ajmal» + «.jpg»

cv2.imwrite (имя_файла_путь, лицо)

t1 = threading.Thread (цель = sd.sendmail)

t1.start ()

print («Запуск EC2 Instnace»)

ec2_launching = «aws ec2 run-instance - image-id ami-0ad704c126371a549 - count 1 - instance-type t2.micro - key-name summer»

subprocess.call (ec2_launching, shell = True)

print («Получение идентификатора экземпляра запущенного в данный момент EC2»)

instance_id = subprocess.getoutput («aws ec2 description-instance - query« sort_by (Reservations []. Instances [], & LaunchTime] [- 1]. [InstanceId] »- выходной текст»)

печать (instance_id)

print («Получение зоны доступности текущего запущенного инстанса EC2»)

instance_availability_zone = subprocess.getoutput («aws ec2 description-instance - query« sort_by (Reservations []. Instances [], & LaunchTime ») [- 1]. [Placement.AvailabilityZone]» - выходной текст »)

печать (instance_availability_zone)

print («Создание EBS размером 5 ГБ»)

subprocess.call («aws ec2 create-volume - availability-zone {0} - size 5» .format (instance_availability_zone), shell = True)

print («Получение идентификатора тома EBS»)

volume_id = subprocess.getoutput («aws ec2 description-volume - запрос« Volumes [-1]. [VolumeId] »- выходной текст»)

печать (volume_id)

print («Присоединение вновь созданного тома EBS к ранее запущенному EC2 Instnace»)

subprocess.call (‘aws ec2 attach-volume - device / dev / xvdj - instance-id {0} - volume-id {1}’. format (instance_id, id_volume), shell = True)

print («Успешно прикрепленный том EBS с экземпляром EC2»)

еще:

cv2.putText (изображение, «Я не знаю, кто вы?», (250, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (0,0,255), 2)

cv2.imshow («Распознавание лиц», изображение)

Кроме:

cv2.putText (изображение, «Лицо не найдено», (220, 120), cv2.FONT_HERSHEY_COMPLEX, 1, (0,0,255), 2)

cv2.putText (изображение, «ищу лицо», (250, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (0,0,255), 2)

cv2.imshow («Распознавание лиц», изображение)

проходят

если cv2.waitKey (1) == 13: # 13 - это клавиша ввода

ломать

cap.release ()

cv2.destroyAllWindows ()

Итак, мы успешно выполнили задачу с помощью распознавания лиц.

Для получения более подробной информации посетите эту ссылку на GitHub: https://github.com/ajmalmohammedn/summer_program_2021.git

Спасибо!