Чудили ли сте се някога как Snapchat точно прилага различни филтри върху лицето ви? Вашият смартфон прави ли магия, когато се отключва с помощта на чертите на лицето ви? Не, вие просто гледате разпознаването на лица в действие.

Разпознаването на лица е технология с изкуствен интелект, която може да идентифицира човешки лица в цифрово изображение или видео. Открийте как можете да създадете програма за разпознаване на лица в реално време в под 25 реда код с легендарния алгоритъм Haar Cascade.

Какво представлява каскадата Хаар?

Haar Cascade е алгоритъм за откриване на обекти, въведен от Пол Виола и Майкъл Джоунс за откриване на лица в изображения или видеоклипове. Каскадна функция се обучава с помощта на много положителни и отрицателни изображения, които по-късно могат да бъдат използвани за идентифициране на всеки обект или лице в други медии. Тези обучени файлове са налични в OpenCV GitHub хранилище.

Използвайки подхода на плъзгащ се прозорец, прозорец с фиксиран размер преминава през изображение отляво надясно, отгоре надолу. На всяка фаза прозорецът спира и класифицира дали областта съдържа лице или не.

instagram viewer

OpenCV, инструмент за компютърно зрение, работи с предварително обучен каскаден модел на Хаар, за да класифицира функциите. Всяка фаза проверява пет функции: две ръбови характеристики, две линии и една четири правоъгълна характеристика.

При наблюдение областта на очите изглежда по-тъмна от областта на бузите, докато областта на носа изглежда по-светла от областта на очите. Можете да визуализирате тези функции по следния начин.

Използвайки тези функции и изчислението на пикселите, алгоритъмът идентифицира повече от 100 000 точки от данни. След това можете да използвате алгоритъм на Adaboost, за да подобрите точността и да отхвърлите неподходящите функции. При много итерации този подход минимизира процента на грешка и увеличава теглото на характеристиката, докато постигне приемлива точност.

Техниката на плъзгащия се прозорец обаче спира, ако конкретен тестов случай се провали и е скъпо от изчислителна гледна точка. За да разрешите това, можете да приложите концепцията за каскадата от класификатори. Вместо да прилага всички функции в един единствен прозорец, този подход ги групира и прилага на етапи.

Ако прозорецът не успее на първия етап, процесът го отхвърля, в противен случай продължава. Това води до драстично намаляване на броя на операциите за изпълнение и го прави жизнеспособен за използване за приложения в реално време.

Работен процес на разпознаване на лица

Следвайте този алгоритъм, за да създадете вашата програма за разпознаване на лица:

  1. Заредете каскадния алгоритъм за фронтално лице на Haar.
  2. Инициализирайте камерата.
  3. Четете кадри от камерата.
  4. Преобразувайте цветни изображения в нива на сивото.
  5. Вземете координатите на лицето.
  6. Начертайте правоъгълник и поставете съответното съобщение.
  7. Показване на изхода.

Какво е OpenCV?

OpenCV е библиотека за компютърно зрение и машинно обучение с отворен код. Разполага с над 2500 оптимизирани алгоритми за различни приложения. Те включват разпознаване на лица/обекти, разпознаване, класификация и много други.

Поверителност на вашите лицеви данни е отделна грижа. Стотици известни компании като Google, IBM и Yahoo използват OpenCV в своите приложения. Някои хора, които имат за цел да запазят данните си поверителни, демонстрираха има начини да избегнете лицевото разпознаване.

За да инсталирате OpenCV в Python, използвайте командата:

пип Инсталирай opencv-python

Как да създадете програма за разпознаване на лица с помощта на Python

Следвайте тези стъпки, за да създадете детектор за лице:

Този примерен код, заедно с файла с алгоритъма на Haar Cascade, е наличен в a GitHub хранилище и е безплатен за използване под лиценза на MIT.

  1. Изтеглете Haar Cascade Frontal Face XML по подразбиране файл и го поставете на същото място като вашата програма Python.
  2. Импортирайте библиотеката OpenCV.
    # импортиране на необходимите библиотеки
    импортиране cv2
  3. Съхранявайте файла с алгоритъма на Haar Cascade Frontal Face за лесно справяне.
    # зареждане на файла с алгоритъм за случаи на haar в променливата alg
    alg = "haarcascade_frontalface_default.xml"
  4. Използвайте класа CascadeClassifier, за да заредите XML файл в OpenCV.
    # предаване на алгоритъма на OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Заснемете видеото от камерата. Предайте 0 към Видеозапис() функция за използване на вашата основна камера. Ако сте прикрепили външна камера, можете да използвате последователни номера 1, 2 и т.н., за да я използвате вместо нея.
    # заснемане на видео емисия от камерата
    cam = cv2.VideoCapture (0)
  6. Настройте безкраен цикъл за четене на входа на камерата кадър по кадър. The Прочети() функцията връща два параметъра. Първата стойност е от тип boolean, показваща дали операцията е успешна или не. Вторият параметър съдържа действителната рамка, с която ще работите. Съхранявайте тази рамка в img променлива.
    докатоВярно:
    _, img = cam.read()
  7. Задайте текста по подразбиране, който да се показва като Лицето не е разпознато. Когато бъде открита, актуализирайте стойността на тази променлива.
     текст = "Лицето не е разпознато"
  8. Входящите данни, получени от реалния свят, са цветни във формат BGR. BGR означава синьо, зелено и червено. Това създава много обработка за приложенията за компютърно зрение. За да намалите това, използвайте формат в сива скала.
    # конвертирайте всеки кадър от BGR в Grayscale
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Предайте формата на рамката и кода за преобразуване, COLOR_BGR2GRAY, да се cvtColor() за промяна на всеки кадър от видеото от цветен в сива скала.
  9. Използвайте detectMultiScale() за откриване на лица. Този метод приема три параметъра като вход. Първо е изходното изображение, grayImg. Вторият параметър е scaleFactor. Това указва колко трябва да намалите размера на изображението при всеки мащаб на изображението. Използвайте стойността по подразбиране 1,3 като коефициент на мащабиране. Колкото по-висок е коефициентът на мащабиране, толкова по-малко стъпки и по-бързо изпълнение. Съществува обаче и по-голяма вероятност от липсващи лица. Третият параметър е minNeighbors. Това указва колко съседи трябва да има всеки кандидат правоъгълник, за да го запази. Колкото по-висока е стойността, толкова по-малък е шансът за фалшив положителен резултат, но това също означава пропускане на неясни следи от лицето.
    # откриване на лица с помощта на Haar Cascade 
    лице = haar_cascade.detectMultiScale (grayImg, 1.3, 4)
  10. Когато откриете лице, получавате четири координати. x представлява координатата x, y представлява координатата y, w представлява ширината и h представлява височината. Актуализирайте текста до Разпознато лице и начертайте правоъгълник, използвайки тези координати. Цветът на правоъгълника е зелен (BGR) формат с дебелина два пиксела.
    # нарисувайте правоъгълник около лицето и актуализирайте текста на Разпознато лице
    за (x, y, w, h) в лицето:
    текст = "Разпознато лице"
    cv2.правоъгълник(img, (х, г), (х + w, г + ч), (0, 255, 0), 2)
  11. По желание отпечатайте текста на изходната конзола. Показване на текста на екрана с помощта на заснетия кадър като източник, текст, както е получен в горния текст, шрифт стил FONT_HERSHEY_SIMPLEX, коефициент на мащабиране на шрифта 1, син цвят, дебелина от два пиксела и тип линия AA.
    # показване на текста върху изображението
    печат(текст)
    изображение = cv2.putText (img, текст, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Покажете прозореца със заглавието Разпознаване на лица и изображението. Използвай чакащ ключ() метод за показване на прозореца за 10 милисекунди и проверка за натискане на клавиш. Ако потребител натисне Esc ключ (ASCII стойност 27), излезте от цикъла.
    # покажете изходния прозорец и натиснете клавиша за излизане, за да излезете
    cv2.imshow("Разпознаване на лица", изображение)
    ключ = cv2.waitKey (10)

    ако ключ == 27:
    прекъсвам

  13. Накрая освободете обекта на камерата от програмата Python и затворете всички прозорци.
    камера.освобождаване()
    cv2.destroyAllWindows()

Разпознаване на лица с помощта на Python в действие

Когато се вижда лице, трябва да видите резултат като този:

Когато няма лице, ще видите съобщение като това:

Ограничения на разпознаването на лица чрез каскаден алгоритъм на Haar

Въпреки че този алгоритъм е лек, с малък размер на модела и работи бързо, има няколко ограничения:

  • При видео в реално време лицето трябва да е в полезрението на камерата. Ако лицето е твърде далеч, твърде близо или твърде наклонено, алгоритъмът не успява да улови характеристиките.
  • Това е алгоритъм за лицево лице, така че не можете да откриете странични изгледи.
  • Високи фалшиво положителни резултати. Често разпознава области като лица, въпреки че няма лице.
  • Трябва да има оптимални условия на осветление. Прекомерното или слабото осветление пречи на точността на алгоритъма.

Многото приложения на разпознаването на лица

Разпознаването на лица има широк спектър от приложения в днешния свят. Можете да го използвате за разпознаване на лица в смартфони, домове, превозни средства и имиграционни контролно-пропускателни пунктове. Разпознаването на лица вече е често срещано при видеонаблюдението, филтрите в социалните медии и автоматичното проследяване на лица в кинематографията.

Това е само началото на тази прекрасна технология. С напредъка може да сме в състояние да идентифицираме изчезнали деца, да хванем престъпници и да предотвратим престъпления като кражба на самоличност.