Face API Python SDK“图片尺寸过小"; (PersonGroupPerson add_face_from_stream) [英] Face API Python SDK "Image Size too Small" (PersonGroupPerson add_face_from_stream)

查看:108
本文介绍了Face API Python SDK“图片尺寸过小"; (PersonGroupPerson add_face_from_stream)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,文档

First things first, the documentation here says "JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB."

我正在发送一个〜1.4 MB的.jpg 在我的搜索中,遇到此问题的其他人是自定义形成数据包,并遇到了传输图像的问题. 但是与其他不同,我不是在形成自己的API调用,只是将jpg传递给python sdk. 出了什么问题/我想念什么?

I am sending a .jpg that is ~1.4 MB In my search, others who had this issue were custom forming packets and ran into issues chunk transfering images. however unlike the others I am not forming my own API call, just passing a jpg to the python sdk. What is going wrong/what am I missing?

错误是:

getting image, start time
opening image:  2019_11_30_18_40_21.jpg
time elapsed for capturing image: 8.007975816726685
time elapsed for detecting image: 0.0017137527465820312
appending face found in image
identifying face
time elapsed for identifying image: 0.8008027076721191
Person for face ID e7b2c3fe-6a62-471f-8371-8c1e96608362 is identified in 2019_11_30_18_40_21.jpg with a confidence of 0.68515.
Traceback (most recent call last):
File "./GreeterCam_V0.1 - testing.py", line 116, in <module>
face_client.person_group_person.add_face_from_stream(PERSON_GROUP_ID, face.candidates[0].person_id, image)
File "/home/pi/.local/lib/python3.7/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.  

我的源代码是:

if __name__ == '__main__':
    FRAMES_PER_SECOND = 0.13
    ENDPOINT = os.environ['COGNITIVE_SERVICE_ENDPOINT']
    KEY = os.environ['COGNITIVE_SERVICE_KEY']
    face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))
    PERSON_GROUP_ID = 'my-unique-person-group'
    #IMAGES_FOLDER = os.path.join(os.path.dirname(os.path.realpath(__file__)))
    #camera = PiCamera()
    #camera.start_preview()
    test_images = [file for file in glob.glob('*.jpg')]
    #webcam = cv2.VideoCapture(0)
    while(True):
        start_time = time.time()
        print('getting image, start time')
        for image_name in test_images:
            image = open(image_name, 'r+b')
            print("opening image: ", image_name)
            time.sleep(5)
            faces = face_client.face.detect_with_stream(image)     
            #image = open(os.path.join(IMAGES_FOLDER, imageName), 'r+b')
            face_ids = []
            time1 = time.time()
            print('time elapsed for capturing image: ' + str(time1-start_time))
            # detect faces in image

            time2 = time.time()
            print('time elapsed for detecting image: ' + str(time2-time1))
            for face in faces:
                print('appending face found in image')
                face_ids.append(face.face_id)
            if face_ids:
                print('identifying face')
                # if there are faces, identify person matching face
                results = face_client.face.identify(face_ids, PERSON_GROUP_ID)
                time3 = time.time()
                print('time elapsed for identifying image: ' + str(time3-time2))
                name = 'person-created-' + str(time.strftime("%Y_%m_%d_%H_%M_%S"))
                if not results:
                    #if there are no matching persons, make a new person and add face
                    print('No person in the person group for faces from {}.'.format(imageName))
                    new_person = face_client.person_group_person.create(PERSON_GROUP_ID, name)
                    face_client.person_group_person.add_face_from_stream(PERSON_GROUP_ID, new_person.person_id, image)
                    time4 = time.time()
                    print('time elapsed for creating new person: ' + str(time4-time3))
                    print('New Person Created: {}'.format(new_person.person_id))
                for face in results:
                    if not face.candidates:
                        new_person = face_client.person_group_person.create(PERSON_GROUP_ID, name)
                        face_client.person_group_person.add_face_from_stream(PERSON_GROUP_ID, new_person.person_id, image)
                    else:
                        #add face to person if match was found
                        print('Person for face ID {} is identified in {} with a confidence of {}.'.format(face.face_id, os.path.basename(image.name), face.candidates[0].confidence)) # Get topmost confidence score
                        face_client.person_group_person.add_face_from_stream(PERSON_GROUP_ID, face.candidates[0].person_id, image)
                        time4 = time.time()
                        print('time elapsed for creating new person: ' + str(time4-time3))   

这也是在pi 3B(+?)上的Raspbian上

Also this is on Raspbian on a pi 3B(+?)

推荐答案

我在一边运行您的代码,并遇到相同的错误.代码中的image param似乎有问题:

I run your code on my side and got the same error .Seems there is something wrong with image param in code :

face_client.person_group_person.add_face_from_stream(PERSON_GROUP_ID, face.candidates[0].person_id, image)

在该阶段:

#如果找到匹配项,将人脸添加

#add face to person if match was found

当我将此行代码更改为:

When I changed this line code to :

face_client.person_group_person.add_face_from_stream(PERSON_GROUP_ID, face.candidates[0].person_id, open(image_name,"r+b"))

问题已解决,已成功将面孔添加到一个人(此人之前有1张面孔):

The issue was solved, faces has been added to a person successfully (this person has 1 face before) :

希望有帮助.

这篇关于Face API Python SDK“图片尺寸过小"; (PersonGroupPerson add_face_from_stream)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆