Небольшая демонстрация по распознаванию лиц
Распознавание лиц сыграло жизненно важную роль в решении некоторых проблем в нашем обществе. Начиная с целей безопасности, он также используется для идентификации преступников, а также может выступать в качестве доказательства для некоторых вещей, связанных с конфиденциальностью, таких как кредитные карты и т. д. Он также используется для идентификации двойных изображений. Это позволяет избежать некоторых серьезных недостатков других технологий.
Чаще всего это можно сделать с помощью некоторых библиотек машинного обучения, таких как opencv, которые можно реализовать с помощью некоторых основных языков программирования. Целью распознавания лиц является сравнение изображений с использованием различных факторов. Они используют различные методы, такие как HOG-для сравнения двух гистограмм (градиенты, ориентированные на гистограмму), SVM (машина опорных векторов) и т. д. для сравнения обрезанных изображений лица.
Можно ли легко обнаружить лицо. Ответ ДА. Сегодня технологии перешли к машинному обучению и искусственному интеллекту. Даже машина может принимать решения самостоятельно. В области когнитивной науки крупные компании, такие как Apple, Google (Face API), разработали собственные API для своих приложений. Например: Facebook использует распознавание лиц, чтобы найти всех, кто использует наше изображение в своих профилях. Эти API имеют эффективность до 97% и дают лучший результат, чем другие.
Также есть несколько бесплатных API с открытым исходным кодом и несколько платных API, из которых мы можем использовать их в нашем приложении.
Сделайте это практичным
Обнаружить лицо?
Для лучшего понимания давайте проведем небольшую фазу распознавания лиц.
Прежде чем мы перейдем к коду, нам нужно уточнить термины, используемые на этапе обнаружения.
Классификаторы?
Классификаторы - это не что иное, как классификация на положительные (изображение лица) или отрицательные (не изображение лица). Opencv состоит из нескольких классификаторов, они обучены сотням и тысячам изображений лиц и имеют возможность принимать новые решения путем обучения посредством сопоставления признаков. Основные используемые классификаторы:
- Классификатор Хаара
Он имеет классификатор для лица, глаз, всего тела и т. д. Мы должны выбрать классификатор из списка данных классификаторов. Он классифицирует изображение лица и изображение без лица в качестве вывода.
- классификатор LBPF
Локальные двоичные шаблоны. Он преобразует изображения в пиксели, использует манипуляции с массивами и преобразует их в правильные гистограммы. На основе этих гистограмм он классифицирует изображения.
Оттенки серого?
Изображение в оттенках серого — это изображение, в котором значение каждого пикселя представляет только количество света (т. е. информацию об интенсивности).
Здесь можно легко понять разницу между обычным изображением и изображением в градациях серого.
Необходимое условие:
- Язык программирования для выполнения (я использовал Python 3, дистрибутив Anaconda)
- Установить открытую библиотеку cv
Если вы используете Python 3, введите Pip install opencv-contrib-python в приглашении Anaconda.
TestRun.py
Получите код здесь:
import cv2//здесь открытый пакет cv импортируется в python
imagePath = "d:/facedetec/groupfie.jpeg" // установка изображения
cascPath = «haarcascade_frontalface_default.xml» // путь используемого классификатора
faceCascade = cv2.CascadeClassifier(cascPath)//инициализация классификатора
image = cv2.imread(imagePath)// Чтение изображения по его пути
grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)//преобразование изображения в формат оттенков серого
facedetect = faceCascade.detectMultiScale(
оттенки серого,//формат изображения
scaleFactor=1.1,//компенсирует некоторые факторы
minNeighbors=5
minSize=(30, 30),
флаги = cv2.cv.CV_HAAR_SCALE_IMAGE
)
//Поскольку он работает со скользящим окном, задается размер каждого окна (minNeighbors minSize
print("Найдено",len(faces),"Faces")
//Выводит количество лиц, обнаруженных с помощью этого классификатора haarcascade
для (x, y, w, h) в лицах:
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
//зарисовка изображения прямоугольником с координатами x и y и шириной и высотой прямоугольников
cv2.imshow("Найдены лица", изображение)
//отображает изображение с нарисованными лицами
cv2.waitKey(0)
//когда пользователь нажимает клавишу, окно закрывается
Исходное изображение: original.jpg
Вывод:
Все стало проще благодаря технологиям.
«Легкий способ обучения — понять его»