Держите элементы словаря в том же порядке в выходных данных AWS Rekognition в python - PullRequest
0 голосов
/ 15 июня 2019

Я использую AWS rekognition для изучения эмоций. Это мой код:

photo = 'InVacation.jpg'

image = Image.open(photo)
stream = io.BytesIO()
image.save(stream,format="JPEG")
image_binary = stream.getvalue()

response = client.detect_faces(
    Image={'Bytes':image_binary},
    Attributes=['ALL']
    )
response

Проблема в том, что каждый раз, когда я обрабатываю несколько фотографий, порядок типов эмоций меняется. Например:

response['FaceDetails'][0]["Emotions"]

[{'Type': 'DISGUSTED', 'Confidence': 3.6973443031311035},
 {'Type': 'HAPPY', 'Confidence': 1.150834321975708},
 {'Type': 'ANGRY', 'Confidence': 4.140467643737793},
 {'Type': 'CALM', 'Confidence': 70.42333221435547},
 {'Type': 'CONFUSED', 'Confidence': 9.918739318847656},
 {'Type': 'SAD', 'Confidence': 4.620922565460205},
 {'Type': 'SURPRISED', 'Confidence': 6.048351764678955}]

Используя тот же код, вторая фотография дает:

[{'Type': 'SAD', 'Confidence': 4.620922565460205},
 {'Type': 'ANGRY', 'Confidence': 4.140467643737793},
 {'Type': 'CONFUSED', 'Confidence': 9.918739318847656},
 {'Type': 'CALM', 'Confidence': 70.42333221435547},
 {'Type': 'DISGUSTED', 'Confidence': 3.6973443031311035},
 {'Type': 'HAPPY', 'Confidence': 1.150834321975708},
 {'Type': 'SURPRISED', 'Confidence': 6.048351764678955}]

В первом испытании порядок вывода такой: Отвращение, счастье ... Удивление. Однако во втором испытании порядок меняется на: Грустный, злой ... Удивленный.

Изменения в выводе заказа становятся проблемой, потому что я хочу просмотреть несколько фотографий и сохранить значения confidence в наборе строк. Например:

FaceEmotions = pd.DataFrame(response['FaceDetails'][0]["Emotions"])
awsConfidence = FaceEmotions[["Confidence"]].T
awsConfidence.columns = ["Surprised", "Happy", "Calm", "Sad", "Disgusted", "Angry", "Confused"]
awsConfidence

           Surprised     Happy       Calm       Sad Disgusted      Angry    Confused
Confidence  3.697344  6.048352  70.423332  4.620923  1.150834   9.918739    4.140468
Confidence  5.623224  3.032444  40.413132  6.420921  2.400834   1.118739    7.140412
And so on...

Какую настройку мне нужно изменить в модуле boto3, чтобы сохранить постоянными типы заказов на выходе?

1 Ответ

1 голос
/ 15 июня 2019

Вы можете иметь согласованные фреймы данных с пандами, отсортировав значения по типу, затем транспонировав и установив правильный индекс:

#Supposing x is the array you get
df1 = pd.DataFrame(x).sort_values(by='Type').\
    set_index('Type').T.reset_index().drop('index', axis= 1)

затем вы можете с легкостью объединить созданные вами фреймы данных:

dfc = pd.concat([df1,df2,df3])
...