如何解决 **AttributeError: 'NoneType' object has no attribute 'copy'**

问题描述 投票:0回答:1

这是我的代码

**导入CV2 导入线程 从 DeepFace 导入 DeepFace 上限 = cv2.VideoCapture(0,cv2.CAP_DSHOW)

cap.set(cv2.CAP_PROP_FRAME_WIDTH,640) 帽.设置(cv2.CAP_PROP_FRAME_HEIGHT,480)

计数器 = 0

face_match = False

reference_img = cv2.imread("reference.jpg.lnk") img = reference_img.copy()

def check_face(frame): 全局人脸匹配 尝试: if DeepFace.verify(frame,img)['已验证']: 面部匹配=真 别的: 面部匹配=假 除了值错误: 面部匹配=假

虽然正确: ret,frame=cap.read() 如果计数器 %30 == 0: 尝试: threading.Thread(target=check_face,args=(frame.copy(),)).start() 除了值错误: 经过 计数器 += 1

if face_match:
    cv2.putText(frame,("AUTHORIZED",(20,450),cv2.FONT_HERSHEY_SIMPLEX,2,(0,255,0),5))
else:
       cv2.putText(frame,("UNAUTHORIZED",(20,450),cv2.FONT_HERSHEY_SIMPLEX,2,(0,255),5))

cv2.imshow("Face Authetication Cam",frame) 


key = cv2.waitkey(1)
if key == ord("q"):
    break
cv2.destroyAllWindows()**

我遇到的错误

文件“c:\Users\HP\Desktop\minor project 2\main.py”,第 14 行,位于
img = reference_img.copy()
^^^^^^^^^^^^^^^^^^^^ AttributeError:“NoneType”对象没有属性“copy”

请尽快帮助我:(

opencv computer-vision attributeerror deepface
1个回答
0
投票

验证图像加载:即使文件存在,cv2.imread()也可能无法正确加载。确保 OpenCV 可以读取该文件。您可以通过加载后打印reference_img来检查它是否为None。

确保正确的错误处理。这是一个例子:

import cv2 
import threading 
from deepface import DeepFace 

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)

cap.set(cv2.CAP_PROP_FRAME_WIDTH,640) 
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)

counter = 0

face_match = False

# Load reference image
reference_img = cv2.imread("reference.jpg.lnk")

if reference_img is None:
    print("Error: Unable to load reference image.")
    exit()

def check_face(frame): 
    global face_match 
    try: 
        if DeepFace.verify(frame, reference_img)['verified']: 
            face_match = True 
        else: 
            face_match = False 
    except ValueError: 
        face_match = False

while True: 
    ret, frame = cap.read() 
    if counter % 30 == 0: 
        try: 
            threading.Thread(target=check_face,args=(frame.copy(),)).start() 
        except ValueError: 
            pass 
    counter += 1

    if face_match: 
        cv2.putText(frame, "AUTHORIZED", (20, 450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 5) 
    else: 
        cv2.putText(frame, "UNAUTHORIZED", (20, 450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5)

    cv2.imshow("Face Authentication Cam", frame) 

    key = cv2.waitKey(1) 
    if key == ord("q"): 
        break

cv2.destroyAllWindows()
© www.soinside.com 2019 - 2024. All rights reserved.