代码:
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) 这句话里面的数据类型要这么写