Рачунар са једном плочом

Како направити пројекат препознавања лица Распберри Пи

Како направити пројекат препознавања лица Распберри Пи

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

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


Израда програма за препознавање лица некада је могла бити врло тешка и напредна ствар. Али са Распберри Пи, ништа није превише тешко! У овом чланку сам користио Опен Соурце Либрари за отворени извор (ОпенЦВ) за израду пројекта.

Ово спремиште је дизајнирано за рад са рачунарском ефикасношћу и апликацијама у реалном времену. Стога је идеалан за наш програм препознавања лица у стварном времену. Овај чланак водиће вас корак по корак кроз цео пројекат. Дакле, држите се до краја да имате своје препознавање лица Распберри Пи!

Захтеви


За израду система за препознавање лица Распберри Пи биће вам потребне следеће ствари:

  1. Распберри Пи В4
  2. Ноир Цамера
  3. ОпенЦВ

Распберри Пи везе


Обавезно створите следеће везе пре него што започнете са кодирањем:

  1. Успоставите везу између Распберри Пи и Риббон ​​кабла са екрана
  2. Причврстите СДА на СДА пин вашег Пи
  3. Ставите СЦЛ са екрана на СЦЛ иглу
  4. Причврстите тракасти кабл камере на Распберри Пи
  5. Ставите ГНД са екрана у Пи ГНД
  6. Повежите Распберри Пи 5В и 5В екрана

Корак 1: Инсталирајте ОпенЦВ на Распберри Пи


Први корак је инсталирање ОпенЦВ-а на ваш Пи уређај. Да бисте то урадили, покрените Распберри Пи и отворите ССХ везу. Да бисте укључили сав расположиви простор на мицро-СД картици, проширите систем датотека.

$ судо распи-цонфиг

Затим у менију изаберите „Напредне опције“, а затим „Прошири систем датотека“:

После тога притисните дугме и поново покрените Распберри Пи.

$ судо ребоот

Корак 2: Потврдите инсталацију ОпенЦВ-а


Када завршите са поновним покретањем, на вашем Пи треба да постоји спремно виртуелно окружење ОпенЦВ. Сада би требало да потврдите да ли је ОпенЦВ правилно инсталиран на вашем Пи. Покрените наредбу „извор“ сваки пут када отворите нови терминал тако да су системске променљиве правилно постављене.

извор ~ /.профил

Сада унесите своје виртуелно окружење:

воркон цв

(Цв) текст значи да сте у цв виртуелном окружењу.

(цв) пи @ малина: ~ $

Да бисте унели свој Питхон тумач:

питон

Видећете да се у преводу појављује „>>>“. Да бисте увезли ОпенЦВ библиотеку:

увоз цв2

Ако нема порука о грешкама, можете бити сигурни да је ОпенЦВ правилно инсталиран.

Корак 3: Преузмите ОпенЦВ


Сада преузмите инсталирани ОпенЦВ. Мораћете да преузмете и ОпенЦВ и ОпенЦВ допринос. Допринос долази са модулима и функцијама који ће вам требати у овом експерименту.

$ цд ~ $ вгет -О опенцв.зип хттпс: // гитхуб.цом / опенцв / опенцв / арцхиве / 4.0.0.зип $ вгет -О опенцв_цонтриб.зип хттпс: // гитхуб.цом / опенцв / опенцв_цонтриб / арцхиве / 4.0.0.зип

Сада распакујте архиву:

$ распакујте опенцв.зип $ распакујте опенцв_цонтриб.зип

Корак 4: Инсталирајте зависности


Сада инсталирајте потребне ОпенЦВ зависности на ваш Распберри Пи да бисте правилно функционисали:

$ судо апт-гет упдате && судо апт-гет упграде $ судо апт-гет инсталл буилд-ессентиал цмаке пкг-цонфиг $ судо апт-гет инсталл либјпег-дев либтифф5-дев либјаспер-дев либпнг-дев $ судо апт-гет инсталл либавцодец -дев либавформат-дев либсвсцале-дев либв4л-дев $ судо апт-гет инсталл либквидцоре-дев либк264-дев $ судо апт-гет инсталл либгтк2.0-дев либгтк-3-дев $ судо апт-гет инсталл либфонтцонфиг1-дев либцаиро2-дев $ судо апт-гет инсталл либгдк-пикбуф2.0-дев либпанго1.0-дев $ судо апт-гет инсталл либхдф5-дев либхдф5-сериал-дев либхдф5-103 $ судо апт-гет инсталл либктгуи4 либктвебкит4 либкт4-тест питхон3-пикт5 $ судо апт-гет инсталл либатлас-басе-судо апт гфортран- добити инсталацију питхон2.7-дев питхон3-дев $ судо апт-гет инсталирање питхон3-пил.имагетк

Корак 5: Инсталирајте пип


У овом кораку мораћете да инсталирате менаџер пакета за питхон под називом „пип“.

$ вгет хттпс: // боотстрап.пипа.ио / гет-пип.пи $ судо питхон3 гет-пип.пи

Корак 6: инсталирајте Нумпи


Након тога, инсталирајте питхон библиотеку под називом „Нумпи“.

$ Пип3 инсталирај нумпи

Корак 7: Тестирајте камеру


Сада када сте инсталирали све потребне ствари, укључујући ОпенЦВ, време је да проверите да ли ваша камера правилно функционише. Већ би требало да имате Пицам инсталиран на Распберри Пи. Унесите следећи код у свој Питхон ИДЕ:

импорт нумпи ас нп импорт цв2 цап = цв2.Ограничење ВидеоЦаптуре (0).сет (3,640) # сет Ограничење ширине.сет (4,480) # сет Хеигхт вхиле (Труе): рет, фраме = цап.реад () фраме = цв2.флип (фраме, -1) # Преокрените камеру вертикално сиво = цв2.цвтЦолор (оквир, цв2.ЦОЛОР_БГР2ГРЕИ) цв2.имсхов ('фраме', фраме) цв2.имсхов ('сиво', сиво) к = цв2.ваитКеи (30) & 0кфф ако је к == 27: # притисните 'ЕСЦ' да бисте напустили бреак цап.релеасе () цв2.уништитиАллВиндовс ()

Овај код функционише тако што снима видео ток који генерише ваш ПиЦам који приказује и сиви режим и режим БГР боја. Затим извршите код следећом наредбом:

питхон симплеЦамТест.пи

Сада притисните тастер [ЕСЦ] да бисте завршили програм. Обавезно кликните на прозор за видео пре него што га завршите. Сада бисте требали видети како камера правилно ради и приказује резултате. Ако ваша камера приказује поруке о грешци „Утврђивање није успело“, употребите следећу команду да бисте то поправили:

судо модпробе бцм2835-в4л2

Корак 8: Откривање лица


Требало би да знате да је први корак до завршетка нашег пројекта препознавања лица да ПиЦам направи лице. Сигурно мора прво да открије лице како би га препознало у будућности.

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

импорт нумпи ас нп импорт цв2 фацеЦасцаде = цв2.ЦасцадеЦлассифиер ('Цасцадес / хаарцасцаде_фронталфаце_дефаулт.кмл ') цап = цв2.Ограничење ВидеоЦаптуре (0).сет (3,640) # сет Ограничење ширине.сет (4,480) # сет Хеигхт вхиле Труе: рет, имг = цап.реад () имг = цв2.флип (имг, -1) сиво = цв2.цвтЦолор (имг, цв2.ЦОЛОР_БГР2ГРЕИ) лица = фацеЦасцаде.детецтМултиСцале (сива, сцалеФацтор = 1.2, минСуседи = 5, минСизе = (20, 20)) за (к, и, в, х) у лицима: цв2.правоугаоник (имг, (к, и), (к + в, и + х), (255,0,0), 2) рои_граи = сиви [и: и + х, к: к + в] рои_цолор = имг [ и: и + х, к: к + в] цв2.имсхов ('видео', имг) к = цв2.ваитКеи (30) & 0кфф ако је к == 27: # притисните 'ЕСЦ' за напуштање прекида слова.релеасе () цв2.уништитиАллВиндовс ()

Сада ћете морати да позовете функцију класификатора са неким факторима размере, параметрима и минималном величином лица коју ће открити.

лица = фацеЦасцаде.детецтМултиСцале (сива, сцалеФацтор = 1.2, минСуседи = 5, минВеличина = (20, 20))

Овај код делује откривањем лица на слици. Сада ћете можда желети да лица означите помоћу облика као правоугаоник. За то користите следећи код:

за (к, и, в, х) у лицима: цв2.правоугаоник (имг, (к, и), (к + в, и + х), (255,0,0), 2) рои_граи = сиви [и: и + х, к: к + в] рои_цолор = имг [ и: и + х, к: к + в]

Дакле, овако то функционише:

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

Сада када сте завршили са локацијама, креирајте „РОИ“ за лице и прикажите резултат помоћу функције имсхов (). Покрените га у питхон окружењу помоћу Распберри Пи терминала:

питхон фацеДетецтион.пи

И резултат:

Корак 9: Чување података


У овом делу морате створити скуп података у коме ће ваш програм сачувати прикупљене податке о ИД-овима лица које је открио. Да бисте то урадили, креирајте директоријум (користим ФациалРецогнитион):

мкдир Препознавање лица

Сада креирајте поддиректориј са именом „скуп података“.

мкдир скуп података

Затим користите следећи код:

импорт цв2 импорт ос цам = цв2.ВидеоЦаптуре (0) камера.сет (3, 640) # сет видео видтх цам.сет (4, 480) # сет видео хеигхт фаце_детецтор = цв2.ЦасцадеЦлассифиер ('хаарцасцаде_фронталфаце_дефаулт.кмл ') # За сваку особу унесите један нумерички ИД лица фаце_ид = инпут (' \ н унесите ИД корисника и притисните  ==> ') принт ("\ н [ИНФО] Иницијализација снимања лица. Погледајте камеру и сачекајте ... ") # Иницијализујте појединачно узорковање броја лица = 0 док (Тачно): рет, имг = цам.реад () имг = цв2.флип (имг, -1) # флип видео слику вертикално сиво = цв2.цвтЦолор (имг, цв2.ЦОЛОР_БГР2ГРЕИ) лица = лице_детектор.детецтМултиСцале (сива, 1.3, 5) за (к, и, в, х) у лицима: цв2.правоугаоник (имг, (к, и), (к + в, и + х), (255,0,0), 2) цоунт + = 1 # Снимите снимљену слику у директоријум скупова података цв2.имврите ("скуп података / корисник."+ стр (фаце_ид) + '.'+ стр (цоунт) + ".јпг ", сива [и: и + х, к: к + в]) цв2.имсхов ('слика', имг) к = цв2.ваитКеи (100) & 0кфф # Притисните 'ЕСЦ' за излаз из видео записа ако је к == 27: бреак елиф цоунт> = 10: # Узмите 10 узорака лица и зауставите видео паузу # Направите мало штампања за чишћење ("\ н [ИНФО] Излаз из програма и чишћење ствари ") цам.релеасе () цв2.уништитиАллВиндовс ()

Имајте на уму да ћемо сваки снимљени кадар сачувати као датотеку у поддиректорију „скупа података“:

цв2.имврите ("скуп података / корисник."+ стр (фаце_ид) + '.'+ стр (цоунт) + ".јпг ", сива [и: и + х, к: к + в])

Након тога, морате да увезете „ос“ библиотеку да бисте сачували горњу датотеку. Име датотека пратиће структуру попут ове:

Корисник.фаце_ид.рачунати.јпг, / пре>

Горе поменути код ће снимити само 10 слика за сваки ИД. То сигурно можете променити ако желите.
Покушајте сада да покренете програм и ухватите неке ИД-ове. Обавезно покрените код сваки пут када промените корисника или постојећу фотографију.

Корак 10: Тренер


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

мкдир тренер

Затим покрените следећи код:

импорт цв2 импорт нумпи ас нп фром ПИЛ импорт имаге импорт ос # Пут за базу слика базе података пут = 'скуп података' препознавач = цв2.лице.ЛБПХФацеРецогнизер_цреате () детектор = цв2.ЦасцадеЦлассифиер ("хаарцасцаде_фронталфаце_дефаулт.кмл "); # функција за добијање слика и података етикета деф гетИмагесАндЛабелс (путања): имагеПатхс = [ос.пут.јоин (патх, ф) фор ф ин ос.листдир (путања)] фацеСамплес = [] идс = [] за имагеПатх у имагеПатхс: ПИЛ_имг = Имаге.отворен (имагеПатх).цонверт ('Л') # претвори у сиве имг_нумпи = нп.низ (ПИЛ_имг, 'уинт8') ид = инт (ос.пут.сплит (имагеПатх) [- 1].разделити(".") [1]) лица = детектор.детеМултиСцале (имг_нумпи) за (к, и, в, х) у лицима: фацеСамплес.аппенд (имг_нумпи [и: и + х, к: к + в]) ид.аппенд (ид) ретурн фацеСамплес, идс принт ("\ н [ИНФО] Образна лица. Требаће неколико секунди. Сачекајте ... ") лица, идс = гетИмагесАндЛабелс (пут) препознавач.воз (лица, нп.низ (идс)) # Сачувајте модел у тренажеру / тренажеру.имл препознавач.врите ('тренер / тренер.имл ') # препознавач.саве () је радио на Мац-у, али не и на Пи # Одштампајте број обучених лица и испишите завршни програм ("\ н [ИНФО] 0 обучених лица. Излаз из програма ".формат (лен (нп.јединствени (ид))))

Обавезно инсталирајте ПИЛ библиотеку на Распберри Пи. Ако га немате, покрените следећу команду:

пип инсталирати јастук

Овде користим ЛБПХ препознавач лица који се испоручује уз пакет ОпенЦВ. Сада следите ову линију:

препознавач = цв2.лице.ЛБПХФацеРецогнизер_цреате ()

Све ваше фотографије биће одведене у директоријум „скупова података“ помоћу функције „гетИмагесАндЛабелс“. Вратит ће 2 низа под називом „ИД-ови“ и „Фаце“. Сада је време за обуку препознавача.

препознавач.воз (лица, ид)

Сада ћете видети „тренера.имл ”именована датотека сачувана у директоријуму тренера.

Корак 11: Препознавање лица


Време је за завршну акцију. Након овог корака, ваш препознавач може погодити повратни ИД ако је лице претходно снимљено. Дакле, напишимо наш коначни код:

увоз цв2 увоз нумпи као нп увоз ос препознавач = цв2.лице.ЛБПХФацеРецогнизер_цреате () препознавач.реад ('тренер / тренер.имл ') цасцадеПатх = "хаарцасцаде_фронталфаце_дефаулт.кмл "фацеЦасцаде = цв2.ЦасцадеЦлассифиер (цасцадеПатх); фонт = цв2.ФОНТ_ХЕРСХЕИ_СИМПЛЕКС #инициате ид цоунтер ид = 0 # имена повезана са ид-овима: пример ==> Марцело: ид = 1, етц намес = ['Ноне', 'Маркиан', 'Белл', 'Граце', 'А', 'З '] # Иницијализујте и започните снимање видео записа у реалном времену цам = цв2.ВидеоЦаптуре (0) камера.сет (3, 640) # сет видео видхт цам.сет (4, 480) # подеси висину видео записа # Дефиниши минималну величину прозора која се препознаје као лице минВ = 0.1 * цам.добити (3) минХ = 0.1 * цам.гет (4) вхиле Труе: рет, имг = цам.реад () имг = цв2.флип (имг, -1) # Окрени вертикално сиво = цв2.цвтЦолор (имг, цв2.ЦОЛОР_БГР2ГРЕИ) лица = фацеЦасцаде.детецтМултиСцале (сива, сцалеФацтор = 1.2, минСуседи = 5, минВеличина = (инт (минВ), инт (минХ)),) за (к, и, в, х) у лицима: цв2.правоугаоник (имг, (к, и), (к + в, и + х), (0,255,0), 2) ид, поузданост = препознавач.предвидети (сиво [и: и + х, к: к + в]) # Проверите да ли је поузданост мања од њих 100 ==> "0" се савршено подудара са иф (поузданост < 100): id = names[id] confidence = " 0%".format(round(100 - confidence)) else: id = "unknown" confidence = " 0%".format(round(100 - confidence)) cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2) cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1) cv2.imshow('camera',img) k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video if k == 27: break # Do a bit of cleanup print("\n [INFO] Exiting Program and cleanup stuff") cam.release() cv2.destroyAllWindows()

Програм ради као препознавач. функција предицт () узима различите делове снимљеног лица као различите параметре и враћа се сачуваном власнику док приказује ИД.
Ако не препозна лице, на слици ће се приказати „непознато“.

Тако, Воила!

Коначно, Увиди


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

Водич за битку за Веснотх
Битка за Веснотх је једна од најпопуларнијих стратешких игара отвореног кода које тренутно можете играти. Не само да је ова игра у развоју већ јако ду...
0 А.Д. Приручник
Од многих стратешких игара тамо, 0 А.Д. успева да се истакне као свеобухватан наслов и врло дубока, тактичка игра упркос томе што је отворен извор. Ра...
Водич за Унити3Д
Увод у Унити 3Д Унити 3Д је моћан мотор за развој игара. То је унакрсна платформа која вам омогућава да креирате игре за мобилне уређаје, веб, стоне р...