Подход к созданию механизма блокировки безопасности на основе графического интерфейса и голосового управления на основе распознавания лиц с использованием Python

В своих недавних статьях я исследовал множество интересных фактов о компьютерном зрении и его приложениях. В моей последней статье я попытался показать интересное применение компьютерного зрения через небольшое приложение с графическим интерфейсом на основе OpenCV. В настоящее время мы собираемся изучить применение компьютерного зрения, с которым мы все очень часто сталкивались в фильмах и, возможно, в нашей повседневной жизни. В этой статье мы поговорим о механизме безопасности, основанном на распознавании лиц. Я добавил в это приложение механизм голосового управления и графический пользовательский интерфейс, чтобы обеспечить плавное и автоматизированное ощущение.

Теперь мы знакомы с нашей целью. Итак, давайте проверим библиотеки и функции, которые нам понадобятся для создания нашего приложения, и давайте немного изучим их, прежде чем погрузиться в наше приложение. Мы будем использовать библиотеку OpenCV для обнаружения глаз и лиц.

Мы будем использовать библиотеку Tkinter для графического интерфейса. Мы будем использовать Каскады Хаара и реализовывать их с помощью функций OpenCV. Для нашего приложения нам понадобятся haarcascade_eye.xml и haarcascade_frontalcatface.xml. Мы подробно обсуждали эти библиотеки и их работу в моей последней статье. Вы можете проверить ссылку, если хотите. Двигаясь дальше, для целей распознавания и сравнения лиц нашего приложения будет использоваться библиотека python face_recognition. Мы поговорим об этом чуть позже. Для речи у нас есть PythonGTTS library. GTTS означаетпреобразование текста в речь Google. Мы будем использовать Библиотеку распознавания речи Python для распознавания голоса. Для базы данных я использовал MySQL. Я использую XAMPP для сервера MySQL.

Теперь сосредоточимся на библиотеке Face_recognition. Эта библиотека будет работать в основе приложения. Эта библиотека разработана для решения задач в области распознавания лиц. Теперь давайте сосредоточимся на реальном факте. Как вы думаете, как мы узнаем всех людей по их лицам? Ну, это довольно простой ответ, потому что лица разные, то есть все они выглядят по-разному. Но вопрос в том, что мы подразумеваем под «выглядеть иначе» или как мы понимаем эту разницу? Теперь ответ таков: мы понимаем, потому что у каждого лица есть некоторые уникальные черты, которые в виде комбинации отличают каждое из наших лиц, например, размер глаз, длина лица и т. д. Функции библиотеки распознавания лиц используют этот подход для распознавания лиц. Они количественно определяют особенности данного лица и создают 128-мерный вектор. Другими словами, они извлекают серию из 128 измерений лица, чтобы представить заданное изображение лица на основе измерений. В обычных случаях классификации мы используем нейронную сеть для получения метки для определенного изображения, здесь мы получим 128-мерное векторное кодирование, которое мы сохраним и сравним с неизвестным изображением, чтобы прийти к выводу, используя алгоритм машинного обучения о независимо от того, представляют ли изображения одно и то же лицо. Теперь я попытаюсь вкратце обсудить работу алгоритма.

  1. Сначала он получает изображение и ищет лицо. После этого он преобразует цветное изображение в черно-белое. Теперь он пытается сфокусироваться на каждом пикселе изображения, чтобы наблюдать за соседними пикселями.

Он пытается найти направление, в котором изображение становится темнее или светлее, и отмечает его стрелкой.

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

2. Иногда бывает так, что мы получаем фотографии с бокового профиля. Таким образом, если фото профиля сбоку и фото профиля спереди одного и того же человека, они не совпадают. Здесь алгоритм использует алгоритм оценки ориентира лица. Он выбирает определенные 68 точек на заданном изображении лица и пытается извлечь их, чтобы построить лицо и сравнить два профиля.

3. На этом этапе алгоритм кодирует изображение в серию из 128 значений измерений, чтобы создать 128-мерный вектор для представления лица или его количественной оценки. Этот метод называется Deep Metric Learning. Он использует хорошо обученную глубокую нейронную сеть для получения кодировки. Модель обучается на наборе из почти 3 миллионов изображений.

Он использует «тройной дождевой набор». Он использует 3 изображения. Два изображения, содержащие лица одного и того же человека, и одно изображение, содержащее другое лицо. Теперь каждое из изображений производит 128-дневное измерение. Результаты сравниваются, и нейронная сеть настраивается, чтобы приблизить измерения одних и тех же изображений и отдалить измерения другого.

Для ознакомления вы можете посетить оригинальную статью здесь.

В библиотеке есть функция face_encodings, которая возвращает 128-мерную кодировку лица.

face_recognition.api.face_encodings(face_image, known_face_locations=None, num_jitters=1, model='small')

Мы будем использовать это для создания кодировок лиц. У нас также есть функция compare_faces() для предоставления нам результатов.

face_recognition.api.compare_faces(известные_кодировки_лиц, код_лиц_для_проверки, допуск=0,6)

Я использовал допуск только как 0,6. если вы считаете, что это не дает должных результатов, вы можете уменьшить допуск, чтобы сделать его более строгим.

Итак, теперь давайте перейдем к нашему приложению. Итак, мы сначала создадим поле регистрации, в котором будут поля имени, электронной почты и разрешений. Разрешения как «Да» или «Нет» для обозначения доступа. Таким образом, мы также можем отклонить человека, установив для разрешения значение «Нет». Теперь у нас будет серверная часть MySQL для хранения этих данных для каждого пользователя. Итак, в нашей базе данных будет 4 поля: Имя пользователя, Электронная почта, Разрешение и ссылка на фото. Не волнуйтесь, мы придем к полю file_link. Теперь у нас будет две папки: папка «reg_image» для хранения зарегистрированных изображений и «unreg_image» для незарегистрированных. Итак, после того, как мы заполним поле регистрации, мы будем перенаправлены в окно, где будет создан и сохранен в файле набор из 15 изображений определенного человека. Другими словами, в файле будет набор из 15 изображений. Каждый файл будет посвящен каждому человеку и сохранен с именем пользователя этого человека. В папке «Reg_images» будут все файлы. Поэтому после завершения этого процесса мы обновим ссылку на файл или общее расширение файла, возвращаемое функцией, в поле Photo_link нашей базы данных.

Теперь, хотя весь этот метод будет выполняться администратором, создание набора данных будет автоматизированной функцией с голосовым управлением. Таким образом, будет функция read_image(), которая будет проверять каждое изображение, захваченное во время формирования набора, чтобы убедиться, что лицо и глаза могут быть правильно обнаружены на каждом изображении набора. Может случиться так, что из-за плохого освещения все испортится, а мы в этот момент не осознаем. Таким образом, это своего рода двойная проверка. Если лицо и глаза не распознаются, функция дает голосовую подсказку отрегулировать свет и повторить попытку, отклонив изображение, в противном случае предлагает перейти к следующему изображению. Он запрашивает после завершения набора 15 изображений. Теперь наши ссылки обновлены, и мы готовы решить, кто войдет, а кто нет.

Это подводит нас к другому этапу. Теперь человек подходит и говорит «открой», что при обнаружении распознавателем речи говорит ему стоять на месте перед камерой или подсказывает, что она не может понять. Как только это произойдет, наша функция щелкнет изображение и сохранит его в папке «Unreg» с датой и временем. Затем мы берем изображение и начинаем сравнивать его с каждым изображением в нашей «reg_folder» по файлам, используя функцию compare_faces(), которую мы обсуждали выше. Как только мы получаем совпадение, он возвращает ссылку или расширение файла, в котором мы нашли совпадение. Скажем, файл ABCD имеет совпадающее изображение. поэтому мы возвращаем расширение этого файла. Мы можем запросить нашу базу данных, используя это имя, чтобы получить имя пользователя из ссылки на файл, или наше имя_файла также является именем пользователя. Так что в любом случае его можно вернуть. Если совпадение найдено, функция выдает голосовую подсказку «Добро пожаловать, $user_name», в противном случае сообщает, что совпадение не найдено, и следует связаться с администратором.

Я пытался сохранить это основное. Если вы хотите улучшить функциональность, вы можете работать в нескольких местах. Я удаляю изображение из папки «Unreg» после завершения сравнения. Вы можете сохранить его в какой-нибудь другой папке, чтобы вести учет времени прихода людей. Вы также можете позволить приближающемуся человеку сообщить имя пользователя, чтобы функция могла запросить базу данных, чтобы проверить, существует ли такой пользователь. Если это так, он может затем щелкнуть изображение и сравнить его с изображениями соответствующего файла, чтобы проверить, соответствует ли изображение. Это существенно сократит временные затраты. Я взял набор из 15 изображений для ссылки на каждого человека. Это число является чистой оценкой, вы можете взять что угодно.

Итак, надеюсь, вы поняли работу приложения. Давайте перейдем к коду.

Этот код используется для создания окна регистрации графического интерфейса, похожего на следующее изображение.

В коде есть проверки ошибок, такие как проверка шаблонов электронной почты. Он также проверяет, существует ли уже имя пользователя. Далее переходим к созданию набора данных изображения.

Этот код вызывает функцию create_file, которая вызывает функцию, создающую набор изображений. Элемент управления изображением — это окно графического интерфейса, которое управляет всем процессом и вызывает функцию изображения (имя). Здесь параметр «name» — это имя пользователя. Поэтому он обновляет photo_link в нашей базе данных в соответствии с именем пользователя.

Теперь давайте посмотрим на функцию создания набора.

Теперь эта функция вызывает функцию захвата для стимуляции камеры и захвата изображений для формирования набора. Здесь мы видим, в строке 8 мы формируем файл в папке «reg_images». Строка 12 является оперативной. Строки с 14 по 18 предназначены для выполнения подсказки. Точно так же после создания набора данных строка 31 является запросом на подтверждение, а строки с 33 по 37 используются для создания запроса.

Этот код активирует камеру и кликает по изображению. Он поддерживает счетчик, который закрывается, когда мы достигаем 15. Теперь, в строке 48, мы видим read_image(), который подтверждает, что изображение правильно щелкнуто, т. е. лицо и глаза обнаружены.

Эта функция используется для обнаружения. он возвращает 1, если все обнаружены, иначе -1, как вы можете видеть, если длина массива глаз или массива лиц равна 0, это означает, что они не обнаружены, поэтому возвращается -1.

Если мы перейдем к Capture_image.py, мы увидим реализацию голосового суфлера в каждом случае.

Это наша административная часть. Теперь переходим к контрольной части.

В итоге вот наши результаты

Как мы видим, внутри папки «reg_image» был создан файл с именем пользователя «Abhijit98», как мы отправили в функцию create_file.py.

Файл Abhijit98 содержит 15 изображений пользователя, как мы видели в коде.

Функция open_control обнаруживает «открытый» вызов с помощью распознавателя речи. Если он обнаруживает вызов, он предлагает оставаться неподвижно лицом к камере, как мы видим в строке 23. Он запускает метод захвата, который проверяет, обнаружено ли какое-либо лицо в камере.

Функция пытается обнаружить лицо. После захвата изображение сохраняется в «unreg_image» с записью даты и времени. Затем он снова вызывает read_image(), чтобы проверить, обнаружены ли лицо и глаза на изображении. Если да, он вызывает функцию folder_check(), чтобы пройти через базы данных, чтобы найти совпадение, в противном случае голосовые подсказки повторить попытку.

Эта функция извлекает все файлы из нашей базы данных и вызывает функцию распознавания для каждого файла и нашего нового неизвестного изображения. Эта функция распознавания является нашей оригинальной функцией распознавания лиц.

Это наша функция распознавания лиц. Он берет наши наборы данных и находит их кодировку, берет неизвестное изображение и находит его кодировку. Затем в строке номер 14 он вычисляет результаты. Если результат True, возвращается 1. Теперь, если мы перейдем к функции file_hadler, мы увидим встроенный 20, если результат равен 1, имя пользователя извлекается из ссылки, и приветствие запрашивается с использованием имени пользователя, в противном случае приближающемуся человеку предлагается связаться с офисом.

Вывод

Это обзор того, как можно создать систему распознавания видеонаблюдения. Я надеюсь, что вы найдете это полезным.

Простым языком

Проявите любовь, подписавшись на наш канал YouTube!