Чудили ли сте се някога как Snapchat точно прилага различни филтри върху лицето ви? Вашият смартфон прави ли магия, когато се отключва с помощта на чертите на лицето ви? Не, вие просто гледате разпознаването на лица в действие.
Разпознаването на лица е технология с изкуствен интелект, която може да идентифицира човешки лица в цифрово изображение или видео. Открийте как можете да създадете програма за разпознаване на лица в реално време в под 25 реда код с легендарния алгоритъм Haar Cascade.
Какво представлява каскадата Хаар?
Haar Cascade е алгоритъм за откриване на обекти, въведен от Пол Виола и Майкъл Джоунс за откриване на лица в изображения или видеоклипове. Каскадна функция се обучава с помощта на много положителни и отрицателни изображения, които по-късно могат да бъдат използвани за идентифициране на всеки обект или лице в други медии. Тези обучени файлове са налични в OpenCV GitHub хранилище.
Използвайки подхода на плъзгащ се прозорец, прозорец с фиксиран размер преминава през изображение отляво надясно, отгоре надолу. На всяка фаза прозорецът спира и класифицира дали областта съдържа лице или не.
OpenCV, инструмент за компютърно зрение, работи с предварително обучен каскаден модел на Хаар, за да класифицира функциите. Всяка фаза проверява пет функции: две ръбови характеристики, две линии и една четири правоъгълна характеристика.
При наблюдение областта на очите изглежда по-тъмна от областта на бузите, докато областта на носа изглежда по-светла от областта на очите. Можете да визуализирате тези функции по следния начин.
Използвайки тези функции и изчислението на пикселите, алгоритъмът идентифицира повече от 100 000 точки от данни. След това можете да използвате алгоритъм на Adaboost, за да подобрите точността и да отхвърлите неподходящите функции. При много итерации този подход минимизира процента на грешка и увеличава теглото на характеристиката, докато постигне приемлива точност.
Техниката на плъзгащия се прозорец обаче спира, ако конкретен тестов случай се провали и е скъпо от изчислителна гледна точка. За да разрешите това, можете да приложите концепцията за каскадата от класификатори. Вместо да прилага всички функции в един единствен прозорец, този подход ги групира и прилага на етапи.
Ако прозорецът не успее на първия етап, процесът го отхвърля, в противен случай продължава. Това води до драстично намаляване на броя на операциите за изпълнение и го прави жизнеспособен за използване за приложения в реално време.
Работен процес на разпознаване на лица
Следвайте този алгоритъм, за да създадете вашата програма за разпознаване на лица:
- Заредете каскадния алгоритъм за фронтално лице на Haar.
- Инициализирайте камерата.
- Четете кадри от камерата.
- Преобразувайте цветни изображения в нива на сивото.
- Вземете координатите на лицето.
- Начертайте правоъгълник и поставете съответното съобщение.
- Показване на изхода.
Какво е OpenCV?
OpenCV е библиотека за компютърно зрение и машинно обучение с отворен код. Разполага с над 2500 оптимизирани алгоритми за различни приложения. Те включват разпознаване на лица/обекти, разпознаване, класификация и много други.
Поверителност на вашите лицеви данни е отделна грижа. Стотици известни компании като Google, IBM и Yahoo използват OpenCV в своите приложения. Някои хора, които имат за цел да запазят данните си поверителни, демонстрираха има начини да избегнете лицевото разпознаване.
За да инсталирате OpenCV в Python, използвайте командата:
пип Инсталирай opencv-python
Как да създадете програма за разпознаване на лица с помощта на Python
Следвайте тези стъпки, за да създадете детектор за лице:
Този примерен код, заедно с файла с алгоритъма на Haar Cascade, е наличен в a GitHub хранилище и е безплатен за използване под лиценза на MIT.
- Изтеглете Haar Cascade Frontal Face XML по подразбиране файл и го поставете на същото място като вашата програма Python.
- Импортирайте библиотеката OpenCV.
# импортиране на необходимите библиотеки
импортиране cv2 - Съхранявайте файла с алгоритъма на Haar Cascade Frontal Face за лесно справяне.
# зареждане на файла с алгоритъм за случаи на haar в променливата alg
alg = "haarcascade_frontalface_default.xml" - Използвайте класа CascadeClassifier, за да заредите XML файл в OpenCV.
# предаване на алгоритъма на OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Заснемете видеото от камерата. Предайте 0 към Видеозапис() функция за използване на вашата основна камера. Ако сте прикрепили външна камера, можете да използвате последователни номера 1, 2 и т.н., за да я използвате вместо нея.
# заснемане на видео емисия от камерата
cam = cv2.VideoCapture (0) - Настройте безкраен цикъл за четене на входа на камерата кадър по кадър. The Прочети() функцията връща два параметъра. Първата стойност е от тип boolean, показваща дали операцията е успешна или не. Вторият параметър съдържа действителната рамка, с която ще работите. Съхранявайте тази рамка в img променлива.
докатоВярно:
_, img = cam.read() - Задайте текста по подразбиране, който да се показва като Лицето не е разпознато. Когато бъде открита, актуализирайте стойността на тази променлива.
текст = "Лицето не е разпознато"
- Входящите данни, получени от реалния свят, са цветни във формат BGR. BGR означава синьо, зелено и червено. Това създава много обработка за приложенията за компютърно зрение. За да намалите това, използвайте формат в сива скала.
Предайте формата на рамката и кода за преобразуване, COLOR_BGR2GRAY, да се cvtColor() за промяна на всеки кадър от видеото от цветен в сива скала.# конвертирайте всеки кадър от BGR в Grayscale
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Използвайте detectMultiScale() за откриване на лица. Този метод приема три параметъра като вход. Първо е изходното изображение, grayImg. Вторият параметър е scaleFactor. Това указва колко трябва да намалите размера на изображението при всеки мащаб на изображението. Използвайте стойността по подразбиране 1,3 като коефициент на мащабиране. Колкото по-висок е коефициентът на мащабиране, толкова по-малко стъпки и по-бързо изпълнение. Съществува обаче и по-голяма вероятност от липсващи лица. Третият параметър е minNeighbors. Това указва колко съседи трябва да има всеки кандидат правоъгълник, за да го запази. Колкото по-висока е стойността, толкова по-малък е шансът за фалшив положителен резултат, но това също означава пропускане на неясни следи от лицето.
# откриване на лица с помощта на Haar Cascade
лице = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Когато откриете лице, получавате четири координати. x представлява координатата x, y представлява координатата y, w представлява ширината и h представлява височината. Актуализирайте текста до Разпознато лице и начертайте правоъгълник, използвайки тези координати. Цветът на правоъгълника е зелен (BGR) формат с дебелина два пиксела.
# нарисувайте правоъгълник около лицето и актуализирайте текста на Разпознато лице
за (x, y, w, h) в лицето:
текст = "Разпознато лице"
cv2.правоъгълник(img, (х, г), (х + w, г + ч), (0, 255, 0), 2) - По желание отпечатайте текста на изходната конзола. Показване на текста на екрана с помощта на заснетия кадър като източник, текст, както е получен в горния текст, шрифт стил FONT_HERSHEY_SIMPLEX, коефициент на мащабиране на шрифта 1, син цвят, дебелина от два пиксела и тип линия AA.
# показване на текста върху изображението
печат(текст)
изображение = cv2.putText (img, текст, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Покажете прозореца със заглавието Разпознаване на лица и изображението. Използвай чакащ ключ() метод за показване на прозореца за 10 милисекунди и проверка за натискане на клавиш. Ако потребител натисне Esc ключ (ASCII стойност 27), излезте от цикъла.
# покажете изходния прозорец и натиснете клавиша за излизане, за да излезете
cv2.imshow("Разпознаване на лица", изображение)
ключ = cv2.waitKey (10)ако ключ == 27:
прекъсвам - Накрая освободете обекта на камерата от програмата Python и затворете всички прозорци.
камера.освобождаване()
cv2.destroyAllWindows()
Разпознаване на лица с помощта на Python в действие
Когато се вижда лице, трябва да видите резултат като този:
Когато няма лице, ще видите съобщение като това:
Ограничения на разпознаването на лица чрез каскаден алгоритъм на Haar
Въпреки че този алгоритъм е лек, с малък размер на модела и работи бързо, има няколко ограничения:
- При видео в реално време лицето трябва да е в полезрението на камерата. Ако лицето е твърде далеч, твърде близо или твърде наклонено, алгоритъмът не успява да улови характеристиките.
- Това е алгоритъм за лицево лице, така че не можете да откриете странични изгледи.
- Високи фалшиво положителни резултати. Често разпознава области като лица, въпреки че няма лице.
- Трябва да има оптимални условия на осветление. Прекомерното или слабото осветление пречи на точността на алгоритъма.
Многото приложения на разпознаването на лица
Разпознаването на лица има широк спектър от приложения в днешния свят. Можете да го използвате за разпознаване на лица в смартфони, домове, превозни средства и имиграционни контролно-пропускателни пунктове. Разпознаването на лица вече е често срещано при видеонаблюдението, филтрите в социалните медии и автоматичното проследяване на лица в кинематографията.
Това е само началото на тази прекрасна технология. С напредъка може да сме в състояние да идентифицираме изчезнали деца, да хванем престъпници и да предотвратим престъпления като кражба на самоличност.