python: MTCNN не сохраняет все файлы - PullRequest
0 голосов
/ 15 октября 2019

сок людей! У меня возникли некоторые проблемы с тем, чтобы этот код работал, суть в том, что я хочу обрезать грани некоторых изображений с помощью библиотеки MTCNN, а затем сохранить ее в виде файла .jpg, когда я запускаю этот код:

 # draw each face separately
    def draw_faces(filename, result_list):
        # load the image
        data = pyplot.imread(filename)
        # plot each face as a subplot
        for i in range(len(result_list)):
            # get coordinates
            x1, y1, width, height = result_list[i]['box']
            x2, y2 = x1 + width, y1 + height
            # define subplot
            pyplot.subplot(1, len(result_list), i+1)
            pyplot.axis('off')
            # plot face
            pyplot.imshow(data[y1:y2, x1:x2])
            image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
            pyplot.imwrite(justfaces+name+'/'+file, )
        # show the plot
        pyplot.show()


for name in names:
    onlyfiles = [ f for f in listdir(os.path.join(ALL_DATA,name)) ]
    os.mkdir(os.path.join(justfaces,name))
    for file in onlyfiles:
        filename = '%s/%s' % (ALL_DATA+name, file)
        # load image from file
        pixels = pyplot.imread(filename)
        # create the detector, using default weights
        detector = MTCNN()
        #detect faces in the image
        faces = detector.detect_faces(pixels)
        print(faces)
        # display faces on the original image
        draw_faces(filename, faces)

код работает должным образом, но в какой-то момент я получаю эту ошибку

ValueError: zero-size array to reduction operation minimum which has no identity

Теперь проблема, которую я считаю, состоит в том, что есть изображение без людей, поэтому нет лиц, которые можно написать, а некоторыеЦикл for вызывает появление этой ошибки, если кто-то из вас может помочь, я буду так благодарен, заранее спасибо за чтение

edit: я искал json, возвращенный из draw_face как раз перед тем, как он выдал ошибкупохоже, это

[{'box': [170, -22, 177, 242], 'confidence': 0.9992941617965698, 'keypoints': {'left_eye': (227, 62), 'right_eye': (305, 73), 'nose': (257, 110), 'mouth_left': (220, 151), 'mouth_right': (288, 162)}}]

что-то интересное - это -22 во второй записи окна, это может быть причиной ошибки? если это так, вы знаете, как это остановить?

1 Ответ

0 голосов
/ 17 октября 2019

вот и я, решение этой проблемы, насколько я могу понять, заключается в следующем:

ошибка mtncc, как утверждает проблема github (https://github.com/ipazc/mtcnn/issues/11), иногдакоординаты должны быть отрицательными, поэтому я решил внести некоторые изменения, на самом деле просто поверните x и y = 0, если они были отрицательными, а пока это решает мою проблему, вот код = 3

#cropeo de caras y creacion de nueva carpeta para solo caras
names = [l for l in listdir(TOP_DATA) if os.path.isdir(join(TOP_DATA,l)) ]
# draw each face separately
def draw_faces(filename, result_list):
    # load the image
    data = pyplot.imread(filename)
    # plot each face as a subplot
    k = 1
    for i in range(len(result_list)):
        # get coordinates
        x1, y1, width, height = result_list[i]['box']
        x2, y2 = x1 + width, y1 + height
        if x1 <0:
            x1=0
        if x2 <0:
            x2=0
        if y1 <0:
            y1=0
        if y2 <0:
            y2=0
        # save face
        lalala = cvtColor(data[y1:y2, x1:x2], COLOR_RGB2BGR)
        outfile = '%s/%s_%s' % (FACES+name, k, file)
        imwrite(outfile,lalala)
        k +=k
for name in names:
    onlyfiles = [ f for f in listdir(os.path.join(TOP_DATA,name)) ]
    os.mkdir(os.path.join(FACES,name))
    for file in onlyfiles:
        filename = '%s/%s' % (TOP_DATA+name, file)
        # load image from file
        pixels = pyplot.imread(filename)
        # create the detector, using default weights
        detector = MTCNN()
        #detect faces in the image
        faces = detector.detect_faces(pixels)
        # display faces on the original image
        draw_faces(filename, faces)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...