Mündəricat:

Real vaxt üz tanıma: sona çatan bir layihə: 8 addım (şəkillərlə)
Real vaxt üz tanıma: sona çatan bir layihə: 8 addım (şəkillərlə)

Video: Real vaxt üz tanıma: sona çatan bir layihə: 8 addım (şəkillərlə)

Video: Real vaxt üz tanıma: sona çatan bir layihə: 8 addım (şəkillərlə)
Video: Hören & Verstehen - Prüfungsvorbereitung B2/C1 2024, Noyabr
Anonim
Real vaxt üz tanıma: sona çatan bir layihə
Real vaxt üz tanıma: sona çatan bir layihə

OpenCV araşdıran son dərsliyimdə, OTOMATİK VİZYON MƏSƏLƏSİNİ TAKİB etməyi öyrəndik. İndi aşağıda gördüyünüz kimi PiCam-dan istifadə edərək üzləri real vaxtda tanıyacağıq:

Şəkil
Şəkil

Bu layihə bu fantastik "Açıq Mənbə Kompüter Görmə Kitabxanası", OpenCV ilə edildi. Bu təlimatda, Raspberry Pi (OS olaraq Raspbian) və Python -a diqqət yetirəcəyik, amma kodu Mac -da da sınadım və o da yaxşı işləyir. OpenCV, hesablama səmərəliliyi üçün və real vaxt tətbiqlərinə güclü diqqət yetirmək üçün hazırlanmışdır. Beləliklə, bir kamera istifadə edərək real vaxt üz tanıma üçün idealdır.

Üz Tanıma ilə bağlı tam bir layihə yaratmaq üçün 3 fərqli mərhələdə çalışmalıyıq:

  1. Üz Algılama və Məlumat Toplama
  2. Tanıdıcı öyrədin
  3. Üz Tanıma

Aşağıdakı blok diaqram bu mərhələləri davam etdirir:

Şəkil
Şəkil

Addım 1: BoM - Material Bill

Əsas hissələr:

  1. Raspberry Pi V3 - 32.00 ABŞ dolları
  2. 5 Megapiksel 1080p Sensor OV5647 Mini Kamera Video Modulu - 13.00 ABŞ dolları

Addım 2: OpenCV 3 Paketinin Qurulması

OpenCV 3 paketinin quraşdırılması
OpenCV 3 paketinin quraşdırılması

Raspbian (Stretch) son versiyasına qədər yenilənmiş bir Raspberry Pi V3 istifadə edirəm, buna görə OpenCV quraşdırmağın ən yaxşı yolu Adrian Rosebrock: Raspbian Stretch: OpenCV 3 + Python'u Raspberry Pi -də quraşdırın..

Pi -də OpenCV qurmaq üçün bir neçə fərqli bələdçi sınadım. Adrianın dərsliyi ən yaxşısıdır. Onun təlimatlarını addım-addım yerinə yetirərək eyni şeyi etməyi məsləhət görürəm.

Adrianın dərsini bitirdikdən sonra Pi -də təcrübələrimizi aparmağa hazır bir OpenCV virtual mühitiniz olmalıdır.

Virtual mühitimizə gedək və OpenCV 3 -ün düzgün qurulduğunu təsdiq edək.

Adrian, sistem dəyişənlərinizin düzgün qurulduğundan əmin olmaq üçün hər dəfə yeni bir terminal açanda "mənbə" əmrini yerinə yetirməyi məsləhət görür.

mənbə ~/.profil

Sonra virtual mühitimizə daxil olaq:

iş cv

İstəkdən əvvəl mətni (cv) görürsünüzsə, o zaman cv virtual mühitindəsiniz:

(cv) pi@moruq: ~ $Adrian, cv Python virtual mühitinin tamamilə müstəqil olduğuna və Raspbian Stretch yükləməsinə daxil olan standart Python versiyasından ayrıldığına diqqət çəkir. Beləliklə, qlobal sayt paketləri kataloqundakı Python paketləri cv virtual mühitində mövcud olmayacaq. Eynilə, cv sayt paketlərində quraşdırılmış Python paketləri Python-un qlobal quraşdırılması üçün əlçatan olmayacaq.

İndi Python tərcüməçinizə daxil olun:

piton

və 3.5 (və ya daha yuxarı) versiyasını işlədiyinizi təsdiq edin

Tərcüməçinin içərisində (">>>" görünəcək) OpenCV kitabxanasını idxal edin:

idxal cv2

Heç bir səhv mesajı görünməsə, OpenCV PYTHON VIRTUAL MÜHİTİNİZƏ düzgün şəkildə quraşdırılmışdır.

Qurulmuş OpenCV versiyasını da yoxlaya bilərsiniz:

cv2._ versiyası_

3.3.0 görünməlidir (və ya gələcəkdə buraxıla biləcək üstün bir versiya). Yuxarıdakı Terminal PrintScreen əvvəlki addımları göstərir.

Addım 3: Kameranızı sınayın

Kameranızın Test Edilməsi
Kameranızın Test Edilməsi

RPi -də OpenCV quraşdırıldıqdan sonra kameranızın düzgün işlədiyini yoxlamaq üçün test edək.

Raspberry Pi -də artıq bir PiCam qurduğunuzu düşünürəm.

Aşağıdakı Python kodunu IDE -yə daxil edin:

np kimi numpy idxal edin

cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while (True): ret, frame = cap.read () frame = cv2. çevir (çərçivə, -1) # Kameranı dikey olaraq çevir boz = cv2.cvtColor (çərçivə, cv2. COLOR_BGR2GRAY) cv2.imshow ('çərçivə', çərçivə) cv2.imshow ('boz', boz) k = cv2.waitKey (30) Və 0xff əgər k == 27: # fasilədən çıxmaq üçün 'ESC' düyməsinə basın.release () cv2.destroyAllWindows ()

Yuxarıdakı kod, PiCam tərəfindən yaradılacaq və hər ikisini də BGR rəngində və Boz rejimində əks etdirən video axını çəkəcək.

Diqqət yetirin ki, kameranı yığma üsulu ilə şaquli olaraq döndərmişəm. Əgər belə deyilsə, "çevir" əmr satırını şərh edin və ya silin.

Alternativ olaraq kodu GitHub -dan yükləyə bilərsiniz: simpleCamTest.py

İcra etmək üçün əmri daxil edin:

python simpleCamTest.py

Proqramı bitirmək üçün klaviaturanızdakı [ESC] düyməsini basmalısınız.

[ESC] düyməsini basmadan əvvəl video pəncərəsində siçanınızı vurun

Yuxarıdakı şəkil nəticəni göstərir.

Bəzi istehsalçılar kameranı açmağa çalışarkən problem tapdılar ("Təsdiq alınmadı" səhv mesajları). Bu, OpenCv quraşdırılması zamanı kamera işə salınmadığı təqdirdə, kamera sürücülərinin düzgün qurulmaması halında baş verə bilər. Düzəltmək üçün əmrdən istifadə edin:

sudo modprobe bcm2835-v4l2

Sürücünün yüklənməsi üçün /etc /modules faylının son sətrinə bcm2835-v4l2 əlavə edə bilərsiniz.

OpenCV haqqında daha çox məlumat əldə etmək üçün təlimatı izləyə bilərsiniz: loading -video-python-opencv-tutorial

Addım 4: Üz Algılama

Üz Tanıma
Üz Tanıma
Üz Tanıma
Üz Tanıma

Üz Tanıma mövzusunda ən əsas vəzifə, əlbəttə ki, "Üz Algılama" dır. Hər şeydən əvvəl, gələcəkdə tutulan yeni bir üzlə (Faza 3) müqayisə edildikdə, onu tanımaq üçün "Faz 1" çəkməlisiniz.

Bir üzü (və ya hər hansı bir obyekti) aşkar etməyin ən çox yayılmış yolu "Haar Cascade təsnifatçısı" ndan istifadə etməkdir.

Haar xüsusiyyətinə əsaslanan kaskad təsnifatçılarından istifadə edərək Nesne Algılama, Paul Viola və Michael Jones tərəfindən 2001-ci ildə "Sadə Xüsusiyyətlərin Artırılmış Kaskadından istifadə edərək Sürətli Obyekt Algılama" tərəfindən təklif olunan təsirli bir obyekt aşkarlama üsuludur. kaskad funksiyası bir çox müsbət və mənfi görüntüdən hazırlanır. Daha sonra digər şəkillərdəki obyektləri aşkar etmək üçün istifadə olunur.

Burada üz tanıma ilə işləyəcəyik. Başlanğıcda, alqoritmə təsnifatçını öyrətmək üçün çoxlu müsbət şəkillər (üz şəkilləri) və mənfi şəkillər (üzsüz şəkillər) lazımdır. Sonra ondan xüsusiyyətlər çıxarmalıyıq. Yaxşı xəbər odur ki, OpenCV bir məşqçi və bir detektorla birlikdə gəlir. Avtomobil, təyyarə və s. Kimi hər hansı bir obyekt üçün öz təsnifatçınızı öyrətmək istəyirsinizsə OpenCV -dən istifadə edərək birini yarada bilərsiniz. Bütün detalları burada verilmişdir: Cascade Classifier Training.

Öz təsnifatçınızı yaratmaq istəmirsinizsə, OpenCV-də artıq üz, göz, gülüş və s. Üçün əvvəlcədən öyrədilmiş bir çox təsnifatçılar var. Bu XML faylları haarcascades kataloqundan yüklənə bilər.

Kifayət qədər nəzəriyyə, gəlin OpenCV ilə bir üz detektoru yaradaq!

GitHub -dan faceDetection.py faylını yükləyin.

np kimi numpy idxal edin

cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3, 640) # set Genişlik cap.set (4, 480) # hündürlüyü True olaraq təyin edin: ret, img = cap.read () img = cv2.flip (img, -1) boz = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) üzlər = faceCascade.detectMultiScale (boz, miqyasFactor = 1.2, minNeighbors = 5, minSize = (20, 20)) (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] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff if k == 27: # break cap -dən çıxmaq üçün 'ESC' düyməsinə basın.release () cv2.destroyAllWindows ()

İnanın ya da inanmayın, Python və OpenCV istifadə edərək bir üzü aşkar etmək üçün yuxarıdakı bir neçə kod xətti kifayətdir.

Kameranı sınamaq üçün istifadə olunan son kodla müqayisə etdikdə, ona bir neçə hissənin əlavə olunduğunu anlayacaqsınız. Aşağıdakı xəttə diqqət yetirin:

faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml')

Bu, "təsnifatçını" yükləyən xəttdir (bu, layihə kataloqunuzun altında "Cascades/" adlı bir kataloqda olmalıdır).

Sonra, kameramızı quracağıq və döngənin içərisində giriş videomuzu boz rəngli rejimdə yükləyəcəyik (əvvəllər gördüyümüz kimi).

İndi miqyas faktoru, qonşuların sayı və aşkar edilmiş üzün minimum ölçüsü kimi bir çox vacib parametrləri ötürərək təsnifat funksiyamızı çağırmalıyıq.

üzlər = faceCascade.detectMultiScale (boz, miqyaslıFaktor = 1.2, minQonşular = 5, min Ölçü = (20, 20))

Harada,

  • boz, gri tonlamalı giriş şəklidir.
  • scaleFactor, hər bir görüntü miqyasında görüntü ölçüsünün nə qədər kiçildiyini ifadə edən parametrdir. Ölçəkli piramida yaratmaq üçün istifadə olunur.
  • minNeighbors, hər bir namizəd dikdörtgənin onu saxlamaq üçün neçə qonşuya sahib olmasını təyin edən bir parametrdir. Daha yüksək rəqəm daha aşağı yanlış pozitivlər verir.
  • minSize, üz hesab ediləcək minimum düzbucaqlı ölçüdür.

Bu funksiya şəkildəki üzləri aşkar edəcək. Sonra, məsələn, mavi bir düzbucaqlı istifadə edərək, şəkildəki üzləri "qeyd etməliyik". Bu kodun bu hissəsi ilə edilir:

üzlərdə (x, y, w, h) üçün:

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]

Üzlər tapılarsa, aşkar edilmiş üzlərin mövqelərini sol yuxarı küncündə (x, y) olan və eni "w", hündürlüyü "h" olan ==> (x, y, w, h). Zəhmət olmasa yuxarıdakı şəklə baxın.

Bu yerləri əldə etdikdən sonra üz üçün "ROI" (çəkilmiş düzbucaqlı) yarada və nəticəni imshow () funksiyası ilə təqdim edə bilərik.

Rpi Terminalını istifadə edərək, yuxarıdakı python Scriptini python mühitinizdə işlədin:

python faceDetection.py

Nəticə:

Şəkil
Şəkil

"Göz algılama" və ya hətta "gülümsəmə algılama" üçün təsnifatçılar da daxil edə bilərsiniz. Bu hallarda, təsnifat funksiyasını və üz döngəsinin içərisinə düzbucaqlı çəkməyi daxil edəcəksiniz, çünki üzdən kənarda bir göz və ya gülümsəmə aşkar etməyin heç bir mənası yoxdur.

Unutmayın ki, eyni kodda bir neçə təsnifatçının olması, bu aşkarlama üsulu (HaarCascades) böyük miqdarda hesablama gücündən istifadə etdikdə emal prosesini ləngidir. Bir masaüstündə onu idarə etmək daha asandır.

GitHub -da başqa nümunələr tapa bilərsiniz:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

Və yuxarıdakı şəkildə nəticəni görə bilərsiniz.

Üz Algılamasını daha yaxşı başa düşmək üçün aşağıdakı təlimatı da izləyə bilərsiniz:

Haar Cascade Object Detection Face & Eye OpenCV Python Dərsliyi

Addım 5: Məlumat Toplama

Məlumat toplanması
Məlumat toplanması
Məlumat Toplanması
Məlumat Toplanması

Hər şeydən əvvəl, Ramiz Racaya fotoşəkillərdəki Üz Tanıma mövzusunda böyük işinə görə təşəkkür etməliyəm:

OPENCV VƏ PYTHON İSTİFADƏ EDƏN ÜZÜN TANINMASI: BAŞLAYICININ KILAVUZU

və eyni zamanda videodan istifadə edərək çox əhatəli bir dərs hazırlayan Anirban Kar:

YÜZ TANINMA - 3 hissə

Həqiqətən hər iki dərsliyə də baxmağınızı məsləhət görürəm.

Bunu söyləyərək layihəmizin birinci mərhələsinə başlayaq. Burada edəcəyimiz şey, son addımdan başlayaraq (Üz Algılama), sadəcə hər bir şəxsiyyət üçün, üz tanıma üçün istifadə edilən hissəsi olan boz rəngli fotoşəkillər qrupunu saxlayacağımız bir verilənlər bazası yaradacağıq.

Əvvəlcə layihənizi inkişaf etdirdiyiniz bir kataloq yaradın, məsələn, FacialRecognitionProject:

mkdir FacialRecognitionProject

Bu kataloqda, layihəmiz üçün yaradacağımız 3 python skriptindən başqa, Üz Təsnifatçısını da saxlamış olmalıyıq. GitHub -dan yükləyə bilərsiniz: haarcascade_frontalface_default.xml

Sonra, üz nümunələrimizi saxlayacağımız və "verilənlər bazası" adlandıracağımız bir alt kataloq yaradın:

mkdir verilənlər bazası

Kodu GitHub -dan yükləyin: 01_face_dataset.py

idxal cv2

import os cam = cv2. VideoCapture (0) cam.set (3, 640) # set video width cam.set (4, 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Hər bir şəxs üçün, bir rəqəmli üz id daxil edin face_id = giriş ('\ n istifadəçi id nömrəsini daxil edin ==>') yazdır ("\ n [BİLGİ] Üz tutma işə salınır. Kameraya baxın və gözləyin…") # Fərdi nümunə götürmə üz sayı sayını başladın = 0 isə (Doğru): ret, img = cam.read () img = cv2.flip (img, -1) # video görüntüsünü dikey olaraq çevir boz = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) üzlər = face_detector.detectMultiScale (boz, 1.3, 5) (x, y, w, h) üzlərində: cv2.dörtgen (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Çəkilən görüntünü cv2.imwrite ("verilənlər bazası/İstifadəçi." + str (face_id) + '.' + str (say) + ".jpg", boz [y: y + h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # k == 27: break elif count> = 30: videodan çıxmaq üçün 'ESC' düyməsini basın. # 30 üz nümunəsi alın və video fasiləsini dayandırın # Do ab bu təmizləmə çapı ("\ n [INFO] Proqramdan çıxmaq və təmizləmə işləri") cam.release () cv2.destroyAllWindows ()

Kod, üz tanıma üçün gördüyümüz koda çox bənzəyir. Əlavə etdiyimiz, bir istifadəçi identifikatorunu ələ keçirmək üçün "giriş əmri" idi, bu tam ədəd olmalıdır (1, 2, 3 və s.)

face_id = giriş ('\ n istifadəçi id nömrəsinə daxil olun son ==>')

Və çəkilmiş çərçivələrin hər biri üçün onu "verilənlər bazası" qovluğunda bir fayl olaraq qeyd etməliyik:

cv2.imwrite ("verilənlər bazası/İstifadəçi." + str (face_id) + '.' + str (say) + ".jpg", boz [y: y + h, x: x + w])

Qeyd edək ki, yuxarıdakı faylı saxlamaq üçün "os" kitabxanasını idxal etmisiniz. Hər bir faylın adı quruluşa uyğun olacaq:

İstifadəçi.face_id.count.jpg

Məsələn, face_id = 1 olan bir istifadəçi üçün verilənlər bazası/ qovluqdakı 4 -cü nümunə faylı belə olacaq:

İstifadəçi.1.4.jpg

Pi -dən yuxarıdakı fotoda göstərildiyi kimi. Kodumda hər iddən 30 nümunə çəkirəm. Bunu son "elif" də dəyişə bilərsiniz. Nümunələrin sayı, üz nümunələrinin tutulduğu döngəni qırmaq üçün istifadə olunur.

Python skriptini işlədin və bir neçə id çəkin. Yeni bir istifadəçini birləşdirmək istədiyiniz zaman (və ya fotoşəkilləri artıq mövcud olan birinin şəklini dəyişdirmək üçün) hər dəfə işə salmalısınız.

Addım 6: Təlimçi

Təlimçi
Təlimçi

Bu ikinci mərhələdə, verilənlər bazamızdakı bütün istifadəçi məlumatlarını və OpenCV Recognizer -in "təlimatçısı" nı götürməliyik. Bu birbaşa xüsusi bir OpenCV funksiyası ilə edilir. Nəticə "trainer/" qovluğunda saxlanılacaq.yml faylı olacaq.

Beləliklə, təlim keçmiş məlumatları saxlayacağımız bir alt kataloq yaratmağa başlayaq:

mkdir məşqçi

GitHub -dan ikinci python skriptini yükləyin: 02_face_training.py

idxal cv2

PIL iddən np olaraq şəkil idxal edin Image import os # Path image data database yolu = 'verilənlər bazası' tanıyıcısı = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); şəkilləri və etiket məlumatlarını əldə etmək üçün # funksiyası getImagesAndLabels (yol): imagePaths = [os.path.join (yol, f) in f in os.listdir (yol)] faceSamples = idP = imagePath üçün imagePath üçün: PIL_img = Image.open (imagePath).convert ('L') # boz rəngə çevirin img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. split (".") [1]) üz = detector.detectMultiScale (img_numpy) (x, y, w, h) üçün: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Təlim üzləri. Bir neçə saniyə çəkəcək. Gözləyin…") üzlər, ids = getImagesAndLabels (yol) tanıyıcı.train (üzlər, np.array (ids)) # Modeli təlimçi/təlimçi.yml tanıyıcıya yazın. yazın ('məşqçi/məşqçi.yml') # tanıyıcı.save () Mac -da çalışdı, amma Pi -də deyil ("\ n [INFO] {0} üzləri təlim keçdi. Proqramdan çıxılır". format (len (np.unique (ids)))))

Rpi -də PIL kitabxanasının quraşdırıldığını təsdiq edin. Əks təqdirdə, Terminalda aşağıdakı əmri işlədin:

yastığı quraşdırın

OpenCV paketinə daxil olan LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) Face Recognizer kimi tanınan kimi istifadə edəcəyik. Bunu aşağıdakı sətirdə edirik:

tanıyıcı = cv2.face. LBPHFaceRecognizer_create ()

"GetImagesAndLabels (yol)" funksiyası, kataloqdakı bütün şəkilləri çəkəcək: "verilənlər bazası/", 2 sıra qaytaran: "İdlər" və "üzlər". Bu serialları giriş olaraq "tanıyıcımızı hazırlayacağıq":

tanıyıcı.train (üzlər, idlər)

Nəticədə, "trainer.yml" adlı bir fayl əvvəllər bizim tərəfimizdən yaradılmış təlimçi qovluğunda saxlanılacaq.

Bu belədir! Təsdiq üçün göstərdiyim son çap bəyanatını, öyrətdiyimiz İstifadəçinin üzlərinin sayını daxil etdim.

Mərhələ 1 -i hər dəfə yerinə yetirdiyiniz zaman 2 -ci mərhələ də işə salınmalıdır

Addım 7: Tanıyıcı

Tanıyıcı
Tanıyıcı
Tanıyıcı
Tanıyıcı

İndi layihəmizin son mərhələsinə çatdıq. Burada kameramızda təzə bir üz tutacağıq və əgər bu şəxsin üzü əvvəllər çəkilərək öyrədilmiş olsaydı, tanıyıcımız identifikatorunu və indeksini qaytaran bir "proqnoz" verəcək, tanıyıcının bu matça nə qədər əmin olduğunu göstərir.

GitHub -dan 3 -cü faza python skriptini yükləyək: 03_face_recognition.py.

idxal cv2

np kimi id nömrəsi id id = cv2.face. LBPHFaceRecognizer_create () tanıyıcı.read ('trainer/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath); font = cv2. FONT_HERSHEY_SIMPLEX # id sayar id = 0 # id ilə əlaqəli adlar: məsələn ==> Marcelo: id = 1 və s adlar = ['Heç biri', 'Marcelo', 'Paula', 'Ilza', 'Z ',' W '] # Real vaxtda video çəkilişini başladın və başladın cam = cv2. VideoCapture (0) cam.set (3, 640) # set video widht cam.set (4, 480) # set video height # Min pəncərə ölçüsünü təyin edin bir üz olaraq tanınmaq üçün minW = 0.1*cam.get (3) minH = 0.1*cam.get (4) isə True: ret, img = cam.read () img = cv2.flip (img, -1) # (X, y), w, h) üzlərində: cv2.dörtbucaq (img, (x, y), (x+w, y+h), (0, 255, 0), 2) id, güvən = tanıyıcı.predikt (boz [y: y+h, x: x+w]) # Güvənin onlardan az olub olmadığını yoxlayın 100 ==> "0" mükəmməl uyğunluq olarsa (güvənlik <100): id = adlar [id] güvən = "{0}% ".format (dəyirmi (100 - güvən)) başqa: id =" naməlum "güvən =" {0}%". format (dəyirmi (100 - konf idence)) cv2.putText (img, str (id), (x+5, y-5), font, 1, (255, 255, 255), 2) cv2.putText (img, str (güvən), (x+5, y+h-5), font, 1, (255, 255, 0), 1) cv2.imshow ('kamera', img) k = cv2.waitKey (10) & 0xff # 'ESC' düyməsini basın k == 27 olduqda videodan çıxmaq üçün: break # Bir az təmizləmə çapı ("\ n [INFO] Proqramdan çıxmaq və təmizləmə işləri") cam.release () cv2.destroyAllWindows ()

Buraya yeni bir sıra daxil edirik, buna görə nömrələnmiş idlər yerinə "adlar" göstərəcəyik:

adlar = ['Heç biri', 'Marcelo', 'Paula', 'İlza', 'Z', 'W']

Beləliklə, məsələn: Marcelo id = 1 ilə istifadəçi olacaq; Paula: id = 2 və s.

Bundan sonra, haasCascade təsnifatçısı ilə əvvəllər etdiyimiz kimi bir üz aşkar edəcəyik. Aşkar edilmiş bir üzə sahib olaraq yuxarıdakı koddakı ən vacib funksiyanı çağıra bilərik:

id, güvən = tanıyıcı.predikt (üzün boz hissəsi)

Tanıdıcı.predict (), analiz ediləcək üzün tutulan bir hissəsini parametr olaraq alacaq və identifikatorunu və tanıyanın bu matçla bağlı nə qədər güvəndiyini göstərən ehtimal sahibini qaytaracaq.

Diqqət yetirin ki, inam indeksi "sıfıra" qayıdacaq, əgər mükəmməl bir uyğunluq olarsa

Və nəhayət, tanınan şəxs bir üzü proqnozlaşdıra bilsəydi, ehtimal olunan id ilə şəklin üstünə bir mətn qoyuruq və "ehtimal" ın nə qədər olduğunu ("ehtimal" = 100 - güvən indeksi). Əks təqdirdə, üzünə "bilinməyən" bir etiket qoyulur.

Nəticədə bir-g.webp

Şəkil
Şəkil

Yuxarıdakı şəkildə, bu layihə ilə edilən bəzi testləri göstərirəm, burada da tanıyıcının işlədiyini yoxlamaq üçün fotoşəkillərdən istifadə etmişəm.

Addım 8: Nəticə

Nəticə
Nəticə

Həmişə olduğu kimi, ümid edirəm ki, bu layihə başqalarına maraqlı elektronika dünyasına yol tapmağa kömək edə bilər!

Detallar və son kod üçün GitHub depozitimi ziyarət edin: OpenCV-Face-Recognition

Daha çox layihə üçün blogumu ziyarət edin: MJRoBot.org

Aşağıda "avtomatik üz izi və üz tanıma üçün digər üsulları" araşdıracağımız gələcək bir dərslikdən bir az aşağıda:

Şəkil
Şəkil

Dünyanın cənubundan salamlar!

Növbəti təlimatımda görüşənədək!

Çox sağ ol, Marcelo

Tövsiyə: