[PYTHON] Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät

Überblick

Aus dem mit Linie gesendeten Bild Wir haben einen Bot erstellt, der Geschlechts-, Altersvorhersagen und Gesichtsausdrucksanalysen durchführt.

So was スクリーンショット 2020-01-23 22.38.40.png スクリーンショット 2020-01-23 22.40.02.png

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.

Sprache und Technologie

Verfassung

Zusammensetzung wie diese コメント 2020-01-24 093650.jpg

Wo ich erwischt wurde

Wenn ich versuche, ein Bild mit der signierten URL von s3 zu senden, kann ich es nicht senden

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.

Das PIL-Modul kann nicht von Lambda gelesen werden

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).

Aktuelle Probleme, was Sie tun möchten usw.

--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

Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
[Python] Ich habe einen LINE-Bot erstellt, der Gesichter erkennt und Mosaikverarbeitungen durchführt.
In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe mit Heroku + Flask + PostgreSQL (Heroku Postgres) einen LINE-Bot erstellt, der mir den Typ und die Stärke von Pokemon in der Garal-Region angibt.
Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Ich möchte einen Slack-Bot, der das Gehalt eines Teilzeitjobs aus dem Zeitplan von Google Kalender berechnet und anzeigt!
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe eine Twitter-App erstellt, die das Bild eines bestimmten Charakters auf der Twitter-Timeline durch Pytorch-Transfer-Lernen identifiziert und speichert
Eine Formel, die einfach das Alter ab dem Geburtsdatum berechnet
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
[Python] Ich habe einen Bot erstellt, der mir die aktuelle Temperatur anzeigt, wenn ich einen Ortsnamen in LINE eingebe
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Ich habe eine KI erstellt, die aus Trivia vorhersagt, und mich dazu gebracht, auf meine Trivia zu schließen. Hee-AI
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Ich habe einen LINE-Bot erstellt, der jeden Tag pünktlich empfohlene Bilder sendet
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
[Bot dekodieren] Ich habe versucht, einen Bot zu erstellen, der mir den Rassenwert von Pokemon angibt
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Es scheint, dass die Messaging-API neu von LINE veröffentlicht wurde, daher habe ich einen BOT erstellt, der nur wie gewohnt morphologische Analysen durchführt.
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Ich habe mit LINE Bot ein Haushaltsbuch für Bot erstellt
Ich habe ein Docker-Image erstellt, das RSS liest und automatisch regelmäßig twittert, und es veröffentlicht.
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Ich habe mit Raspberry Pi ein System erstellt, das regelmäßig den Unbehaglichkeitsindex des Raums misst und eine LINE-Benachrichtigung sendet, wenn es sich um einen gefährlichen Wert handelt
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Ein Memo, das das Gesicht des mit Djangos OpenCV von der Webkamera aufgenommenen Bilds erkennt und zurückgibt.
LINE Bot, der Sie über die interessierenden Aktien informiert
[Python / C] Ich habe versucht, ein Gerät zu erstellen, das den Bildschirm eines PCs drahtlos aus der Ferne scrollt.
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert (Google Kalender Edition).
Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
Ich wandelte die Zeit in eine ganze Zahl um, zerlegte sie in Primfaktoren und machte einen Bot, um das Ergebnis zu twittern (xkcd story)
Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
Wenn ich einen ECR-Scan von einem CDK erstellt habe, konnte ich die Rückseite des Scans sehen
Ich möchte den Schnittpunkt einer Bezier-Kurve und einer geraden Linie finden (Bezier-Clipping-Methode)
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe versucht, mit PI Fu aus einem Bild ein 3D-Modell einer Person zu erstellen
So erstellen Sie einen interaktiven LINE BOT 004 (beantworten Sie den Stichtag eines börsennotierten Unternehmens)
Holen Sie sich ein Bild von einer Webseite und ändern Sie die Größe
Ich habe versucht, eine Rangliste zu erstellen, indem ich das Mitgliederteam der Organisation abgekratzt habe
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt