Я работаю над проектом, в котором мне нужно проанализировать изображение с помощью Google Vision API и опубликовать ответ в таблицу Dynamodb.
Я успешно реализовал API Vision, но не смог преобразовать его ответ в словарь Python.
Вот что я пробовал:
if form.is_valid():
obj = form
obj.imageFile = form.cleaned_data['imageFile']
obj.textFile = form.cleaned_data['textFile']
obj.save()
print(obj.imageFile)
# Process the image using Google's vision API
image_path = os.path.join(settings.MEDIA_ROOT, 'images/', obj.imageFile.name)
print(image_path)
image = vision_image_manager(image_path)
text_path = os.path.join(settings.MEDIA_ROOT, 'texts/', obj.textFile.name)
text = nlp_text_manager(text_path)
# print(image)
# print(text)
results = {
'imageResponse': image,
'textResult': text
}
print(results.values())
print(type(results))
post_to_dynamo_db(image, text)
Вот реализация Vision API:
def vision_image_manager(image_file):
# Instantiates a client
client = vision.ImageAnnotatorClient()
file_name = str(image_file)
with open(file_name, 'rb') as img_file:
content = img_file.read()
image = types.Image(content=content)
response = client.label_detection(image=image)
labels = response.label_annotations
print('Labels:')
for label in labels:
print(label.description)
return labels
А вот и post_to_dynamo_db
Функция:
def post_to_dynamo_db(image, text):
session = boto3.Session(
aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY,
aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY
)
client = session.resource('dynamodb')
table = client.Table('basetbl')
result_dict = {
'image': image,
'text': text
}
json_dict = dict_to_item(result_dict)
# item = dict_to_item(result_dict)
table.put_item(
Item={
'id': int(generate_pid()),
'response_obj': json_dict
}
)
Теперь, он не возвращает никакой ошибки, но response_obj
не размещен в таблице базы данных, потому что это неправильная форма объекта, проблема здесь в том, что <class 'google.protobuf.pyext._message.RepeatedCompositeContainer'>
тип ответа возвращается из API Google.