OpenCV yüz tanıma herkesi Elon Musk olarak gösteriyor

Endersqui

Femtopat
Katılım
19 Eylül 2023
Mesajlar
71
Daha fazla  
Cinsiyet
Erkek
Python:
import cv2

# Yüz algılama ve çizgileri çizecek fonksiyon
def highlightFace(net, frame, conf_threshold=0.7):
 frameOpencvDnn = frame.copy()
 frameHeight = frameOpencvDnn.shape[0]
 frameWidth = frameOpencvDnn.shape[1]
 blob = cv2.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)

 net.setInput(blob)
 detections = net.forward()
 faceBoxes = []
 for i in range(detections.shape[2]):
 confidence = detections[0,0,i,2]
 if confidence > conf_threshold:
 x1 = int(detections[0,0,i,3] * frameWidth)
 y1 = int(detections[0,0,i,4] * frameHeight)
 x2 = int(detections[0,0,i,5] * frameWidth)
 y2 = int(detections[0,0,i,6] * frameHeight)
 faceBoxes.append([x1, y1, x2, y2])
 cv2.rectangle(frameOpencvDnn, (x1, y1), (x2, y2), (0, 255, 0), int(round(frameHeight/150)), 8)
 return frameOpencvDnn, faceBoxes

# Hazır modellerin eklenmesi
faceProto = "opencv_face_detector.pbtxt"
faceModel = "opencv_face_detector_uint8.pb"
ageProto = "age_deploy.prototxt"
ageModel = "age_net.caffemodel"
genderProto = "gender_deploy.prototxt"
genderModel = "gender_net.caffemodel"

MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList = ['Erkek', 'Kadin']

faceNet = cv2.dnn.readNet(faceModel, faceProto)
ageNet = cv2.dnn.readNet(ageModel, ageProto)
genderNet = cv2.dnn.readNet(genderModel, genderProto)

database = {"Elon Musk": "elon.jpg"}

# Kamera açma
video = cv2.VideoCapture(0)
padding = 20
while cv2.waitKey(1) < 0:
 hasFrame, frame = video.read()
 if not hasFrame:
 cv2.waitKey()
 break

 # Yüz algılama ve çizim
 resultImg, faceBoxes = highlightFace(faceNet, frame)
 if not faceBoxes:
 print("Yüz algılanamadı")

 for faceBox in faceBoxes:
 # Yüz bölgesini al
 face = frame[max(0, faceBox[1]-padding):min(faceBox[3]+padding, frame.shape[0]-1), max(0, faceBox[0]-padding):min(faceBox[2]+padding, frame.shape[1]-1)]

 # Yüz bölgesini bloba dönüştür
 blob = cv2.dnn.blobFromImage(face, 1.0, (227, 227), MODEL_MEAN_VALUES, swapRB=False)

 # Cinsiyet tahmini yap
 genderNet.setInput(blob)
 genderPreds = genderNet.forward()
 gender = genderList[genderPreds[0].argmax()]
 print(f'Cinsiyet: {gender}')

 # Yaş tahmini yap
 ageNet.setInput(blob)
 agePreds = ageNet.forward()
 age = ageList[agePreds[0].argmax()]
 print(f'Yaş: {age[1:-1]} yaşında')

 # Kişinin adını ve diğer bilgileri ekrana yazdır
 for name, photo_path in database.items():
 if name.lower() in name.lower():
 cv2.putText(resultImg, name, (faceBox[0], faceBox[1] - 80), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2, cv2.LINE_AA)
 cv2.putText(resultImg, gender, (faceBox[0], faceBox[1] - 50), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2, cv2.LINE_AA)
 cv2.putText(resultImg, age, (faceBox[0], faceBox[1] -20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2, cv2.LINE_AA)

 # Sonuçları göster
 cv2.imshow("Yas ve Cinsiyet Algilama", resultImg)

# Video yakalama nesnesini serbest bırak
video.release()
cv2.destroyAllWindows()

ChatGPT ve kendi kodlarımı birleştirerek şöyle bir yüz tanıma programı yaptım ama kameradaki yüzü databasedeki yüz ile karşılaştırıp sonuç vermesi gerekirken önüne gelen herkese Elon Musk diyor bunun çözümü nedir?
 

Yeni konular

Geri
Yukarı