Как исправить то, что вызываемый объект dlib.full_object_detection не может быть вызван так, чтобы несколько пустых массивов можно было сохранить в файл npz? - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь сохранить несколько изображений с массивами, которые содержат 68 координат ориентира лица из изображений. Я использую .format в конце имени массива, однако, когда я запускаю программу в терминале, она возвращается с объектом, который нельзя вызвать.

Я использую raspbian для raspberrypi3 и использую эту программу для распознавания эмоций, используя ориентиры на лице с OpenCV, dlib и python. Код, который я использую, - это модифицированный и вставленный код со страниц распознавания лиц pyimagesearch, а также часть моего собственного кода. Я попытался поместить строку .format в строку 43, однако она вернулась с

TypeError: 'numpy.ndarray' object is not callable  
#import the necessary packages  
from imutils import face_utils  
from imutils import paths  
import numpy as np  
import argparse  
import imutils  
import dlib  
import cv2  
import os  
#construct the argument parser and parse the arguments  
ap = argparse.ArgumentParser()  
ap.add_argument("-p", "--shape-predictor", required=True,  
            help="path to facial landmark predictor")  
ap.add_argument("-i", "--image", required=True,  
            help="path to input image")  
args = vars(ap.parse_args())  

#grab path to images that are being converted  
imagePaths = list(paths.list_images(args["image"]))  
for (i, imagePath) in enumerate(imagePaths):  
    print("[INFO] processing image {}/{}".format(i + 1,  
        len(imagePaths)))  
    #load the input image, and convert it to grayscale  
    image = cv2.imread(imagePath)  
    image = imutils.resize(image, width=500)  
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  

    #detect faces in the grayscale  
    rects = detector(gray, 1)  

    #loop over the face detections  
    for (i, rect) in enumerate(rects):  
        #determine the facial landmarks for the face region, then  
        #convert the facial landmark (x, y)-coordinates to a NumPy  
        #array  
        shape = predictor(gray, rect)  
        shape = face_utils.shape_to_np(shape("{}".format[i] for i in   
        imagePaths))  

        #save the numpy array  
        for (i, imagePath) in enumerate(imagePaths):  
            np.savez("arrays.npz", shape)  
            shape_npz = np.load("arrays.npz")  
            d = dict(zip(("data1{}".format(k) for k in shape_npz),  
            (shape_npz[k] for k in shape_npz)))  

Когда я запустил код в терминале, он выдал

TypeError: 'dlib.full_object_detection' object is not callable

Однако, когда я запустил вызываемый файл, он вернулся с

True

Я ожидал, что результат будет

[INFO] processing image 1/4  
[INFO] processing image 2/4  
[INFO] processing image 3/4  
[INFO] processing image 4/4  

с массивом каждой картинки между ними. Как я могу это исправить, чтобы он сохранил каждый массив numpy в файл array.npz?

...