Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:\uuuu init\uuuuu():构造函数参数与face\u识别调用不兼容_Python_Face Recognition_Dlib_Pybind11 - Fatal编程技术网

Python TypeError:\uuuu init\uuuuu():构造函数参数与face\u识别调用不兼容

Python TypeError:\uuuu init\uuuuu():构造函数参数与face\u识别调用不兼容,python,face-recognition,dlib,pybind11,Python,Face Recognition,Dlib,Pybind11,我曾试图开发一个人脸识别考勤系统,我像教程一样100%编码,但仍有一些错误,代码如下: from face_recognition.api import face_distance import face_recognition as fr import os import cv2 import face_recognition import numpy as np import time from PIL import ImageFont def getEncodedFaces():

我曾试图开发一个人脸识别考勤系统,我像教程一样100%编码,但仍有一些错误,代码如下:

from face_recognition.api import face_distance
import face_recognition as fr
import os
import cv2
import face_recognition
import numpy as np
import time
from PIL import ImageFont

def getEncodedFaces():
    encoded = {}
    for dirPath, dNames, fNames in os.walk("./faces"):
        for f in fNames:
            if f.endswith(".jpg") or f.endswith(".png"):
                face = fr.load_image_file("faces/" + f)
                encoding = fr.face_encodings(face)[0]
                encoded[f.split(".")[0]] + encoding
    return encoded

def unknownImageEncoded(img):
    face = fr.load_image_file("faces/" + img)
    encoding = fr.face_encodings(face)[0]
    return encoding

def classifyFace(im):
    faces = getEncodedFaces()
    facesEncoded = list(faces.values())
    knownFaceNames = list(faces.keys())
    img = cv2.imread(im, 1)
    faceLocations = face_recognition.face_encodings(img)
    unknownFaceEncodings = face_recognition.face_encodings(img, faceLocations)
    faceNames = []
    for faceEncoding in unknownFaceEncodings:
        matches = face_recognition.compare_faces()
        name = "Unknown"
        faceDistances = face_recognition.face_distance(facesEncoded, faceEncoding)
        bestMatchIndex = np.argmin(face_distance)
        if matches[bestMatchIndex]:
            name = knownFaceNames[bestMatchIndex]
        faceNames.append(name)
        for (top, right, bottom, left), name in zip(faceLocations, faceNames):
            cv2.rectangle(img, (left-20, top-20, right+20, bottom+20), (255, 0, 0), cv2.FILLED)
            font = ImageFont.truetype("./NotoSansTC-Black.ttf")
            cv2.putText(img, name, (left-20, bottom+15), font, 1.0, (255, 255, 255), 2)
    
    while True:
        cv2.imshow("Attendance System", img)
        if cv2.waitkey(1) & 0xFF == ord("q"):
            return faceNames

print(classifyFace("test.jpg"))
下面是错误:

Traceback (most recent call last):
  File "main.py", line 51, in <module>
    print(classifyFace("test.jpg"))
  File "main.py", line 31, in classifyFace
    unknownFaceEncodings = face_recognition.face_encodings(img, faceLocations)
  File "C:\Users\family\AppData\Local\Programs\Python\Python36\lib\site-packages\face_recognition\api.py", line 213, in face_encodings
    raw_landmarks = _raw_face_landmarks(face_image, known_face_locations, model)
  File "C:\Users\family\AppData\Local\Programs\Python\Python36\lib\site-packages\face_recognition\api.py", line 158, in _raw_face_landmarks
    face_locations = [_css_to_rect(face_location) for face_location in face_locations]
  File "C:\Users\family\AppData\Local\Programs\Python\Python36\lib\site-packages\face_recognition\api.py", line 158, in <listcomp>
    face_locations = [_css_to_rect(face_location) for face_location in face_locations]
  File "C:\Users\family\AppData\Local\Programs\Python\Python36\lib\site-packages\face_recognition\api.py", line 49, in _css_to_rect
    return dlib.rectangle(css[3], css[0], css[1], css[2])
TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
    1. _dlib_pybind11.rectangle(left: int, top: int, right: int, bottom: int)
    2. _dlib_pybind11.rectangle(rect: dlib::drectangle)
    3. _dlib_pybind11.rectangle(rect: _dlib_pybind11.rectangle)
    4. _dlib_pybind11.rectangle()

Invoked with: -0.035434916615486145, -0.12049627304077148, 0.08377307653427124, 0.062198664993047714
有人能告诉我这是什么意思以及如何修复它吗?我尝试安装了许多不同版本的dlib和人脸识别。我也安装了pybind11,但它仍然给我同样的错误。我赶时间,我真的需要一些帮助。谢谢大家!

此行:
用于(顶部、右侧、底部、左侧)、zip中的名称(面位置、面名称):

确保
top、right、bottom、left
值是整数值,而不是浮点值。只需打印一次即可确认。如果它们是浮点值,则使用
int()
将它们转换为int。像这样:

for (top, right, bottom, left), name in zip(faceLocations, faceNames):
   cv2.rectangle(img, int(left)-20, int(top)-20, int(right)+20, int(bottom)+20), (255, 0, 0), cv2.FILLED)

为什么要导入
人脸识别
2次?导入
人脸识别
2次是不正确的

compare_faces()
接受两个参数,即已编码向量列表和未知编码向量

现在关注您的主要错误,您没有使用
面部位置
,这意味着它无法从图像中定位您的面部

您的错误如下:

faceLocations=人脸识别。人脸编码(img)
相反,请使用以下命令:

faceLocations=人脸识别。人脸位置(img)
完整代码:

从人脸识别.api导入人脸距离
将人脸识别作为fr导入
导入操作系统
进口cv2
将numpy作为np导入
导入时间
从PIL导入ImageFont
def getEncodedFaces():
编码={}
对于os.listdir(os.path.join('faces'))中的f:
face=fr.load\u image\u文件(os.path.join('faces',f))
编码=fr.face\u编码(face)
如果不是len(编码):
持续
编码=编码[0]
编码的[f.split(“.”[0]]=编码
返回编码
def未知图像编码(img):
face=fr.load\u image\u文件(“faces/”+img)
编码=fr.face_编码(face)[0]
返回编码
def分类面(im):
faces=getEncodedFaces()
facesEncoded=list(faces.values())
knownFaceNames=列表(faces.keys())
img=cv2.imread(im,1)
面位置=正面位置(img)
unknownFaceEncodings=fr.face_编码(img,faceLocations)
faceNames=[]
对于faceEncoding,zip中的faceloc(未知的faceEncoding,faceLocations):
上、右、下、左=面定位
匹配=fr.compare\u面(面编码,面编码)
name=“未知”
面距离=fr.face_距离(面编码,面编码)
bestMatchIndex=np.argmin(面距离)
如果匹配[bestMatchIndex]:
name=knownFaceNames[bestMatchIndex]
faceNames.append(名称)
cv2.矩形(img,(左-20,上-20,右+20,下+20),(255,0,0),cv2.填充)
font=ImageFont.truetype(“./notosantc Black.ttf”)
cv2.putText(img,name,(左-20,下+15),字体,1.0,(255,255,255),2)
image=img[:,:,::-1]
imwrite(“result.jpg”,图像)
返回FaceName
打印(classifyFace(“test.jpg”))

您好,谢谢您的回复!我刚刚添加了
int()
,但仍然出现相同的错误。请尝试打印这些值,看看这些值是int还是float。@SaxTed是的,代码中有许多小错误。我会修好的,你能检查一下我的更新代码吗?现在修好了吗?@SaxTed Oh你忘了使用同一个变量
facedistance
。现在检查我的代码again@SaxTed您是否可以尝试打印
facesEncoded
faceEncoding
的值?在您的情况下,
getEncodedFaces()
似乎没有返回任何内容。你能更新显示完整目录结构的问题吗?它可能没有找到要编码的图像
for (top, right, bottom, left), name in zip(faceLocations, faceNames):
   cv2.rectangle(img, int(left)-20, int(top)-20, int(right)+20, int(bottom)+20), (255, 0, 0), cv2.FILLED)