Try---ing 2021-10-31 15:06 采纳率: 87.5%
浏览 68
已结题

代码一摸一样一个可以跑通一个不行

啷个代码内容一摸一样,文件存放的位置也在一起
位置如下

img

运行没有问题的代码如下
数据.py

import os
import cv2
import sys
from PIL import Image
import numpy as np

def getImageAndLabels(path):

    facesSamples=[]

    ids=[]

    imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
    #检测人脸
    face_detector = cv2.CascadeClassifier('D:/python_opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
    #打印数组imagePaths
    print('数据排列:',imagePaths)
    #遍历列表中的图片
    for imagePath in imagePaths:
        #打开图片,黑白化
        PIL_img=Image.open(imagePath).convert('L')
        #将图像转换为数组,以黑白深浅
       # PIL_img = cv2.resize(PIL_img, dsize=(400, 400))
        img_numpy=np.array(PIL_img,'uint8')
        #获取图片人脸特征
        faces = face_detector.detectMultiScale(img_numpy)
        #获取每张图片的id和姓名
        id = int(os.path.split(imagePath)[1].split('.')[0])
        #预防无面容照片
        for x,y,w,h in faces:
            ids.append(id)
            facesSamples.append(img_numpy[y:y+h,x:x+w])
        #打印脸部特征和id
        #print('fs:', facesSamples)
        print('id:', id)
        #print('fs:', facesSamples[id])
    print('fs:', facesSamples)
    #print('脸部例子:',facesSamples[0])
    #print('身份信息:',ids[0])
    return facesSamples,ids

if __name__ == '__main__':
    #图片路径
    path='./data/jm/'
    #获取图像数组和id标签数组和姓名
    faces,ids=getImageAndLabels(path)
    #获取训练对象
    recognizer=cv2.face.LBPHFaceRecognizer_create()
    #recognizer.train(faces,names)#np.array(ids)
    recognizer.train(faces,np.array(ids))
    #保存文件
    recognizer.write('trainer/trainer.yml')
    #save_to_file('names.txt',names)

结果展示

img

运行有问题的代码如下
数据训练.py

import os
import cv2
import sys
from PIL import Image
import numpy as np

def getImageAndLabels(path):
    #存储人脸数据
    facesSamples=[]
    #存储姓名数据
    ids=[]
    #存储图片信息
    imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
    #加载分类器
    face_detector = cv2.CascadeClassifier('D:/python_opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')

    print('数据排列:',imagePaths)
    #遍历列表中的图片
    for imagePath in imagePaths:
        #打开图片,灰度化PIL有九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F
        PIL_img=Image.open(imagePath).convert('L')
        #将图片转换为数组,以黑白深浅
        img_numpy=np.array(PIL_img,'uint8')
        #获取图片人脸特征
        faces=face_detector.detectMultiScale(img_numpy)
        #获取每张照片的id和姓名
        id=int(os.path.split(imagePath)[1].split('.')[0])
        #预防无面容图片
        for x,y,w,h in faces:
            ids.append(id)
            facesSamples.append(img_numpy[y:y+h,x:x+w])
        #打印脸部特征和id
        print('id:', id)

    print('fs',facesSamples)

    return facesSamples.ids

if __name__ == '__main__':
    #图片路径
    path='./data/jm/'
    #获取图像数组和ID标签数组和姓名
    faces,ids=getImageAndLabels(path)
    #加载识别器
    recognizer=cv2.face.LBPHFaceRecognizer_create()
    #训练数据
    recognizer.train(faces,np.array(ids))
    #保存文件
    recognizer.write('trainer/trainer.yml')
    #路径必须和代码在同一级目录开始指定路径

结果如下

img

代码有报错提示
Traceback (most recent call last):
File "C:\Users\dw188\Desktop\python练习\人脸识别\数据训练.py", line 43, in
faces,ids=getImageAndLabels(path)
File "C:\Users\dw188\Desktop\python练习\人脸识别\数据训练.py", line 37, in getImageAndLabels
return facesSamples.ids
AttributeError: 'list' object has no attribute 'ids'
但是我在代码中间没发现提示中说的list啊ids是图片的名字没有问题啊路径中也没有中文名称
谁看懂了求解释,

  • 写回答

1条回答 默认 最新

  • 考古学家lx(李玺) python领域优质创作者 2021-10-31 16:03
    关注

    额,37行 return facesSamples.ids 这里错了

    不是 . 这是是逗号

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”