pallas 发表于 2023-5-30 10:18:36

求助大佬,这个代码为什么会报这个错呢,怎么修改呢

import cv2
import os
import sys
from PIL import Image
import numpy as np
def getImageAndLabels(path):
    facesSamples=[]
    ids=[]
    imagePaths=
    print(imagePaths)
    # 检测人脸
    face_detector = cv2.CascadeClassifier(
      'C:/Program Files (x86)/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')

    # 遍历列表中的图片
    for imagePath in imagePaths:
      # 打开图片
      PIL_img = Image.open(imagePath).convert('L')
      # 将图像转换为数组
      img_numpy = np.array(PIL_img,'uint8')
      faces = face_detector.detectMultiScale(img_numpy)
      # 获取每张图片的id
      print(os.path.split(imagePath))
      id = int(os.path.split(imagePath).split('.'))
      for x,y,w,h in faces:
            facesSamples.append(img_numpy)
            ids.append(id)
    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.yml')


cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'

isdkz 发表于 2023-5-30 10:20:11

这个错误说明 CascadeClassifier 的构造函数试图打开并读取一个文件,但它为空或者无法找到。这个文件就是你所提供的 XML 文件,它包含了用于人脸检测的训练数据。

具体来说,这个代码行引发了错误:

face_detector = cv2.CascadeClassifier('C:/Program Files (x86)/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')


你在这里指定的路径可能找不到haarcascade_frontalface_default.xml文件。请确认这个文件的位置,并确保它是可读的。

首先,你可以检查一下你是否安装了正确版本的 OpenCV,并且它的 data 文件夹中是否包含所需要的 XML 文件。OpenCV 的安装路径可能因环境不同而不同。在某些情况下,你可能需要下载 haarcascades 数据,并将其放在正确的位置。

如果你确定你的文件路径是正确的,但仍然遇到这个问题,你可能需要检查你的环境变量。在一些情况下,如果环境变量设置不正确,Python 可能无法找到这些文件。

希望这个答案能帮到你。如果你有更多的问题,欢迎再次提问。

pallas 发表于 2023-5-30 10:51:38

运行还是报错哎
D:\anaconda\envs\TF2.1\python.exe D:/ending/FaceRecognition/try.py
['./data/jm/1.jpg', './data/jm/10.jpg', './data/jm/11.jpg', './data/jm/2.jpg', './data/jm/3.jpg', './data/jm/4.jpg', './data/jm/5.jpg', './data/jm/6.jpg', './data/jm/7.jpg', './data/jm/8.jpg', './data/jm/9.jpg']
('./data/jm', '1.jpg')
('./data/jm', '10.jpg')
('./data/jm', '11.jpg')
('./data/jm', '2.jpg')
('./data/jm', '3.jpg')
('./data/jm', '4.jpg')
('./data/jm', '5.jpg')
('./data/jm', '6.jpg')
('./data/jm', '7.jpg')
('./data/jm', '8.jpg')
Traceback (most recent call last):
File "D:/ending/FaceRecognition/try.py", line 37, in <module>
    recognizer = cv2.face.LBPHFaceRecognizer_create()
AttributeError: module 'cv2.cv2' has no attribute 'face'
('./data/jm', '9.jpg')

pallas 发表于 2023-5-30 10:53:03

这个包我也是有的opencv-contrib-python

pallas 发表于 2023-5-30 11:57:23

isdkz 发表于 2023-5-30 10:20
这个错误说明 CascadeClassifier 的构造函数试图打开并读取一个文件,但它为空或者无法找到。这个文件就是 ...

大佬,还是有点问题哎{:10_266:}

天地丶良心 发表于 2023-5-30 14:13:15

你的代码似乎出现了错误。错误信息显示模块“cv2.cv2”中没有“face”属性。可能是你需要更新你的OpenCV库或者检查你是否正确安装了它。
页: [1]
查看完整版本: 求助大佬,这个代码为什么会报这个错呢,怎么修改呢