Cardo梅 发表于 2023-2-25 22:53:02

人脸识别训练求助!!!!

代码和问题在附件图片中,一直报这个找不到路径的错误。求求大佬帮忙看一下是为什么,要训练的图片命名都是数字

Cardo梅 发表于 2023-2-25 22:54:03

图片在这

歌者文明清理员 发表于 2023-2-26 08:54:45

@isdkz {:10_277:}

歌者文明清理员 发表于 2023-2-27 14:42:20

请放上你的源代码,放在里
你的图上代码不完整,不知道你写了啥;你既然发了求助帖,得把代码发上来,我们 debug 后才知道你想干吗、具体哪里报错,以及库的源代码等

曼查克 发表于 2023-3-2 11:10:41

mxf下一级创建名字为1的文件夹,把图片放进去试试。
代码我没看太懂。file.startwith('.') 是什么意思,你的图片名是.开头的嘛

Cardo梅 发表于 2023-3-2 14:18:00

歌者文明清理员 发表于 2023-2-27 14:42
请放上你的源代码,放在里
你的图上代码不完整,不知道你写了啥;你既然发了求助帖,得把代 ...

不好意思,代码在这。我这个是照着书上的代码敲的。大概意思就是训练人脸识别收集数据的,图片数据都是放在一个文件夹下面命名方式是x.jig这种
import cv2, numpy, os

labels, faces = [], []
file = 'lbpcascade_frontalface_improved.xml'
face_cascade = cv2.CascadeClassifier(file)
face_recognizer = cv2.face.LBPHFaceRecognizer_create()

def detect_face(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.2, 5, minSize=(20, 20))
    if (len(faces) == 0):
      return None, None
    (x, y, w, h) = faces
    return gray, faces

def read_face(face_id):
    path = 'mxf' + str(face_id)
    print('trainning:', face_id)
    files = os.listdir(path)
    for file in files:
      if file.startswith('.'):
            continue
      image = cv2.imread(path + '/' + file)
      face, rect = detect_face(image)
      if face is not None:
            face = cv2.resize(face, (512, 512))
            labels.append(face_id)
            faces.append(face)
      break

if __name__ == '__main__':
    #读取人脸图像
    read_face(1)
    #read_face(2)
    #训练人脸识别器
    face_recognizer.train(faces, numpy.array(labels))
    #保存人脸特征数据
    face_recognizer.save('trainner.yml')

Cardo梅 发表于 2023-3-2 14:18:55

曼查克 发表于 2023-3-2 11:10
mxf下一级创建名字为1的文件夹,把图片放进去试试。
代码我没看太懂。file.startwith('.') 是什么意思,你 ...

图片是1.jpg,2.jpg这种的。代码是我按照书上敲的很多我也不是很懂

曼查克 发表于 2023-3-3 13:57:30

Cardo梅 发表于 2023-3-2 14:18
图片是1.jpg,2.jpg这种的。代码是我按照书上敲的很多我也不是很懂

代码有问题的,不是一两句话的方法用错的事。
这也没几行代码,不懂的话可以一句句百度,理解起来也不难。

歌者文明清理员 发表于 2023-3-3 19:27:41

Cardo梅 发表于 2023-3-2 14:18
不好意思,代码在这。我这个是照着书上的代码敲的。大概意思就是训练人脸识别收集数据的,图片数据都是放 ...

这报错信息不对啊,你在 read_face() 函数里加几行代码打印一下运行过程,因为错误很奇怪
照你的代码,错的是 os.listdir(path);可 path 应该是 mxf {参数},就是 mxf1
他为什么报“mxf/1”找不到呢

isdkz 发表于 2023-3-3 23:29:55

Cardo梅 发表于 2023-3-2 14:18
不好意思,代码在这。我这个是照着书上的代码敲的。大概意思就是训练人脸识别收集数据的,图片数据都是放 ...

import cv2, numpy, os

labels, faces = [], []
file = 'lbpcascade_frontalface_improved.xml'
face_cascade = cv2.CascadeClassifier(file)
face_recognizer = cv2.face.LBPHFaceRecognizer_create()

def detect_face(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.2, 5, minSize=(20, 20))
    if (len(faces) == 0):
      return None, None
    (x, y, w, h) = faces
    return gray, faces

def read_face(face_id):
    path = '../mxf/' + str(face_id)                                        # 这个路径不对吧
    print('trainning:', face_id)
    files = os.listdir(path)
    for file in files:
      if file.startswith('.'):
            continue
      image = cv2.imread(path + '/' + file)
      face, rect = detect_face(image)
      if face is not None:
            face = cv2.resize(face, (512, 512))
            labels.append(face_id)
            faces.append(face)
      break

if __name__ == '__main__':
    #读取人脸图像
    read_face(1)
    #read_face(2)
    #训练人脸识别器
    face_recognizer.train(faces, numpy.array(labels))
    #保存人脸特征数据
    face_recognizer.save('trainner.yml')
页: [1]
查看完整版本: 人脸识别训练求助!!!!