• python使用np函数报错


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 阿白755 2024-05-10 23:43 采纳率: 0% 浏览 6 首页/ 编程语言 / python使用np函数报错 pythonopencv回归 在《用python语言如何写一个基于haar特征和逻辑回归模型的人脸识别的代码并绘制出ROC曲线》 报错为'numpy.int32' object has no attribute 'append' 意思是往数组y中添数字1的代码y.append(1)出现了问题 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 笑面虎 2024-05-10 23:43
      关注

      以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


      【您想要解决的问题】:您想要解决的问题是在编写一个基于Haar特征和逻辑回归模型的人脸识别系统时,遇到了一个错误,导致无法将数字1添加到数组y中。

      【图片内容】:

      • 第一张图片包含了一段Python代码,该代码使用OpenCV库来检测图像中的面孔,并将检测到的面孔添加到训练数据中。代码中有一个错误,即在尝试将检测到的面孔添加到列表X和标签y时,使用了错误的语法。
      • 第二张图片显示了一个Python错误消息,指出'numpy.int32' object has no attribute 'append',这意味着代码尝试在一个numpy.int32对象上使用append方法,但这是不允许的。

      【问题出现原因】:问题出现的原因是在代码中,变量y被赋予了一个numpy.int32对象,而不是预期的列表。在Python中,整数类型的对象没有append方法,这就是为什么尝试执行y.append(1)时会出现错误。

      【问题解决方案】:要解决这个问题,您需要确保变量y是一个列表,而不是一个整数或numpy.int32对象。以下是修改后的代码段:

      # 正确的初始化方式
      X = []
      y = []
      
      # 在循环中正确地添加标签
      for filename in os.listdir(r"./" + directory_name):
          img = cv2.imread(directory_name + "/" + filename)
          gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
          faces = face_cascade.detectMultiscale(gray, 1.3, 5)
          if len(faces) >= 1:
              y.append(1)  # 这里y是一个列表,可以正常添加元素
          for (x, y, w, h) in faces:
              face = img[y:y+h, x:x+w]
              face = cv2.resize(face, (100, 100))
              X.append(face.flatten())
      

      【提供代码】:上面的代码段应该可以解决您遇到的问题。确保在执行代码之前,Xy都被正确地初始化为列表。

      【代码运行方式】:运行这段代码需要有Python环境,以及安装了OpenCV、numpy和sklearn库。您可以在命令行中使用python 脚本名.py来运行这段代码。

      【代码预期运行结果】:如果代码正确运行,它将读取指定目录下的图像文件,使用Haar特征级联检测面孔,并将检测到的面孔及其标签添加到Xy列表中。然后,您可以使用这些数据来训练逻辑回归模型,并绘制ROC曲线。

      【推荐相关链接】:

      展开全部

      评论 编辑记录
    • 专家-皆知 2024-05-10 23:43
      关注

      将int32类型改为list,再进行append操作。

      以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

      评论
      专家-皆知 回复 阿白755 2024-05-10 23:46

      看起来你在尝试实现一个人脸检测与识别的项目,并且遇到了一个问题。错误信息表明你正在尝试将一个整数(numpy.int32对象)添加到列表(y),但整数没有append方法,因为append是列表的方法。

      这里的问题在于,你可能误将一个整数变量赋值给了列表名y,导致后续的操作实际上是针对这个整数进行的。为了避免这个问题,你需要确保y是一个列表,然后才能执行append操作。下面是修改后的代码段,我已经修复了这个问题:

      import cv2
      import os
      import numpy as np
      from sklearn.metrics import roc_curve, auc
      from sklearn.linear_model import LogisticRegression
      import matplotlib.pyplot as plt
      
      # 加载训练好的分类器文件
      face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
      
      directory_name = "test_data"
      
      # 初始化列表
      y = []
      X = []
      
      # 生成训练数据和标签
      for filename in os.listdir(r"./" + directory_name):
          img = cv2.imread(os.path.join(directory_name, filename))
          gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
          faces = face_cascade.detectMultiScale(gray, 1.3, 5)
      
          if len(faces) >= 1:
              # 使用list()将单个元素转换为列表,这样可以调用append方法
              y.append(list([1]))  
              x, y, w, h = faces[0]
              face = img[y: y+h, x:x+w]
              face = cv2.resize(face, (100, 100))
              X.append(face.flatten())
      

      这段代码首先初始化了两个空列表 yX,然后在循环中,当检测到人脸时,将一个包含整数1的列表(即 [1])添加到 y 中,而不是直接将整数1添加进去。这样就不会出现 'numpy.int32' object has no attribute 'append' 的错误。同时,记得将图片路径的拼接使用 os.path.join() 函数,以保证跨平台兼容性。

      回复
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    山东EV多域名SSL证书可以保护几个域名
    vwware docker安装seata
    银河麒麟Telnet远程登录
    运营︱内容营销怎么做?
    SketchUp做效果图什么配置要求?创意云支持SketchUp一键云渲染
    Nginx01 -- Centos7 安装 Nginx 及常用命令
    Vue插槽slot
    2022年9月5号 SpringBoot自动配置原理初步了解。
    设计模式学习笔记——抽象工厂模式
    Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?
  • 原文地址:https://ask.csdn.net/questions/8101690