Python人脸识别出错

img

代码:


import cv2
import os
import numpy as np
from PIL import Image
 
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier(r'C:\Users\16019\Downloads\1\opencv\sources\data\haarcascades/haarcascade_frontalface_default.xml')
 
 
def get_images_and_labels(path):
    image_paths = [os.path.join(path, f) for f in os.listdir(path)]
    face_samples = []
    ids = []
 
    for image_path in image_paths:
        image = Image.open(image_path).convert("L")
        image_np = np.array(image, "uint8")
        if os.path.split(image_path)[-1].split(".")[-1] != "jpg":
            continue
        image_id = int(os.path.split(image_path)[-1].split(".")[0])
        faces = detector.detectMultiScale(image_np)
        for (x, y, w, h) in faces:
            face_samples.append(image_np[y : y + h, x : x + w])
            ids.append(image_id)
 
    return face_samples, ids
 
 
faces, Ids = get_images_and_labels("train_data")
recognizer.train(faces, np.array(Ids))
recognizer.save("train_data/trainner.yml")

问题:
array() takes 1 positional argument but 2 were given
堆栈跟踪:

File "C:\Users\16019\source\repos\PythonApplication3\PythonApplication3\训练.py", line 17, in get_images_and_labels
image_np = np.array(image, "uint8")
File "C:\Users\16019\source\repos\PythonApplication3\PythonApplication3\训练.py", line 29, in (Current frame)
faces, Ids = get_images_and_labels("train_data")

np数组定义的问题吗?求解

报错的那行错误在于,numpy中的array函数只能接受一个传入了一个位置参数,代码中传入了二个,所以报错,将第二个参数改成关键字参数即可。修改为image_np=np.array(image,dtype=np.uint8)。

如果对你有帮助,请点击采纳按钮。

原因:没有传入self。类对象调用类内部函数时,会自动传入self参数,而代码中没有给self留位置,所以就会报错了。
加上self就好了,参考https://blog.csdn.net/qq_33866063/article/details/104874949
在这里加上self参数


def get_images_and_labels(self,path):

求解

image_np = np.array(image, dtype=np.uint8) 这句话里面的数据类型要这么写