Python və OpenCV istifadə edərək üz tanıma tətbiq edin

Mənbə: https://www.ariadnext.com/gesichtsgewinn-neu-era-für-online-identifikation/

Kompüter görmə, bu günlərdə maşın öyrənmə və dərin öyrənmə cəmiyyətindəki bütün qəzəbdir. Bu domendəki ən populyar istifadələrdən biri də üzün tanınmasıdır.

Bu dərin məqalədə nə öyrənəcəyik. Ancaq başlamazdan əvvəl iki real istifadə vəziyyətinə nəzər salaq:

1. Avtomobilləri daha etibarlı hala gətirmək Dünyada Mercedes, Tesla, BMW və s. Kimi avtomobil istehsalçıları getdikcə avtomobilləri daha fərdi və sürücü üçün daha etibarlı hala gətirməyə diqqət yetirirlər. Daha ağıllı vasitə funksiyalarını inkişaf etdirməyə çalışarkən, istehsalçıların insan duyğularını daha yaxşı başa düşmək üçün AI / ML istifadə etmələri mantiqidir. Üz tanıma ilə ağıllı avtomobillər sürücünü yuxulu və ya yuxusuz olduqda xəbərdar edə bilər.

ABŞ Nəqliyyat Nazirliyi sürücülüklə əlaqəli səhvlərin ölümlə nəticələnən yol qəzalarının 95% -ə səbəb olduğunu bildirdi. Üz duyğularının aşkarlanması üzün yuxusuzluqdan əvvəlki mikro ekspressiyalarındakı incə dəyişiklikləri aşkar edə bilər və sürücüyə avtomobili dayandırmağı, qəhvə fasiləsi verməsini, musiqini və ya temperaturu dəyişdirməsini xahiş edən fərdiləşdirilmiş siqnallar göndərir.

2. Müsahibələrdə Üz Duyğularının Tanınması Namizədlər və müsahibə verənlər arasındakı qarşılıqlı əlaqəyə çox sayda qiymətləndirmə kateqoriyası və bir növ yanlış şərh təsir göstərir. Belə bir qiymətləndirmə namizədin həqiqətən işə uyğun olub olmadığını müəyyənləşdirməyi çətinləşdirir. Namizədin nəyi çatdırmağa çalışdığını tanımaq, mürəkkəb dil təfsiri, koqnitiv qərəz və aradakı kontekstə görə müsahibin əlində deyil. Bu, ruh halını tutmaq və şəxsiyyət xüsusiyyətlərini daha da qiymətləndirmək üçün namizədin üz ifadəsini ölçərək AI-nin gəldiyi yerdir.

İşçilərin mənəvi vəziyyəti bu texnologiya ilə işdə qarşılıqlı əlaqələrin saxlanması və qeyd edilməsi ilə də qəbul edilə bilər. İR vasitəsi olaraq yalnız işə götürmə strategiyalarının hazırlanmasında deyil, həm də işçilərin əllərindən gələni etmələrinə kömək edəcək İK rəhbərliklərinin dizaynında kömək edə bilər.

Üz tanıma texnologiyasının daha yaxşı qərarlar qəbul etməkdə necə təsirli ola biləcəyini gördüyümüz üçün daha dərinə gedək və üz tanımağın tam olaraq nə olduğunu və üzümüzü tanıdan sadə bir model yarada biləcəyik.

Üz tanıma nədir?

Üz tanıma, kompüter texnologiyalarının rəqəmsal şəkillərdə insanların üzlərini tanıma qabiliyyətidir. Üz tanıma tətbiqetmələrində mənzərələr, obyektlər və s. Ehtiva edə bilən daha böyük şəkillərdə insan üzlərini tanımağa yönəlmiş alqoritmlərdən istifadə olunur.

Üz tanıma tətbiqetmələri istənilən ölçülü şəkillərdə insan üzlərini tanımaq üçün maşın öyrənmə alqoritmlərindən istifadə edir. Daha böyük şəkillər mənzərə, əşyalar, heyvanlar, binalar və insanların digər hissələri (bacaklar, çiyinlər və qollar kimi) kimi üzləşməyən çoxsaylı obyektləri ehtiva edə bilər.

Əvvəllər üz tanıma / tanıma texnologiyası yalnız təhlükəsizlik sektoruna həsr edilmişdisə, bu gün pərakəndə satış, marketinq, səhiyyə və s. Daxil olmaqla digər sahələrdə fəal şəkildə genişlənir.

Üz tanıma necə işləyir?

Proses bir az mürəkkəb olsa da, tez-tez üz tanıma alqoritmləri insan gözlərini axtarmağa başlayır. Gözlər sözdə bir vadi bölgəsi meydana gətirir və tanınması ən asan xüsusiyyətlərdən biridir. Gözlər aşkar edildikdən sonra alqoritm üzün qaşlar, ağız, burun, burun delikləri və iris kimi sahələrini aşkar etməyə cəhd edə bilər. Alqoritm üzün bir bölgəsini tanıdığından şübhələnən kimi bir üzü həqiqətən tanıdığını yoxlamaq üçün əlavə testlər apara bilər. - https://www.facefirst.com/blog/face-detection-vs-face-recognition/

OpenCV

Mənbə: https://medium.com/@gsari/digit-recognition-with-opencv-and-python-cbf962f7e2d0

OpenCV (Açıq Mənbəli Kompüter Görmə Kitabxanası), C ++, C, Python və Java-da bağlama ilə şəkil və video işlənməsi üçün kitabxana. OpenCV hər növ görüntü və video təhlili üçün istifadə olunur, məs. B. üz tanıma və tanıma, plaka oxumaq, fotoşəkil düzəltmə, inkişaf etmiş robot görmə, optik xarakter tanıma və daha çox şey üçün.

OpenCV-də üç quraşdırılmış üz tanıma cihazı var. Təmiz kodlaşdırma sayəsində, yalnız bir kod satırını dəyişdirərək hər hansı birini istifadə edə bilərsiniz. Bu üz tanıyanların adları və OpenCV zəngləri:

EigenFaces - cv2.face.createEigenFaceRecognizer () FisherFaces - cv2.face.createFisherFaceRecognizer () İkili nümunələr üçün yerli histogramlar (LBPH) - cv2.face.createLBPHFaceRecognizer ()

OpenCV ilə üzləri necə tapa bilərəm?

OpenCV ilə üz tapmaq üçün əsasən iki yol var:

Saç Classifier LBP Cascade Classifier

Əksər inkişaf etdiricilər saçları daha dəqiq olduğu üçün istifadə edirlər, eyni zamanda LBP-dən daha yavaşdır. Bu dərsliyi saç təsnifatçısı ilə də edəcəyəm. OpenCV paketi həqiqətən saçları effektiv istifadə etmək üçün lazım olan bütün məlumatları ehtiva edir. Əsasən, yalnız düzgün üz məlumatları olan bir XML sənədinə ehtiyacınız var. Nə etdiyinizi bilsəniz, özünüz də edə bilərsiniz və ya sadəcə OpenCV ilə gələnlərdən istifadə edə bilərsiniz. Saç Classifier və LBP Cascade Classifier haqqında daha çox məlumat üçün bu və bu vurun.

İndi nümunə şəkilləri giriş olaraq götürən və OpenCV ilə üzləri və gözləri tanımağa çalışan sadə bir Python proqramı yazaq. Saç Sinifləndiricisi Üz Tanıma və Göz Tanıma XML sənədini buradan yükləyə və XML sənədlərini iş kataloqunuzda saxlaya bilərsiniz.

Asılılıqlar:

pip install numpy pip install matplotlib pip install opencv-python

Şəkillər daxil edin:

Mənbə kodu:

cv2 idxal numpy, plpl import glob kimi matplotlib pyplot-dan np idxal
txtfiles = [] glob.glob'dakı fayl üçün ("*. jpg"): txtfiles.append (fayl) txtfiles'deki ix üçün: img = cv2.imread (ix, cv2.IMREAD_COLOR) imgtest1 = img.copy () imgtest = cv2.cvtColor (imgtest1, cv2.COLOR_BGR2GRAY)
facecascade = cv2.CascadeClassifier ('D: \\ KJ \\ Nagesh \\ Yüklemeler \\ üz tanıma \\ haircascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier ('D: \\ KJ \\ Nagesh \\ Yüklemeler \\ üz tanıma \\ haircascade_eye.xml') üzlər = facecascade.detectMultiScale (imgtest, scaleFactor = 1.2, minNeighbors = 5)
üzlərdəki (x, y, w, h) üçün print ("ümumi üzlərin sayı", len (üzlər)): face_detect = cv2.dörtgen (imgtest, (x, y), (x + w, y + h)) , (255, 0, 255), 2) roi_gray = imgtest [y: y + h, x: x + w] roi_color = imgtest [y: y + h, x: x + w] plt.imshow (face_detect) eyes = eyes_cascade.detectMultiScale (roi_gray) üçün (məsələn, ey, ew, eh) gözlərdə: eye_detect = cv2.dördbucaqlı (roi_color, (ex, ey), (ex + ew, ey + eh), (255,0,255), 2 ) plt.imshow (eye_detect)

İndi bu sadə proqramı başa düşək:

Addım 1: numpy, matplotlib, open-cv və glob idxal edin

matplotlib-dən np kimi idxal pyplot kimi plt idxal cv2 Import Glob

Adım 2: Cari iş qovluğunuzdakı bütün JPG sənədlərini nəzərdən keçirin və "txtfiles" siyahısına yazın. Əgər glob ilə faylları necə oxumağı bilmək istəyirsinizsə, buraya vurun.

txtfiles = [] glob.glob-dakı fayl üçün ("*. jpg"): txtfiles.append (fayl)

Adım 3: Hər bir JPG sənədini cv2.imread () ilə oxuyun. Cv2.imread () funksiyası iki arqument götürür: birincisi, görüntünün özünə gedən yol, ikincisi isə görüntünün necə oxunması lazım olduğunu göstərir. Aşağıdakı üçdən birini ikinci arqument kimi istifadə edə bilərik.

cv2.IMREAD_COLOR - rəngli bir şəkil yükləmək üçün istifadə olunur. Görüntünün şəffaflığını laqeyd edir və standart bayraqdır. Alfa kanalı olmayan 8 bit şəkillər üçün. cv2.IMREAD_GRAYSCALE - şəkillərimizin boz rəngdə yüklənməsindən məsuldur. cv2.IMREAD_UNCHANGED - Alfa kanalından (RGBA) istifadə edərək bir şəkil yükləyir.

OpenCV ilə bir şəkil yüklədiyiniz zaman, standart olaraq BGR rəng boşluğuna yüklənir.

Sonra təqdim olunan şəklin dəyişdirilməməsi üçün bir surətini çıxarın.

img = cv2.imread (ix, cv2.IMREAD_COLOR) imgtest1 = img.copy ()

Adım 4: OpenCV Face Detector boz şəkillər gözlədiyi üçün görüntüyü boz bir şəkilə çevirin.

imgtest = cv2.cvtColor (imgtest1, cv2.COLOR_BGR2GRAY)

Adım 5: İndi saç təsnifatçısı təlim faylını giriş olaraq istifadə edərək üz tanıma və göz tanıma üçün saç təsnifatçılarımızı yükləməliyik (yüklənmiş XML sənədləri).

facecascade = cv2.CascadeClassifier ('D: \\ KJ \\ Nagesh \\ Yüklemeler \\ üz tanıma \\ haircascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier ('D: \\ KJ \\ Nagesh \\ Yüklemeler \\ üz tanıma \\ haircascade_eye.xml')

Addım 6: CascadeClassifier ilə şəkildən bir üzü necə tanıyırıq?

OpenCV-dən CascadedClassifier, ehtiyac duyduğunuz şeyi tam olaraq tanıyan DetectMultiScale () sayəsində işimizi burada da asanlaşdırdı.

DetectMultiScale (şəkil, miqyaslı Faktor, min qonşular)

Aşağıda detectMultiScale () üçün ötürülməsi lazım olan arqumentlər var.

Bu, obyektlərin tanınması üçün ümumi bir funksiyadır. Bu vəziyyətdə, üz şəlaləsi dediyimizdən bəri üzlər tanınır. Bir üz tapdıqda, üzün mövqelərinin siyahısını "Dikdörtgen (x, y, w, h)" şəklində qaytarır. Əks təqdirdə "Yox" qaytarılır.

  • Şəkil: İlk giriş boz rəngli görüntüdür.
  • scaleFactor: Bu funksiya sadəcə bir kameraya daha yaxın olduğu üçün bir üzün digərindən daha böyük göründüyü zaman meydana gələn saxta ölçü qəbulunu kompensasiya edir.
  • minNeighbors: obyektləri aşkar etmək üçün hərəkətli bir pəncərədən istifadə edən aşkarlama alqoritmi. Tapılan üzün elan edilməsindən əvvəl cari obyektin yaxınlığında nə qədər obyekt tapıldığını müəyyənləşdirir.
üzlər = facecascade.detectMultiScale (imgtest, scaleFactor = 1.2, minNeighbors = 5)

Adım 7: İndi hər şəkildəki üz sayını çap edin:

çap ("ümumi üzlərin sayı", len (üzlər))

Adım 8: Üzlərin siyahısını nəzərdən keçirin və şəkillərə düzbucaqlı şəkillər çəkin. Burada əsasən üzləri tapırıq, üzləri, ölçülərini qırırıq və düzbucaqlı çəkirik

üzlərdə (x, y, w, h) üçün:
face_detect = cv2. düzbucaqlı (imgtest, (x, y), (x + w, y + h), (255, 0, 255), 2) roi_gray = imgtest [y: y + h, x: x + w] roi_color = imgtest [y: y + h, x: x + w] plt.imshow (face_detect)

Adım 9: Bundan sonra göz aşkarlama aparırıq və maraqlı tərəf budur ki, bir gözü təsbit edəcək bir göz kürəsi tapılmayacaq. Əksər göz aşkarlama alqoritmləri də aşkar etmək üçün ətrafdakı dəri, göz qapaqları, kirpiklər və qaşlardan istifadə edir.

eyes = eye_cascade.detectMultiScale (roi_gray)
üçün (məsələn ey, ew, eh) gözlərdə:
eye_detect = cv2. düzbucaqlı (roi_color, (ex, ey), (ex + ew, ey + eh), (255,0,255), 2)
plt.imshow (eye_detect)

Nəhayət nəşrimiz:

Çıxış faylı: friends.PNGÇıxış faylı: Leonardo.PNGÇıxış faylı: Nagesh.PNGÇıxış faylı: Rahul.PNGÇıxış faylı: Amar.PNGÇıxış faylı: Sachin.PNGÇıxış faylı: Vishak.PNGÇıxış faylı: Shahrukh.PNGÇıxış faylı: Dog.PNGÇıxış faylı: download1.PNG

Sərin !!! Deyilmi?

Burada öyrənə biləcəyiniz bir şey, aldığımız son iki nəşrin üz tanıma etməməsidir, bu açıq-aşkar bu iki görüntünün tanınacaq bir üzünün olmamasıdır. Biri köpəyin şəkli, digəri mavi gül.

Nəticə:

Beləliklə, üz tanımağı yalnız bir neçə kod sətri ilə başladığımızı görə bilərik. Buradan, həmin şəxs haqqında ad və digər məlumatları proqnozlaşdıran bir üz tanıma modeli yaratmaq üçün openCV istifadə edə bilərik. Bu blog, bu gözəl Python proqramlaşdırma dilindən istifadə edərək sərin bir şey yaratmaq istəyən yeni başlayanlar üçündür.

İnsan bədəninin fərqli hissələrini müəyyənləşdirmək üçün bir çox saç təsnifatçısı var. Buraya baxın.

Yaxşı, bu blogda hamısı var. Oxuduğunuz üçün təşəkkür edirəm :)

Təhsilinizlə əylənin !!!

LinkedIn-də mənə çata bilərsiniz.