azure .cognitiveservices.vision.face.models._models_py3.APIErrorException: (InvalidImageSize) Размер изображения слишком мал - PullRequest
1 голос
/ 20 февраля 2020

СООБЩЕНИЕ ОБ ОШИБКЕ Я пытаюсь загрузить изображения разумного размера (около 20 КБ). Но согласно документации можно загрузить изображение размером от 1КБ до 6МБ. Я надеюсь, что есть часть программы, которая нуждается в модификации для исправления ошибки.

  File "add_person_faces.py", line 46, in <module>
    res = face_client.person_group_person.add_face_from_stream(global_var.personGroupId, person_id, img_data)
  File "C:\Python\Python36\lib\site-packages\azure\cognitiveservices\vision\face\operations\_person_group_person_operations.py", line 785, in add_face_from_stream
    raise models.APIErrorException(self._deserialize, response)
azure.cognitiveservices.vision.face.models._models_py3.APIErrorException: (InvalidImageSize) Image size is too small.

CODE

import os, time
import global_variables as global_var
from azure.cognitiveservices.vision.face import FaceClient
from msrest.authentication import CognitiveServicesCredentials
from azure.cognitiveservices.vision.face.models import TrainingStatusType, Person, SnapshotObjectType, OperationStatusType
import urllib
import sqlite3
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


KEY = global_var.key

ENDPOINT = 'https://centralindia.api.cognitive.microsoft.com'

face_client = FaceClient(ENDPOINT,CognitiveServicesCredentials(KEY))

def get_person_id():
    person_id = ''
    extractId = str(sys.argv[1])[-2:]
    connect = sqlite3.connect("Face-DataBase")
    c = connect.cursor()
    cmd = "SELECT * FROM Students WHERE ID = " + extractId
    c.execute(cmd)
    row = c.fetchone()
    person_id = row[3]
    connect.close()
    return person_id

if len(sys.argv) is not 1:
    currentDir = os.path.dirname(os.path.abspath(__file__))
    imageFolder = os.path.join(currentDir, "dataset/" + str(sys.argv[1]))
    person_id = get_person_id()
    for filename in os.listdir(imageFolder):
        if filename.endswith(".jpg"):
            print(filename)
            img_data = open(os.path.join(imageFolder,filename), "rb")
            res = face_client.face.detect_with_stream(img_data)
            if not res:
                print('No face detected from image {}'.format(filename))
                continue

            res = face_client.person_group_person.add_face_from_stream(global_var.personGroupId, person_id, img_data)
            print(res)  
            time.sleep(6)
else:
    print("supply attributes please from dataset folder")

1 Ответ

0 голосов
/ 21 февраля 2020

После просмотра вызовов API, которые вы делаете, я понял, что некоторые элементы отсутствуют. Возможно, вы разместили не весь код, но ниже я добавлю пример, иллюстрирующий шаги. Использование этих шагов позволяет избежать ошибок изображения, поэтому ошибка изображения «неправильного размера» могла быть следствием пропущенных шагов.

В своем коде, прежде чем вы сможете добавить изображение в группу лиц (PGP), вы должны создать группу людей (PG), чтобы этот PGP принадлежал. Затем, после создания группы лиц (в начале она пуста), необходимо создать сотрудника группы людей с этим идентификатором PG. После того, как эти две вещи созданы, вы можете начать добавлять изображения в свою группу лиц.

Итак, приведенные выше шаги приведены ниже:

  1. Создание группы лиц с помощью вызова API create ()
  2. Создание группы лиц Человек с его вызовом API для create ()
  3. Добавьте ваши изображения в группу лиц Человек с вызовом API add_face_from_stream ()

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

См. Пример кода ниже, где загружено одно локальное изображение и добавлен в группу лиц. Я включу изображение, которое я использую, если вы хотите загрузить и протестировать.

enter image description here

import os
from azure.cognitiveservices.vision.face import FaceClient
from msrest.authentication import CognitiveServicesCredentials

KEY = os.environ['FACE_SUBSCRIPTION_KEY']
ENDPOINT = os.environ['FACE_ENDPOINT']

face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))

person_group_id = 'women_person_group'
person_id = 'women_hats'

image_name = 'woman_with_sunhat.jpg'

# Create empty Person Group. Person Group ID must be lower case, alphanumeric, and/or with '-', '_'.
print('Creating a Person Group:', person_group_id)
face_client.person_group.create(person_group_id=person_group_id, name=person_group_id)

# Create a Person Group Person.
print('Creating the Person Group Person:', person_id)
women_hat_group = face_client.person_group_person.create(person_group_id, person_id)

# Add image to our Person Group Person.
print('Adding face to the Person Group Person:', person_id)
face_image = open(image_name, 'r+b')
face_client.person_group_person.add_face_from_stream(person_group_id, women_hat_group.person_id, face_image)
# Print ID from face.
print('Person ID:', women_hat_group.person_id)

# Since testing, delete the Person Group, so no duplication conflicts if script is run again.
face_client.person_group.delete(person_group_id)
print()
print("Deleted the person group {} from the Azure Face account.".format(person_group_id))
...