Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воган Ли - Python для хакеров (Библиотека программиста) - 2023.pdf
Скачиваний:
5
Добавлен:
07.04.2024
Размер:
14.76 Mб
Скачать

Глава 10. Ограничение доступа по принципу распознавания лиц      383

Глава 9. Как различить своих и чужих

Размытие лиц

practice_blur.py import cv2 as cv

path = "C:/Python372/Lib/site-packages/cv2/data/"

face_cascade = cv.CascadeClassifier(path + 'haarcascade_frontalface_alt.xml') cap = cv.VideoCapture(0)

while True:

_, frame = cap.read()

face_rects = face_cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=3)

for (x, y, w, h) in face_rects:

face = cv.blur(frame[y:y + h, x:x + w], (25, 25)) frame[y:y + h, x: x + w] = face

cv.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 2)

cv.imshow('frame', frame)

if cv.waitKey(1) & 0xFF == ord('q'): break

cap.release()

cv.destroyAllWindows()

Глава 10. Ограничение доступа по принципу распознавания лиц

Усложняем проект: добавление пароля и видеозахвата

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

challenge_video_recognize.py

"""Распознаем лицо капитана Демминга в видеокадре.""" import cv2 as cv

names = {1: "Demming"}

# Устанавливаем путь к каскадам Хаара

path = "C:/Python372/Lib/site-packages/cv2/data/"

detector = cv.CascadeClassifier(path + 'haarcascade_frontalface_default.xml')

#Устанавливаем распознаватель лиц и загружаем обученные данные. recognizer = cv.face.LBPHFaceRecognizer_create() recognizer.read('lbph_trainer.yml')

#Подготавливаем камеру.

384      Решения для практических проектов

cap = cv.VideoCapture(0) if not cap.isOpened():

print("Could not open video device.")

##cap.set(3, 320) # Ширина кадра. ##cap.set(4, 240) # Высота кадра.

while True:

_, frame = cap.read()

gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) face_rects = detector.detectMultiScale(gray,

scaleFactor=1.2,

minNeighbors=5)

for (x, y, w, h) in face_rects:

#Изменяем размер входного изображения, приближая его к размеру обучающего изображения.

gray_resize = cv.resize(gray[y:y + h, x:x + w], (100, 100), cv.INTER_LINEAR)

predicted_id, dist = recognizer.predict(gray_resize) if predicted_id == 1 and dist <= 110:

name = names[predicted_id] else:

name = 'unknown'

cv.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2) cv.putText(frame, name, (x + 1, y + h -5),

cv.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 0), 1) cv.imshow('frame', frame)

if cv.waitKey(1) & 0xFF == ord('q'): break

cap.release()

cv.destroyAllWindows()