训练识别器时候出的问题,报错是样本和标签不匹配,都是我用print(len())打出来是一个结果,样本和标签数量都是6.
import pymysql
import cv2
import numpy as np
from cv2 import face
import os
import pymysql
#连接数据库
connect = pymysql.connect(host="localhost", user="root", password="root", database="face")
#创建一个游标
cur = connect.cursor()
#查询MySQL中的face表格
userid = "123"
sql = "select ids,sname from face"
cur.execute(sql)
#获取face表中的数据
result= cur.fetchall()
#将从MySQL中读取的数据元组转为字典
result=dict(result)
#提取字典中的key值并转化为列表
keyvalues = list(map(int,result.keys()))
#样本图像列表
photos =list()
#标签列表
lables =list()
wenjianjia = os.listdir("D:/python/opencv/shuju")
num=1
for ids in wenjianjia:
if num<len(ids)+1:
photos.append(cv2.imread("D:/python/opencv/shuju/"+ids+"/"+str(num)+".png",0))
lables.append(keyvalues)
num+1
print(len(lables))
print(len(photos))
#加载识别器(LBPH)
recognizer=cv2.face.LBPHFaceRecognizer_create()
#识别器训练
recognizer.train(photos,np.array(lables))
#训练结果录入
recognizer.write('./trainer_face.yml')
运行结果:
recognizer.train(photos,np.array(lables))
cv2.error: OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv_contrib\modules\face\src\lbph_faces.cpp:375: error: (-5:Bad argument) The number of samples (src) must equal the number of labels (labels). Was len(samples)=6, len(labels)=0. in function 'cv::face::LBPH::train'
6
6