Yüz tanıma sistemi ile 7/24 çalışan kamera sistemi yapmak istiyorum

VERİ SETİ KODLARI :
#! /usr/bin/env python3.8
# -- coding: UTF-8 --

from io import open
import time
import datetime
from datetime import date
import os,json
import sys

#reload(sys)
#sys.setdefaultencoding("utf-8")

import cv2
import numpy as np
from PIL import Image

kamera = cv2.VideoCapture(0)
kamera.set(3, 640) # video genişliğini belirle
kamera.set(4, 480) # video yüksekliğini belirle
face_detector = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_frontalface_default.xml')
# Her farklı kişi için farklı bir yüz tamsayısı ata
# face_id = input('\n enter user id end press <return> ==>  ')
MAXFOTOSAY = 200 # Her bir yüz için kullanılacak imaj sayısı
kl = input("İsminizi Giriniz : ")
os.mkdir("veriseti/"+kl)
face_id = input("Face İD Numarası Giriniz : ")
print("\n [INFO] Kayıtlar başlıyor. Kameraya bak ve bekle ...")
 
say = 0
 
while(True):
    ret, img = kamera.read()
    # img = cv2.flip(img, -1) # gerekiyorsa kullan
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    yuzler = face_detector.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in yuzler:
        cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)
        say += 1
        # Yakalanan imajı veriseti klasörüne kaydet
        cv2.imwrite("veriseti/" + kl + "/" + str(face_id) + '.' + str(say) + ".jpg", gray[y:y+h,x:x+w])
        cv2.imshow('imaj', img)
        print("Kayıt no: ",say)
    k = cv2.waitKey(25) & 0xff
    if k == 27:
        break
    elif say >= MAXFOTOSAY:
         break
# Belleği temizle
print("\n [INFO] Program sonlanıyor ve bellek temizleniyor.")
kamera.release()
cv2.destroyAllWindows()

!YÜZ VERİ EĞİTİMİ KODLARI:

#! /usr/bin/env python3.8
# -*- coding: UTF-8 -*-

from io import open
import time
import datetime
from datetime import date
import os,json
import sys

#reload(sys)
#sys.setdefaultencoding("utf-8")

import cv2
import numpy as np
from PIL import Image

# Verilerin yolu
kl = input("İsminizi Giriniz : ")
path = 'veriseti/'+ kl
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier("opencv/data/haarcascades/haarcascade_frontalface_default.xml")
 
# imajların alınması ve etiketlenmesi için fonksiyon
def getImagesAndLabels(path):
    imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
    ornekler=[]
    ids = []
    for imagePath in imagePaths:
        PIL_img = Image.open(imagePath).convert('L')    # gri
        img_numpy = np.array(PIL_img,'uint8')
        id = int(os.path.split(imagePath)[-1].split(".")[0])
        # print("id= ",id)
        yuzler = detector.detectMultiScale(img_numpy)
        for (x,y,w,h) in yuzler:
            ornekler.append(img_numpy[y:y+h,x:x+w])
            ids.append(id)
    return ornekler,ids
print ("\n [INFO] yuzler eğitiliyor. Birkaç saniye bekleyin ...")
yuzler,ids = getImagesAndLabels(path)
recognizer.train(yuzler, np.array(ids))
# Modeli egitim/egitim.yml dosyasına kaydet
recognizer.write('veriler.yml') # Dikkat! recognizer.save() Raspberry Pi üzerinde çalışmıyor
# Eğitilen yüz sayısını göster ve kodu sonlandır
print(f"\n [INFO] {len(np.unique(ids))} yüz eğitildi. Betik sonlandırılıyor.")
 
# print(yuzler)

! Yüz TANIMA KODLARI :

#! /usr/bin/env python3.8
# -*- coding: UTF-8 -*-

from io import open
import time
import datetime
from datetime import date
import os,json
import cv2
import numpy as np
import sys

#reload(sys)
#sys.setdefaultencoding("utf-8")

from PIL import Image, ImageDraw, ImageFont
 
def print_utf8_text(image, xy, text, color):  # utf-8 karakterleri
    fontName = 'FreeSerif.ttf'  # 'FreeSansBold.ttf' # 'FreeMono.ttf' 'FreeSerifBold.ttf'
    font = ImageFont.truetype(fontName, 24)  # font seçimi
    img_pil = Image.fromarray(image)  # imajı pillow moduna dönüştür
    draw = ImageDraw.Draw(img_pil)  # imajı hazırla
    draw.text((xy[0],xy[1]), text, font=font,
              fill=(color[0], color[1], color[2], 0))  # b,g,r,a
    image = np.array(img_pil)  # imajı cv2 moduna çevir (numpy.array())
    return image
 
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('veriler.yml')
cascadePath = "opencv/data/haarcascades/haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
font = cv2.FONT_HERSHEY_SIMPLEX
# id sayacını başlat
id = 0
names = ['None', 'Hasan']
 
# Canlı video yakalamayı başlat
kamera = cv2.VideoCapture(0)
kamera.set(3, 1000)  # video genişliğini belirle
kamera.set(4, 800)  # video yüksekliğini belirle
# minimum pencere boyutunu belirle
minW = 0.1 * kamera.get(3)  # genişlik
minH = 0.1 * kamera.get(4)  # yükseklik
while True:
    ret, img = kamera.read()
    gri = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
    yuzler = faceCascade.detectMultiScale(
        gri,
        scaleFactor=1.2,
        minNeighbors=5,
        minSize=(int(minW), int(minH)),
    )
    for (x, y, w, h) in yuzler:
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
        id, uyum = recognizer.predict(gri[y:y + h, x:x + w])
        if (uyum >= 45):
            id = names[id]
            uyum = f"Uyum=  {round(uyum,50)}%"
        elif (uyum <= 45):
            id = "Bilinmiyor"
            uyum = f"Uyum=  {round(uyum,0)}%"
 
        color = (255,255,255)
        img=print_utf8_text(img,(x + 5, y - 25),str(id),color) # Türkçe karakterler
        # cv2.putText(img, str(id), (x + 5, y - 5), font, 1, (255, 255, 255), 2)
        cv2.putText(img, str(uyum),(x + 5, y + h + 25), font, 1, (255, 255, 0), 1)
    cv2.imshow('kamera', img)
    k = cv2.waitKey(10) & 0xff  # Çıkış için Esc veya q tuşu
    if k == 27 or k==ord('q'):
        break
# Belleği temizle
print("\n [INFO] Programdan çıkıyor ve ortalığı temizliyorum")
kamera.release()
cv2.destroyAllWindows()

HEDEFİM ARKADAŞLAR ŞU YÜZ TANIMADA BEN 5 KAMERAYI BAĞLAYIP HEM YÜZ HEMDE GÖZ TANIMAYI KULLANARAK GÜVENLİK SİSTEMİNDE KULLANMAK İSTİYORUM NASIL YAPABİLİRİM YARDIMCI OLURSANIZ SEVİNİRİM?

1 Beğeni

Merhaba , 3. kodda bu hatayı veriyor.
id = names[id]
IndexError: list index out of range

tamamdır id ye string değer verdiğim için oldu sanırım , sayı verince düzeldi.

bu 3 kod parçasını tek bir şekilde nasıl çalıştırıyorsunuz