Да ли сте се икада запитали како Снапцхат тачно примењује различите филтере на ваше лице? Да ли ваш паметни телефон чини магију када се откључава помоћу ваших црта лица? Не, само гледате Препознавање лица у акцији.

Детекција лица је технологија вештачке интелигенције која може да идентификује људска лица на дигиталној слици или видео снимку. Откријте како можете да направите програм за детекцију лица у реалном времену у мање од 25 линија кода помоћу легендарног Хаар Цасцаде алгоритма.

Шта је Хаар каскада?

Хаар Цасцаде је алгоритам за детекцију објеката који су представили Пол Виола и Мајкл Џонс за откривање лица на сликама или видео снимцима. Каскадна функција се тренира коришћењем многих позитивних и негативних слика које се касније могу користити за идентификацију било ког објекта или лица у другим медијима. Ове обучене датотеке су доступне у ОпенЦВ ГитХуб спремиште.

Користећи приступ клизном прозору, прозор фиксне величине прелази преко слике с лева на десно, одозго према доле. У свакој фази, прозор се зауставља и класификује да ли област садржи лице или не.

ОпенЦВ, алат за компјутерски вид, ради са унапред обученим моделом Хаар Цасцаде да би класификовао карактеристике. Свака фаза проверава пет карактеристика: две ивичне карактеристике, две линијске карактеристике и једна карактеристика са четири правоугаоника.

Када се посматра, подручје око очију изгледа тамније од подручја образа, док подручје носа изгледа свјетлије од подручја око очију. Ове карактеристике можете визуализовати на доњи начин.

Користећи ове карактеристике и израчунавање пиксела, алгоритам идентификује више од 100.000 тачака података. Затим можете користити Адабоост алгоритам да побољшате тачност и одбаците небитне функције. Током многих итерација, овај приступ минимизира стопу грешке и повећава тежину карактеристике све док не постигне прихватљиву тачност.

Међутим, техника клизног прозора се зауставља ако одређени тестни случај не успе и рачунарски је скуп. Да бисте ово решили, можете применити концепт каскаде класификатора. Уместо примене свих функција у једном прозору, овај приступ групише и примењује их у фазама.

Ако прозор не успе у првој фази, процес га одбацује, иначе се наставља. Ово доводи до драстичног смањења броја операција које треба извршити и чини га одрживим за употребу у апликацијама у реалном времену.

Ток рада детекције лица

Пратите овај алгоритам да бисте направили програм за детекцију лица:

  1. Учитајте алгоритам Хаар Цасцаде Фронтал Фаце.
  2. Иницијализујте камеру.
  3. Читање кадрова са камере.
  4. Претворите слике у боји у сиве.
  5. Узмите координате лица.
  6. Нацртајте правоугаоник и ставите одговарајућу поруку.
  7. Прикажите излаз.

Шта је ОпенЦВ?

ОпенЦВ је библиотека рачунарске визије и машинског учења отвореног кода. Има преко 2.500 оптимизованих алгоритама за различите апликације. То укључује детекцију лица/објеката, препознавање, класификацију и још много тога.

Приватност ваших података о лицу је посебна брига. Стотине истакнутих компанија као што су Гоогле, ИБМ и Иахоо користе ОпенЦВ у својим апликацијама. Неки људи који имају за циљ да своје податке задрже приватнима су показали постоје начини да се избегне препознавање лица.

Да бисте инсталирали ОпенЦВ у Питхон, користите наредбу:

пип инсталирај опенцв-питхон

Како направити програм за препознавање лица користећи Питхон

Пратите ове кораке да бисте направили детектор лица:

Овај пример кода, заједно са датотеком алгоритма Хаар Цасцаде, доступан је у а ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

  1. Преузмите Хаар Цасцаде Фронтал Фаце Подразумевани КСМЛ датотеку и поставите је на исту локацију као и ваш Питхон програм.
  2. Увезите ОпенЦВ библиотеку.
    # увоз потребних библиотека
    увоз цв2
  3. Сачувајте датотеку алгоритма Хаар Цасцаде Фронтал Фаце ради лакшег референцирања.
    # учитавање датотеке алгоритма хаар цасе у алг променљиву
    алг = "хаарцасцаде_фронталфаце_дефаулт.кмл"
  4. Користите класу ЦасцадеЦлассифиер да учитате КСМЛ датотеку у ОпенЦВ.
    # прослеђивање алгоритма у ОпенЦВ
    хаар_цасцаде = цв2.ЦасцадеЦлассифиер (алг)
  5. Снимите видео са камере. Проследите 0 на Видео снимање() функцију за коришћење ваше примарне камере. Ако сте прикључили спољну камеру, можете да користите узастопне бројеве 1, 2 итд.
    # снимање видео записа са камере
    цам = цв2.ВидеоЦаптуре (0)
  6. Подесите бесконачну петљу за читање улаза камере кадар по кадар. Тхе читати() функција враћа два параметра. Прва вредност је типа боолеан који показује да ли је операција успешна или не. Други параметар садржи стварни оквир са којим ћете радити. Чувајте овај оквир у имг променљива.
    докИстина:
    _, имг = цам.реад()
  7. Подесите подразумевани текст да се појављује као Лице није откривено. Када се открије, ажурирајте вредност ове променљиве.
     текст = "Лице није откривено"
  8. Улаз примљен из стварног света је шарен, у БГР формату. БГР означава плаву, зелену и црвену. Ово ствара много обраде за апликације компјутерског вида. Да бисте ово смањили, користите формат сивих тонова.
    # конвертујте сваки кадар из БГР у нијансе сиве
    граиИмг = цв2.цвтЦолор (имг, цв2.ЦОЛОР_БГР2ГРЕИ)
    Проследите оквир и формат кода за конверзију, ЦОЛОР_БГР2ГРЕИ, до цвтЦолор() да промените сваки кадар видео снимка из боје у нијансе сиве.
  9. Користите детектовање МултиСцале() за откривање лица. Овај метод узима три параметра као улаз. Прво је изворна слика, граиИмг. Други параметар је фактор скале. Ово одређује колико морате да смањите величину слике на свакој скали слике. Користите подразумевану вредност 1.3 као фактор скалирања. Што је већи фактор скале, то је мање корака и брже је извршење. Међутим, постоји и већа вероватноћа да ће лица недостајати. Трећи параметар је минНеигхбоурс. Ово одређује колико суседа сваки правоугаоник кандидата треба да има да га задржи. Што је већа вредност, то је мања шанса за лажно позитиван резултат, али то такође значи и пропуштање нејасних трагова лица.
    # детектује лица користећи Хаар Цасцаде 
    лице = хаар_цасцаде.детецтМултиСцале (сивеИмг, 1.3, 4)
  10. Када откријете лице, добијате четири координате. к представља к координату, и представља и координату, в представља ширину, а х представља висину. Ажурирајте текст на Фаце Детецтед и нацртај правоугаоник користећи ове координате. Боја правоугаоника је зеленог (БГР) формата са дебљином од два пиксела.
    # нацртајте правоугаоник око лица и ажурирајте текст на Фаце Детецтед
    за (к, и, в, х) у лице:
    текст = "Фаце Детецтед"
    цв2.правоугаоник(имг, (Икс, и), (Икс + в, и + х), (0, 255, 0), 2)
  11. Опционо одштампајте текст на излазној конзоли. Прикажите текст на екрану користећи снимљени оквир као извор, текст добијен у горњем тексту, фонт стил ФОНТ_ХЕРСХЕИ_СИМПЛЕКС, фактор размере фонта 1, плава боја, дебљина два пиксела и тип линије АА.
    # приказује текст на слици
    принт(текст)
    слика = цв2.путТект (имг, текст, (50, 50), цв2.ФОНТ_ХЕРСХЕИ_СИМПЛЕКС, 1, (255, 0, 0), 2, цв2.ЛИНЕ_АА)
  12. Прикажите прозор са насловом Детекција лица и слика. Користити чекај() метод да прикажете прозор на 10 милисекунди и проверите да ли је притиснут тастер. Ако корисник притисне изаћи тастер (АСЦИИ вредност 27), изађите из петље.
    # прикажите излазни прозор и притисните тастер есцапе да изађете
    цв2.имсхов("Детекција лица", слика)
    кључ = цв2.ваитКеи (10)

    ако је кључ == 27:
    пауза

  13. На крају, ослободите објекат камере из Питхон програма и затворите све прозоре.
    цам.издање()
    цв2.дестроиАллВиндовс()

Препознавање лица помоћу Питхон-а у акцији

Када је лице у виду, требало би да видите излаз овако:

Када лице није присутно, видећете поруку попут ове:

Ограничења детекције лица коришћењем Хаар каскадног алгоритма

Иако је овај алгоритам лаган, са малом величином модела и ради брзо, постоји неколико ограничења:

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

Многе примене детекције лица

Детекција лица има широк спектар примена у данашњем свету. Можете га користити за препознавање лица на паметним телефонима, кућама, возилима и имиграционим контролним пунктовима. Детекција лица је већ уобичајена у ЦЦТВ надзору, филтерима друштвених медија и аутоматском праћењу лица у кинематографији.

То је само почетак ове дивне технологије. Уз напредак, могли бисмо да идентификујемо несталу децу, ухватимо криминалце и спречимо злочине као што је крађа идентитета.