Отображение разных имен в кадрах CV2 и терминале Python во время распознавания лиц? - PullRequest
0 голосов
/ 18 марта 2020

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