Мазмуну:
- 1 -кадам: Anaconda орнотуу
- 2 -кадам: Ачык резюме топтомун түшүрүү
- 3 -кадам: Экологиялык өзгөрмөлөрдү коюңуз
- 4 -кадам: Ырастоо үчүн тест
- 5 -кадам: Бетти аныктоо үчүн код жасаңыз
- 6 -кадам: Маалымат топтомун түзүү үчүн код жасаңыз
- 7 -кадам: Таануучуну үйрөтүү үчүн код жасаңыз
- 8 -кадам: Бетти жана натыйжаны таануу үчүн код жасаңыз
Video: Жүздү таануу+таануу: 8 кадам (сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Бул камерадан OpenCV менен жүздү таануунун жана таануунун чуркоосунун жөнөкөй мисалы. ЭСКЕРТҮҮ: Мен бул проектти сенсорлордун сынагы үчүн жасадым жана камераны байкоо жана таануу үчүн сенсор катары колдоном. Ошентип, биздин максат Бул сессияда 1. Анаконда орнотуу 2. Ачык резюме топтомун жүктөө 3. экологиялык өзгөрмөлөрдү коюу 4. тестти ырастоо үчүн 5. Жүз таануу үчүн код жаса 6. Маалымат топтомун түзүү үчүн код жаса 7. Таануучуну үйрөтүү үчүн код жаса 8. Жүздөрдү таануу үчүн код жаса & Жыйынтык.
1 -кадам: Anaconda орнотуу
Анаконда - бул эң сонун пакеттелген Python IDE, ал көптөгөн пайдалуу пакеттер менен жеткирилет, мисалы NumPy, Pandas, IPython Notebook, ж. Аны орнотуу үчүн Анаконданы карап көрүңүз.
2 -кадам: Ачык резюме топтомун түшүрүү
Биринчиден, OpenCVтин толук пакетин жүктөө үчүн расмий OpenCV сайтына өтүңүз. Сизге жаккан версияны тандаңыз (2.x же 3.x). Мен Python 2.x жана OpenCV 2.xте болом - негизинен OpenCV -Python үйрөткүчтөрү ушундай негизде орнотулгандыктан.
Менин учурда, мен пакетти (негизинен папканы) түз F дискиме чыгардым. (F: / opencv).
3 -кадам: Экологиялык өзгөрмөлөрдү коюңуз
Cv2.pyd файлын көчүрүү жана чаптоо
Anaconda Site-packages каталогу (мис. F: / Program Files / Anaconda2 / Lib / site-packages in my case) сиз импорттой турган Python пакеттерин камтыйт. Биздин максат cv2.pyd файлын бул каталогго көчүрүү жана чаптоо (cv2 импортун Python коддорубузда колдонуу үчүн).
Бул үчүн cv2.pyd файлын көчүрүңүз…
Бул OpenCV каталогунан (баштапкы бөлүгү сиздин машинада бир аз башкача болушу мүмкүн):
# Python 2.7 жана 64-бит машина: F: / opencv / build / python / 2.7 / x64# Python 2.7 жана 32-бит машина: F: / opencv / build / python / 2.7 / x84
Бул Anaconda каталогуна (баштапкы бөлүгү сиздин машинада бир аз башкачараак болушу мүмкүн):
F: / Program Files / Anaconda2 / Lib / site-packages
Бул кадамды аткаргандан кийин, биз Python кодунда cv2 импортун колдоно алабыз. БИРОК, FFMPEGти (видео кодекти) иштетүү үчүн дагы бир аз көбүрөөк иш кылышыбыз керек (видеолорду иштетүү сыяктуу нерселерди жасоого мүмкүнчүлүк берүү үчүн.)
"Менин компьютеримди" оң баскыч менен чыкылдатыңыз (же Windows 8.1деги "Бул компьютерди")-> касиеттерди солго чыкылдатыңыз-> "Өркүндөтүлгөн" өтмөктү-> "айлана чөйрөнүн өзгөрмөлөрүн …" сол баскычын басыңыз. Жаңы колдонуучунун өзгөрмөсүн кошуңуз. OpenCVге көрсөтүү үчүн (же 32-бит системасы үчүн x86 же 64-бит системасы үчүн x64.) Мен азыр 64-бит машинадамын.
32-bitOPENCV_DIRC: / opencv / build / x86 / vc12
64-bitOPENCV_DIRC: / opencv / build / x64 / vc12
%OPENCV_DIR %\ bin'ди Колдонуучунун Өзгөрмө PATHсына кошуңуз.
Мисалы, менин PATH колдонуучу өзгөрмөсү мындай көрүнөт …
Буга чейин:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts
Кийин:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin
Бул биз бүтүрдүк! FFMPEG колдонууга даяр!
4 -кадам: Ырастоо үчүн тест
Биз муну азыр Анаконда кыла аларыбызды текшеришибиз керек (Spyder IDE аркылуу):
- OpenCV пакетин импорттоо
- FFMPEG утилитасын колдонуңуз (видеолорду окуу/жазуу/иштетүү үчүн)
Тест 1: OpenCV импорттой алабызбы?
Анаконда азыр OpenCV-Python пакетин импорттой алаарына ишенүү үчүн (атап айтканда, cv2), Буларды IPython Consoleдо чыгарыңыз:
cv2 импорттоо
cv2._ версиясын басып чыгаруу
Эгерде cv2 пакети эч катасыз эле импорттолсо жана cv2 версиясы басылып чыкса, анда бизде баары жакшы!
Тест 2: Биз FFMPEG кодегин колдоно алабызбы?
Үлгүнү коюңуз
input_video.mp4
каталогдогу видео файл. Биз кыла аларыбызды текшерип көргүбүз келет:
- бул.mp4 видео файлын окуу, жана
- жаңы видео файлды жазыңыз (.avi же.mp4 ж.б. болушу мүмкүн)
Бул үчүн бизде python тестинин коду болушу керек, аны test.py деп атаңыз. Аны үлгү менен бир каталогго коюңуз
input_video.mp4
файл.
Бул эмне
test.py
окшош болушу мүмкүн (Эскертүү: Пит менен Уоррендин комментарий талаасындагы сунуштарына чоң рахмат - мен анын баштапкы тест кодун алмаштырдым - өзүңүз сынап көрүңүз жана бул жакшы иштээрин бизге билдириңиз):
cv2 импорттоо
cap = cv2. VideoCapture ("input_video.mp4") cap.isOpened () # True = видеону ийгиликтүү окуңуз. Жалган - видеону окубай кой. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print.isOpened () # True = видеону ийгиликтүү жазуу. Жалган - видеону жазбай коюңуз. cap.release () out.release ()
Бул тест ӨТӨ МААНИЛҮҮ. Эгерде сиз видео файлдарды иштетүүнү кааласаңыз, анда Anaconda / Spyder IDE FFMPEG (видео кодек) колдоно алаарын камсыз кылууңуз керек. Аны иштетүү үчүн мага бир нече күн керек болду. Бирок бул сизге алда канча аз убакытты талап кылат деп ишенем!:) Эскертүү: Anaconda Spyder IDE колдонууда дагы бир маанилүү кеңеш. Учурдагы жумушчу каталогду (CWD) текшерип турганыңызды текшериңиз !!!
5 -кадам: Бетти аныктоо үчүн код жасаңыз
Максат
Бул сессияда,
- Биз Haar Feature негизделген Cascade Classifiers аркылуу жүздү аныктоонун негиздерин көрөбүз
- Биз ошол эле нерсени көздү аныктоо ж
Хаар-каскадды аныктоо OpenCVде
Бул жерде биз аныктоо менен алектенебиз. OpenCV мурунтан эле жүзү, көзү, жылмаюусу жана башкалар үчүн даярдалган көптөгөн классификаторлорду камтыйт. Бул XML файлдары opencv/data/haarcascades/папкада сакталат. OpenCV менен жүз жана көз детекторун түзөлү. Алгач биз керектүү XML классификаторлорун жүктөшүбүз керек. Андан кийин биздин кириш сүрөтүбүздү (же видеобузду) боз масштабда жүктөңүз ЖЕ камераны колдоно алабыз (Реалдуу убакытта жүздү аныктоо үчүн)
np катары numpy импорттоо
импорттоо cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/ha_casade).xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздөр = face_cascade.detectMultiScale (боз, 1,5, 5) (x, y, w, h) жүздөрүндө: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grey [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) for eyes: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (faces)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()
6 -кадам: Маалымат топтомун түзүү үчүн код жасаңыз
Биз жүздү таануу менен алектенип жатабыз, андыктан сизге айрым жүз сүрөттөрү керек! Сиз өзүңүздүн маалымат базаңызды түзө аласыз же жеткиликтүү жүз маалымат базаларынын биринен баштасаңыз болот, https://face-rec.org/databases/ сизге заманбап сереп берет. Үч кызыктуу маалымат базасы (сүрөттөмөнүн бөлүктөрү https://face-rec.org сайтынан алынган):
- AT&T Facedatabase
- Yale Facedatabase A.
- Extended Yale Facedatabase B
БУЛ ЖЕРДЕ мен өзүмдүн маалымат базамды колдонуп жатам ….төмөндө берилген коддун жардамы менен:
np катары numpy импорттоо
импорттоо cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('user id') sampleN = 0; while 1: ret, img = cap.read () боз = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздөр = face_cascade.detectMultiScale (боз, 1.3, 5) үчүн (x, y, w, h) жүздөрүндө: sampleN = sampleN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", grey [y: y+h, x: x+w]) cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img'), img) cv2.waitKey (1) if sampleN> 20: break cap.release () cv2.destroyAllWindows ()
7 -кадам: Таануучуну үйрөтүү үчүн код жасаңыз
Окутуу комплексин даярдоо үчүн функцияны түзүңүз
Эми биз функцияны аныктайбыз
getImagesWithID (жол)
бул сүрөттүн маалымат базасына абсолюттук жолду киргизүү аргументи катары кабыл алат жана 2 тизменин жыйынтыгын кайтарат, бири табылган жүздөрдү камтыйт, экинчиси ошол бетке тиешелүү энбелгини камтыйт. Мисалы, эгерде жүз тизмесиндеги ith индекси маалымат базасындагы 5 -индивидуалдуу болсо, анда энбелгилер тизмесиндеги тиешелүү ith жайгашуусу 5ке барабар.
Эми маалымат топтомунун беттерин (6 -кадамда түзүлгөн) төмөндө келтирилген коддун жардамы менен.yml файлына айлантыңыз:
импорт os
PIL импорттоо cv2 катары np импорттоо Image # Жүздү таануу үчүн биз LBPH Бет Таануучу = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) in f in os.listdir (path)] # print image_path #getImagesWithID (path) жүздөр = ID = =] imagePath ичинде imagePaths үчүн: # Сүрөттү окуп, боз масштабдуу жүздөргө айландыруу # Сүрөттүн энбелгисин алыңыз ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Сүрөттөгү жүздү аныктоо жүздөр.append (faceNP) IDs.append (ID) cv2.imshow ("Окутуу үчүн жүздөрдү кошуу", faceNP) cv2.waitKey (10) np.array (ID) кайтаруу, Ids, жүздөр = getImagesWithID (жол) таануучу.транспорт (жүздөр, Ids) таануучу.куткаруу ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()
бул кодду колдонуу менен бардык жүздүн маалымат базасы бир.yml файлына айландырылат …… жолдун жайгашкан жери ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")
8 -кадам: Бетти жана натыйжаны таануу үчүн код жасаңыз
Guyzz - бул веб -камераңыздын жардамы менен жүздөрдү таануу үчүн кодду түзө турган акыркы кадам, БУЛ КАДАМДА ИШТЕГЕН ЭКИ ОПЕРАЦИЯ БАР …. 1. камерадан видеону тартуу 2. аны.yml файлыңыз менен салыштыруу
npimport катары numpy импорт cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPizer rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) 1 учурда: ret, img = cap.read () боз = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздөр = face_cascade.detectMultiScale (боз, 1.5, 5) үчүн (x, y, w, h) үчүн: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (боз [y: y+h, x: x+w]) if (id == 2): id == 1 if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) cv2.waitKey (1) == ord ('q'): cap cap.release ()
cv2.destroyAllWindows ()
жана акыры натыйжа сиздин көз алдыңызда болот ……. сиз ошондой эле шилтеменин астынан zip файлын жүктөп алсаңыз болот: Коддорду жүктөө үчүн бул жерди басыңыз Ошентип, бул көрсөтмөдө биз OpenCV аркылуу жүздү аныктоо+таануу тапшырмасын аткардык …. ушул сыяктуу ….. plzzz мага жазылып мага добуш бериңиз ….. рахмат достор:)
Сунушталууда:
Abellcadabra (Жүздү таануу эшиктерин кулпулоо системасы): 9 кадам
Abellcadabra (Жүздү таануу эшиктеринин кулпу тутуму): Карантинде жатып, үйдүн эшигинин жүзүн таануу менен убакытты өлтүрүүнүн жолун табууга аракет кылдым. Мен аны Абеллкадабра деп атадым - бул Абракадабранын айкалышы, эшиктин коңгуроосу менен сыйкырдуу фразасы, мен коңгуроону гана алам. КҮЛКҮНҮЧТҮҮ
Жашыруун бөлүм менен жүздү таануу күзгүсү: 15 кадам (сүрөттөр менен)
Беттин таануу күзгүсү жашыруун бөлүм менен: Мен дайыма окуяларда, кинолордо жана ушул сыяктуу нерселерде колдонулган дайыма жаратуучу жашыруун бөлүмдөргө кызыгып келем. Ошентип, мен жашыруун купе сынагын көргөндө, мен бул идеяны өзүм эксперимент кылууну чечтим жана жөнөкөй ачылуучу күзгү жасоону чечтим
LTE Pi HAT менен жүздү таануу Smart Lock: 4 кадам
LTE Pi HAT менен жүздү таануу Smart Lock: Бет таануу барган сайын кеңири колдонула баштады, биз аны акылдуу кулпу үчүн колдоно алабыз
ESP32 CAM жүздү таануу MQTT колдоосу менен - AI-Thinker: 4 кадам
ESP32 CAM жүздү таануу MQTT колдоосу менен | AI-Thinker: Саламатсызбы! Мен MQTTге маалыматтарды жөнөтө ала турган, жүздү таануу менен ESP CAMге ээ болуу үчүн долбоордун кодун бөлүшкүм келди. Ошентип, балким 7 сааттан кийин көптөгөн коддордун мисалдарын карап, эмне экенин издеп тапкандан кийин, менде финал бар
Реалдуу убакытта жүздү таануу: аягына чейин долбоор: 8 кадам (сүрөттөр менен)
Реалдуу убакытта жүздү таануу: аягына чейин долбоор: OpenCVди изилдөө боюнча менин акыркы үйрөткүчүмдө биз АВТОМАТТЫК КӨРҮНҮҮНҮН ОБJЕКТИН КӨЗДӨӨНҮ үйрөндүк. Эми биз PiCamды жүздөрдү реалдуу убакытта таануу үчүн колдонобуз, төмөндө көрүнүп тургандай: Бул долбоор фантастикалык " Ачык Булак Компьютер Көрүү Китепканасы " менен жасалган