Aus dem mit Linie gesendeten Bild Wir haben einen Bot erstellt, der Geschlechts-, Altersvorhersagen und Gesichtsausdrucksanalysen durchführt.
So was
Wenn Sie ein Bild senden, wird das Analyseergebnis zurückgegeben (bis zu 3 Personen können gleichzeitig gesehen werden).
Der Quellcode ist hier (Ich war zufrieden, als ich versuchte, es vorerst mit fast solider Schrift zu schaffen Ich habe die Energie für Refactor verloren.
Zusammensetzung wie diese
Da benötigen Sie die URL des Bildes, wenn Sie das Bild an den Linienbot senden Beim Versuch, ein Bild mit dem folgenden Code zu beantworten, ist eine Fehlermeldung aufgetreten
s3_url = generate_presigned_url(
ClientMethod='get_object',
Params={
'Bucket': BUCKET,
'Key': KEY
},
ExpiresIn=60,
HttpMethod='GET'
)
line_bot_api.reply_message(
reply_token=event.reply_token,
messages=ImageSendMessage(
original_content_url=s3_url,
preview_image_url=s3_url
)
)
LineBotApiError: status_code=400, request_id=xxxxx-xxx-xxx-xxx-xxxxxxxxxx, error_response=
{
"details": [
{
"message": "Length must be between 0 and 1000",
"property": "messages[0].originalContentUrl"
},
{
"message": "Length must be between 0 and 1000",
"property": "messages[0].previewImageUrl"
}
],
"message": "The request body has 2 error(s)"
}
URL war zu lang und wurde wütend ...
Das Ausgeben einer signierten URL von s3 ist zu lang zum Senden Erstellen Sie einen neuen öffentlichen S3-Bucket und Ich beschloss, das zu sendende Bild in s3 schreibgeschützt zu platzieren und die URL zu erhalten
#Zugang geben und setzen
client.put_object(ACL='public-read', Bucket=bucketname, Body=image, Key=key)
#URL wird durch Verkettung von Zeichenfolgen erstellt
s3_pub_url = 'https://' + bucketname + '.s3-ap-northeast-1.amazonaws.com/' + key
line_bot_api.reply_message(
reply_token=event.reply_token,
messages=ImageSendMessage(
original_content_url=s3_pub_url,
preview_image_url=s3_pub_url
)
)
Ich habe noch nie s3 public access verwendet Schauen wir uns die Zugriffsbehörde an und so weiter. Es hat lange gedauert, damit herumzuspielen.
So zeichnen Sie die BoundingBox auf das Bild Beim Importieren eines PIL-Moduls ist eine Fehlermeldung aufgetreten
Unable to import module 'lambda_function': cannot import name '_imaging'
Es funktioniert lokal, aber wenn es Lambda ist, kann das PIL-Modul nicht importiert werden und es tritt ein Fehler auf. Als ich den Google-Lehrer fragte, scheint es, dass die Bibliothek von Pillow einen Teil hat, der vom Betriebssystem abhängt. Es scheint also, dass Sie die Pillow-Bibliothek in der Umgebung installieren müssen, in der Lambda funktioniert (= Amazon Linux).
Referenzseite: https://michimani.net/post/aws-use-pillow-in-lambda/
Im obigen Artikel wird die Bibliothek mit Docker erstellt. ~~ Es schien lästig zu sein ~~, also habe ich beschlossen, eine Bibliothek mit cloud9 zu erstellen
--Erstellen einer Cloud9-Umgebung
--Importiere Lambda
--Installieren Sie die Kissenbibliothek im Zielordner
python3 -m pip install Pillow -t ./
Ich möchte nicht so viel Geld wie möglich ausgeben Die cloud9-Umgebung wurde nur zum Erstellen der Pillow-Bibliothek verwendet
Beim Herunterladen aus cloud9 wird es mit zip komprimiert. Da es für jeden Ordner komprimiert ist, kann die Funktion nicht aufgerufen werden, wenn Sie Lambda so wie es ist bereitstellen, und es tritt ein Fehler auf (1 Verlust).
Refactoring
Der Code ist fast solide.
Ich möchte zumindest den Prozess des Zugriffs auf die Datenbank trennen
Organisation um AWS-Berechtigungen
―― ~~ Es ist mühsam, über verschiedene Dinge nachzudenken ~~, Lambdas iam-Rolle hat unnötige Privilegien
Ich möchte organisieren, damit ich keine unnötigen Privilegien habe
--DynamoDB Design
――Da ich bisher nur RDB berührt habe, weiß ich nicht, wie ich es oder seine Vorzüge verwenden soll.
Die Verwendung ist wie bei RDB geworden, daher möchte ich mein Wissen erweitern und erneut über das Design nachdenken.
Recommended Posts