Member 13743392 Ответов: 0

Отображение различных имен на кадрах CV2 и терминальном Python во время распознавания лиц?


i am working on a face recognition project which will recognize the face and will send sms that who is at the door? So while running the program on terminal the CV2 frame is showing a wrong name and the command terminal recognizing the same face correctly. can't understand whats happening the terminal is giving the correct name and confidence while cV2 frame dosen't. Here is my Recognition Code


import cv2
import boto3
from picamera.array import PiRGBArray
from picamera import PiCamera
import numpy as np 
import pickle
import RPi.GPIO as GPIO
from time import sleep
 
relay_pin = 26
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay_pin, GPIO.OUT)
GPIO.output(relay_pin, GPIO.LOW)
GPIO.output(relay_pin, GPIO.HIGH)
with open('labels', 'rb') as f:
    dict= pickle.load(f)
    f.close()
 
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(640, 480))
client = boto3.client(
    "sns",
    aws_access_key_id="",
    aws_secret_access_key="",
    region_name=""
)
# Load prebuilt model for Frontal Face
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# Create Local Binary Patterns Histograms for face recognization
recognizer = cv2.face.createLBPHFaceRecognizer()
# Load the trained mode
recognizer.load("trainer.yml")
 
font = cv2.FONT_HERSHEY_SIMPLEX
 
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    frame = frame.array
     # Convert the captured frame into grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(gray, scaleFactor = 1.5, minNeighbors = 5)
    # For each face in faces
    for (x, y, w, h) in faces:
         # Create rectangle around the face
        roiGray = gray[y:y+h, x:x+w]
# Recognize the face belongs to which ID
        id_, conf = recognizer.predict(roiGray)
 
        for name, value in dict.items():
            if value == id_:
                print(name)
                print(conf)
#agar confidence <=70 hoga toh door open hoga wrna nhi
                     # Put text describe who is in the picture
        if conf <= 70:
            GPIO.output(26, GPIO.HIGH)
            cv2.rectangle(frame,(x-20,y-20), (x+w+20,y+h+20), (0,255,0), 4)
            client.publish(
    PhoneNumber="+",
    Message= name+"  is at the door"
    )
            cv2.putText(frame,name+ str(conf), (x,y-40), font, 1, (255,255,255), 3)
 
        else:
            GPIO.output(26, GPIO.LOW)
 # Display the video frame with the bounded rectangle
    cv2.imshow('frame', frame)
    key = cv2.waitKey(1)
 
    rawCapture.truncate(0)
#if cross button is pressed close the cam
    if key == 27:
        break
 
cv2.destroyAllWindows()


Что я уже пробовал:

Я даже не могу понять, почему он показывает разные имена в обоих окнах?

0 Ответов