Mündəricat:

Üz Tanıma+Tanıma: 8 Addım (Şəkillərlə birlikdə)
Üz Tanıma+Tanıma: 8 Addım (Şəkillərlə birlikdə)

Video: Üz Tanıma+Tanıma: 8 Addım (Şəkillərlə birlikdə)

Video: Üz Tanıma+Tanıma: 8 Addım (Şəkillərlə birlikdə)
Video: Yalan danışanı 8 hərəkəti ilə bilmək olar 2024, Noyabr
Anonim
Image
Image
Üz Tanıma+Tanıma
Üz Tanıma+Tanıma

Bu, bir kameradan OpenCV ilə üz tanıma və tanıma işlərinin sadə bir nümunəsidir. QEYD: SENSOR MÜSABİQƏSİ ÜÇÜN BU LAYİHƏDİ VƏ YÜZLƏRİ İZLƏYİCİ VƏ TANIMA SENSÖRÜ KAMERA İSTİFADƏ ETDİM. Beləliklə, Məqsədimiz Bu sessiyada 1. Anaconda qurun 2. Açıq CV Paketini yükləyin 3. Ətraf Mühit Dəyişənlərini təyin edin 4. 5 təsdiq etmək üçün test edin. Üz tanıma kodu yaradın 6. Məlumat toplusu yaratmaq üçün kod yaradın 7. Tanıyanı öyrətmək üçün kod hazırlayın 8. Üzləri tanımaq üçün kod yaradın və Nəticə.

Addım 1: Anaconda qurun

Anaconda quraşdırın
Anaconda quraşdırın

Anaconda, əslində NumPy, Pandas, IPython Notebook və s. Kimi faydalı paketlərlə birlikdə göndərilən gözəl bir şəkildə paketlənmiş Python IDE -dir. Elmi ictimaiyyətin hər yerində tövsiyə olunur. Quraşdırmaq üçün Anaconda -ya baxın.

Addım 2: Açıq CV Paketini Yükləyin

Açıq CV Paketini Yükləyin
Açıq CV Paketini Yükləyin

Əvvəlcə tam OpenCV paketini yükləmək üçün rəsmi OpenCV saytına daxil olun. İstədiyiniz versiyanı seçin (2.x və ya 3.x). Python 2.x və OpenCV 2.x üzərindəyəm - əsasən OpenCV -Python Dərsliklərinin bu şəkildə qurulması/əsaslandığı üçün.

Mənim vəziyyətimdə, paketi (əslində bir qovluq) birbaşa F sürücümə çıxartdım. (F: / opencv).

Addım 3: Ətraf Mühit Dəyişənlərini təyin edin

Ətraf Mühit Dəyişənlərini təyin edin
Ətraf Mühit Dəyişənlərini təyin edin

Cv2.pyd faylını kopyalayın və yapışdırın

Anaconda Site-paketləri qovluğunda (məsələn, F: / Program Files / Anaconda2 / Lib / site-packages) idxal edə biləcəyiniz Python paketləri var. Məqsədimiz, cv2.pyd faylını bu qovluğa kopyalayıb yapışdırmaqdır (Python kodlarımızda idxal cv2 -dən istifadə etmək üçün.).

Bunu etmək üçün cv2.pyd faylını kopyalayın …

Bu OpenCV kataloqundan (başlanğıc hissəsi maşınınızda bir az fərqli ola bilər):

# Python 2.7 və 64 bitlik maşın: F: / opencv / build / python / 2.7 / x64# Python 2.7 və 32 bitli maşın: F: / opencv / build / python / 2.7 / x84

Bu Anaconda kataloquna (başlanğıc hissəsi maşınınızda bir az fərqli ola bilər):

F: / Program Files / Anaconda2 / Lib / site-paketləri

Bu addımı atdıqdan sonra indi Python kodunda import cv2 istifadə edə biləcəyik. AMMA, FFMPEG -in (video codec) işləməsini təmin etmək üçün hələ də bir az daha çox iş görməliyik (videoları emal etmək kimi şeylər etməyimizə imkan verir.)

"Kompüterim" düyməsini (və ya Windows 8.1-də "Bu PC") sağ vurun-> Xüsusiyyətləri sol vurun-> "Ətraflı" sekmesini sol vurun-> "Ətraf Mühit Dəyişənləri …" düyməsini sol vurun. Yeni İstifadəçi Dəyişənini əlavə edin. OpenCV-yə işarə etmək üçün (ya 32 bitlik sistem üçün x86, ya da 64 bitlik sistem üçün x64.) Hal-hazırda 64 bitlik bir maşındayam.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

İstifadəçi Dəyişən Yoluna %OPENCV_DIR %\ bin əlavə edin.

Məsələn, mənim PATH istifadəçi dəyişənim belə görünür …

Əvvəl:

F: / İstifadəçilər / Johnny / Anaconda; C: / İstifadəçilər / Johnny / Anaconda / Skriptlər

Sonra:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

İşimiz budur! FFMPEG istifadəyə hazırdır!

Addım 4: Təsdiq etmək üçün test edin

Təsdiq etmək üçün test edin
Təsdiq etmək üçün test edin
Təsdiq etmək üçün test edin
Təsdiq etmək üçün test edin

İndi bunları Anaconda'da (Spyder IDE vasitəsilə) edə biləcəyimizi sınamalıyıq:

  • OpenCV paketini idxal edin
  • FFMPEG yardım proqramından istifadə edin (videoları oxumaq/yazmaq/emal etmək üçün)

Test 1: OpenCV idxal edə bilərikmi?

Anaconda'nın OpenCV-Python paketini (cv2) idxal edə biləcəyini təsdiqləmək üçün, bunları IPython Konsolunda verin:

idxal cv2

cv2._ versiyasını çap edin

Cv2 paketi heç bir səhv olmadan tamam idxal olunursa və cv2 versiyası çap olunarsa, hamımız yaxşıyıq!

Test 2: FFMPEG codecindən istifadə edə bilərikmi?

Bir nümunə qoyun

giriş_video.mp4

bir qovluqdakı video fayl. Bacardığımızı yoxlamaq istəyirik:

  • bu.mp4 video faylını oxuyun və
  • yeni bir video faylı yazın (.avi və ya.mp4 və s. ola bilər)

Bunu etmək üçün test python koduna sahib olmalıyıq, ona test.py deyin. Nümunə ilə eyni qovluğa yerləşdirin

giriş_video.mp4

fayl.

Bu nədir

test.py

kimi görünə bilər (Qeyd: Pete və Warrenin şərh sahəsindəki təklifləri sayəsində - orijinal test kodumu onunla əvəz etdim - özünüz sınayın və bunun daha yaxşı işlədiyini bizə bildirin):

idxal cv2

cap = cv2. VideoCapture ("input_video.mp4") cap.isOpened () # True = videonu uğurla oxuyun. Yanlış - videonu oxumaq. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print.isOpened () # True = videonu uğurla yaz. Yanlış - video yaza bilməyin. cap.release () out.release ()

Bu test ÇOX ƏHƏMİYYƏTLİDİR. Video fayllarını işləmək istəyirsinizsə, Anaconda / Spyder IDE -nin FFMPEG (video codec) istifadə edə biləcəyini təmin etməlisiniz. İşləməyim üçün günlər lazım oldu. Ancaq ümid edirəm ki, sizə daha az vaxt lazımdır!:) Qeyd: Anaconda Spyder IDE -dən istifadə edərkən daha çox vacib bir ipucu. Cari İş Kataloğunu (CWD) yoxladığınızdan əmin olun !!!

Addım 5: Üz Tanıma üçün Kod hazırlayın

Üz Tanıma Kodunu yaradın
Üz Tanıma Kodunu yaradın
Üz Tanıma Kodu yaradın
Üz Tanıma Kodu yaradın

Məqsəd

Bu sessiyada,

  • Haar Feature-based Cascade Classifiers istifadə edərək üz tanıma əsaslarını görəcəyik
  • Eyni şeyi göz tanıma və s. Üçün uzadacağıq

OpenCV-də Haar-kaskad aşkarlanması

Burada aşkarlama ilə məşğul olacağıq. OpenCV artıq üz, göz, gülüş və s. Üçün bir çox əvvəlcədən öyrədilmiş təsnifatçını ehtiva edir. Bu XML faylları opencv/data/haarcascades/qovluğunda saxlanılır. OpenCV ilə üz və göz detektoru yaradaq. İlk olaraq lazım olan XML təsnifatlarını yükləməliyik. Sonra giriş şəklimizi (və ya videomuzu) boz rəngli rejimdə yükləyin və ya kameradan istifadə edə bilərik (Real vaxt üz tanıma üçün)

np kimi numpy idxal edin

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/haarcade/data/.xml ') cap = cv2. VideoCapture (0) isə 1: ret, img = cap.read () boz = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) üzlər = face_cascade.detectMultiScale (boz, 1.5, 5) (üçün) x, y, w, h) üzlərində: cv2.dörtgen (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = boz [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.dörtbucaq (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (face)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff əgər k == 27: break cap.release () cv2.destroyAllWindows ()

Addım 6: Məlumat dəsti yaratmaq üçün kod hazırlayın

Məlumat dəsti yaratmaq üçün kod hazırlayın
Məlumat dəsti yaratmaq üçün kod hazırlayın
Məlumat dəsti yaratmaq üçün kod hazırlayın
Məlumat dəsti yaratmaq üçün kod hazırlayın

Üz tanıma ilə məşğuluq, buna görə də bəzi üz şəkillərinə ehtiyacınız olacaq! Ya öz məlumat bazanızı yarada bilərsiniz, ya da mövcud üz verilənlər bazalarından birindən başlaya bilərsiniz, https://face-rec.org/databases/ sizə müasir bir baxış təqdim edir. Üç maraqlı verilənlər bazasıdır (təsvirin hissələri https://face-rec.org saytından alınmışdır):

  • AT&T Facedatabase
  • Yale Facedatabase A.
  • Genişləndirilmiş Yale Facedatabase B

BURADA öz veritabanımdan istifadə edirəm …. aşağıda göstərilən kodun köməyi ilə:

np kimi numpy idxal edin

cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('user id daxil edin) sampleN = 0; while 1: ret, img = cap.read () boz = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) üzlər = face_cascade.detectMultiScale (boz, 1.3, 5) üzlərində (x, y, w, h): sampleN = nümunə N+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", boz [y: y+h, x: x+w]) cv2.dörtgen (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img'), img) cv2.waitKey (1) əgər sampleN> 20: cap.release () cv2.destroyAllWindows ()

Addım 7: Tanınmaçını öyrətmək üçün kod hazırlayın

Tanıyanı öyrətmək üçün kod hazırlayın
Tanıyanı öyrətmək üçün kod hazırlayın

Təlim dəstini hazırlamaq üçün bir funksiya yaradın

İndi bir funksiyanı təyin edəcəyik

getImagesWithID (yol)

ki, görüntü verilənlər bazasına mütləq yolu giriş arqumenti olaraq götürür və biri aşkar edilmiş üzləri, digəri isə həmin üz üçün müvafiq etiketi ehtiva edən 2 siyahı tuplunu qaytarır. Məsələn, üz siyahısındakı ith indeksi verilənlər bazasındakı 5 -ci fərdi təmsil edirsə, etiketlər siyahısındakı müvafiq ith yeri 5 -ə bərabərdir.

İndi verilənlər bazası üzlərini (6 -cı addımda yaradılmışdır) aşağıda verilmiş kodun köməyi ilə.yml faylına çevirin:

id id

PIL idxalından nv idxal cv2 olaraq numpy import Image # Üz tanıma üçün LBPH Üz Tanıma tanıyıcısı = 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 (yol) üzləri = IDP = imagePaths -də imagePath üçün: # Şəkli oxuyun və boz rəngli üzlərə çevirinImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Şəkil ID etiketini əldə edin = int (os.path.split (imagePath) [-1]. Split (".") [1]) # Şəkildəki üzü aşkar edin. (ID) cv2.imshow ("Tərbiyə üçün üzlər əlavə olunur", faceNP) cv2.waitKey (10) np.array (ID -lər) qaytarır, Id -lər, sifətlər = getImagesWithID (yol) tanıyıcı.train (üzlər, idlər) tanıyıcı.sadda saxla) ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

bu kodu istifadə edərək, bütün üz verilənlər bazası tək bir.yml faylına çevrilir ….. yolun yeri ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Addım 8: Üzləri və Nəticəni tanımaq üçün Kod hazırlayın

Guyzz, veb kameranızın köməyi ilə üzləri tanımaq üçün kod yarada biləcəyimiz son addımdır BU ADIMDA İFASA GƏTƏCƏK İKİ ƏMƏLİYYAT VAR …. 1. kameradan videonun çəkilməsi 2..yml faylınızla müqayisə edin

npimport cv2 face_cascade = cv2. CcadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') kimi numpy idxal edin = 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 () boz = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) üzlər = üzlərdə (x, y, w, h) üçün face_cascade.detectMultiScale (boz, 1.5, 5): cv2.dörtgen (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (boz [y: y+h, x: x+w]) əgər (id == 2): id == 1 olarsa id = "alok": id == 3 olarsa id = "alok": id == 4 olarsa id = "anjali": id = "Gaurav" id = = 5: id = 'rahul' 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'): break cap.release ()

cv2.destroyAllWindows ()

və nəhayət nəticə gözlərinizin önündə görünəcək …… zip faylını aşağıdakı linkdən də yükləyə bilərsiniz: Kodları yükləmək üçün bura daxil olun. Beləliklə, bu təlimatda OpenCV istifadə edərək üz tanıma+tanıma vəzifəsini yerinə yetirdik …. bu təlimat verən kimi ….. plzzz abunə olun və mənə səs verin …… təşəkkürlər dostlar:)

Tövsiyə: