【问题标题】:Python: TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'Python:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“NoneType”
【发布时间】:2020-01-18 06:14:26
【问题描述】:

我尝试在python中执行以下代码进行面部识别并得到上述错误,可能是什么原因以及解决方案是什么?

代码:

import cv2
import numpy as np
from os import listdir
from os.path import isfile, join

data_path ='/Users/aksheenmalhotra/Desktop/facerecogdata/'
onlyfiles = [f for f in listdir(data_path) if isfile(join(data_path,f))]

Training_Data, Labels = [], []

for i, files in enumerate(onlyfiles):
    image_path = data_path + onlyfiles[i]
    images = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    Training_Data.append(np.asarray(images,dtype=np.uint8))
    Labels.append(i)

Labels = np.asarray(Labels, dtype=np.int32)

model = cv2.face.LBPHFaceRecognizer_create()

model.train(np.asarray(Training_Data), np.asarray(Labels))

print("Model Training Complete!!!!!")

face_classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

def face_detector(img, size = 0.5):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_classifier.detectMultiScale(gray,1.3,5)

    if faces is():
        return img,[]

    for(x,y,w,h) in faces:
        cv2.rectangle(img, (x,y),(x+w,y+h),(0,255,255),2)
        roi = img[y:y+h, x:x+w]
        roi = cv2.resize(roi, (200,200))

    return img,roi

cap = cv2.VideoCapture(0)
while True:

    ret, frame = cap.read()

    image, face = face_detector(frame)

    try:
        face = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
        result = model.predict(face)

        if result[1] < 500:
            confidence = int(100*(1-(result[1])/300))
            display_string = str(confidence)+'% Confidence it is user'
        cv2.putText(image,display_string,(100,120), cv2.FONT_HERSHEY_COMPLEX,1,(250,120,255),2)


        if confidence > 75:
            cv2.putText(image, "Unlocked", (250, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2)
            cv2.imshow('Face Cropper', image)

        else:
            cv2.putText(image, "Locked", (250, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 2)
            cv2.imshow('Face Cropper', image)


    except:
        cv2.putText(image, "Face Not Found", (250, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 2)
        cv2.imshow('Face Cropper', image)
        pass

    if cv2.waitKey(1)==13:
        break


cap.release()
cv2.destroyAllWindows()

我得到以下错误回溯。 错误:

Traceback (most recent call last):
  File "/Users/aksheenmalhotra/Desktop/python files/18-1-2020/facerecogtrial.py", line 14, in <module>
    Training_Data.append(np.asarray(images,dtype=np.uint8))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/numpy/core/_asarray.py", line 85, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

【问题讨论】:

  • 如果您仔细查看错误回溯,您会发现错误是因为numpyasarray 方法的参数之一不接受NoneType 作为值。在第 14 行检查哪个参数作为 None 传递(堆栈跟踪中的提示)
  • 缺少的参数是内存表示,但即使我改变它,错误仍然存​​在。
  • 你能检查一下在每次迭代中你在image_path 中得到了什么值吗?另外,你可以试试cv2.imshow() 来确认正在读取图像吗
  • cv2 如果找不到图像文件,则返回None

标签: python numpy


【解决方案1】:

我可以通过以下方式重现错误消息:

In [210]: np.asarray(None, dtype='uint8')                                                        
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-210-ab1b7ff4c0ab> in <module>
----> 1 np.asarray(None, dtype='uint8')

/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     83 
     84     """
---> 85     return array(a, dtype, copy=False, order=order)
     86 
     87 

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

因此,在

images = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
Training_Data.append(np.asarray(images,dtype=np.uint8))

images 很可能是Nonecv2.imread在无法读取文件时返回None,很可能是文件路径错误。

因此,应该为此准备好使用cv2,并测试None,然后跳过或引发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2023-03-10
    • 2020-08-22
    • 2017-02-15
    相关资源
    最近更新 更多