簡體   English   中英

AttributeError: 'bytes' object 沒有屬性 'read'

[英]AttributeError: 'bytes' object has no attribute 'read'

我正在研究這個人臉識別系統。我有一個文件夾,其中包含包含人臉圖像的子文件夾。 我正在嘗試遍歷所有包含圖像的子文件夾,並使用我的“align_face”function 來檢測人臉並裁剪並對齊子文件夾中的所有圖像。 然后它必須將所有對齊和裁剪的內容保存在另一個文件夾中

我試過這個:

def align_face(imagePath):
    image = face_recognition.load_image_file(imagePath)
    face_locations = face_recognition.face_locations(image)
    face_landmarks = face_recognition.face_landmarks(image)
    if len(face_locations) == 0:
        print("Couldn't detect face for pid {} in path {}".format(Id,imagePath))
        return []
    if len(face_locations) > 1:
        return []
    else:
        (top, right, bottom, left) = face_locations[0]
        desiredWidth = (right - left)
        desiredHeight = (bottom - top)
        leftEyePts = face_landmarks[0]['left_eye']
        rightEyePts = face_landmarks[0]['right_eye']
        if len(leftEyePts) == 0 or len(rightEyePts) == 0:
            print("Couldn't detect both eyes for pid {} in path {}".format(Id,imagePath))
            return []
        else:
            leftEyeCenter = np.array(leftEyePts).mean(axis=0).astype("int")
            rightEyeCenter = np.array(rightEyePts).mean(axis=0).astype("int")
            leftEyeCenter = (leftEyeCenter[0],leftEyeCenter[1])
            rightEyeCenter = (rightEyeCenter[0],rightEyeCenter[1])
            dY = rightEyeCenter[1] - leftEyeCenter[1]
            dX = rightEyeCenter[0] - leftEyeCenter[0]
            
            angle = np.degrees(np.arctan2(dY, dX))
            desiredLeftEye=(0.35, 0.35)
            desiredFaceWidth = desiredWidth
            desiredFaceHeight = desiredHeight
            desiredRightEyeX = 1.0 - desiredLeftEye[0]
            dist = np.sqrt((dX ** 2) + (dY ** 2))
            desiredDist = (desiredRightEyeX - desiredLeftEye[0])
            
            desiredDist *= desiredFaceWidth
            scale = desiredDist / dist
            
            eyesCenter = ((leftEyeCenter[0] + rightEyeCenter[0]) // 2,
                (leftEyeCenter[1] + rightEyeCenter[1]) // 2)
            M = cv2.getRotationMatrix2D(eyesCenter, angle, scale)
            
            tX = desiredFaceWidth * 0.5
            tY = desiredFaceHeight * desiredLeftEye[1]
            M[0, 2] += (tX - eyesCenter[0])
            M[1, 2] += (tY - eyesCenter[1])
            
            (w, h) = (desiredFaceWidth, desiredFaceHeight)
            output = cv2.warpAffine(image, M, (w, h),flags=cv2.INTER_CUBIC)
            output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
            print("images aligned")
            
            return output
#Now that we have defined the face alignmet and cropping, we walk through each subfolder and use the align function
for root, dirs, files in os.walk('<path to subdirectories that has face pictures>'):
    for fname in files:
        fpath = os.path.join(root, fname)
        with open(fpath, 'rb') as f, open('<path to new folder to store cropped and aligned picture>', 'w') as newfile:
            data = f.read()
            new_data = align_face(data) #Implementing align_face function 
            newfile.write(new_data)

但是,我不斷收到錯誤消息。

AttributeError: 'bytes' object 沒有屬性 'read'

有誰知道為什么?任何幫助將不勝感激。 謝謝你。

完整的錯誤是這樣的: 在此處輸入圖像描述

align_face的參數是包含圖像數據的文件的名稱,而不是圖像數據。 所以你不需要在你的循環中打開和讀取數據。

for root, dirs, files in os.walk('<path to subdirectories that has face pictures>'):
    for fname in files:
        fpath = os.path.join(root, fname)
        with open('<path to new folder to store cropped and aligned picture>', 'w') as newfile:
            new_data = align_face(fpath) #Implementing align_face function 
            newfile.write(new_data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM