Я работаю над проектом по распознаванию лиц, который распознает лицо и отправит смс, кто у двери? Таким образом, при запуске программы на терминале кадр CV2 показывает неправильное имя, а командный терминал правильно распознает то же лицо. не может понять, что происходит, терминал дает правильное имя и уверенность, в то время как кадр cV2 этого не делает. Вот мой код распознавания
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()