[PYTHON] POST das Bild mit json und erhalte es mit der Flasche

Was du machen willst

Ich möchte das Bild als json veröffentlichen und es in einer Flasche erhalten. Daten vom Bytetyp können jedoch nicht als JSON-Wert verwendet werden, sodass ein gewisser Einfallsreichtum erforderlich ist.

Ich habe einen Server lokal eingerichtet und ausprobiert.

Was ist base64?

Wie oben erwähnt, können Binärdaten kein Element von json sein. Textdaten sind OK.

In diesem Fall können die Binärdaten einmal nach einer bestimmten Regel in Textdaten umgewandelt, übertragen und dann am Empfangsziel in die ursprünglichen Binärdaten umgewandelt werden.

Eine der Regeln zum Konvertieren von Binärdaten in Textdaten ist base64.

Diese

Ziemlich sorgfältig erklärt.

Zuerst auf der Client-Seite. Der Datenübergang ist wie folgt.

Importieren Sie das Bild als Kissenbild ⇒ In Bytes konvertieren ⇒ Mit base64 codieren (noch Bytes) ⇒ Konvertieren Sie Daten, die Bytes waren, in str ⇒ json .dumps zu json ⇒ Sie können sicher mit json POSTEN

client.py


import requests
from PIL import Image
import json
import base64
from io import BytesIO

img = Image.open("iruka.jpeg ")

#Konvertieren Sie das Kissenbild in Bytes und dann in base64
buffered = BytesIO()
img.save(buffered, format="JPEG")
img_byte = buffered.getvalue() # bytes
img_base64 = base64.b64encode(img_byte) #base64-codierte Bytes * nicht str

#Es ist immer noch Bytes so json.In str in Dumps konvertieren(Weil das json-Element den Bytetyp nicht unterstützt)
img_str = img_base64.decode('utf-8') # str

files = {
    "text":"hogehoge",
    "img":img_str
    }

r = requests.post("http://127.0.0.1:5000", json=json.dumps(files)) #POST als json an den Server

print(r.json())


>>>{'img_shape': [750, 500], 'text': 'hogehogefuga'}

Dann serverseitig. Der Datenübergang ist wie folgt.

Mit json empfangen ⇒ Extrahieren Sie die gewünschten Daten (in base64 codierte Textdaten) aus json ⇒ Decodieren Sie base64-codierte Textdaten und konvertieren Sie sie in Bytes ⇒ In _io.BytesIO konvertieren, damit es von Pillow verarbeitet werden kann ⇒ Sie können das ursprüngliche Kissenbild sicher erhalten

server.py


from flask import Flask, jsonify, request
from PIL import Image
import json
import base64
from io import BytesIO
import matplotlib.pyplot as plt

app = Flask(__name__)

@app.route("/", methods=["GET", "POST"])
def index():
    json_data = request.get_json() #Holen Sie sich den POSTed Json
    dict_data = json.loads(json_data) #Konvertieren Sie json in ein Wörterbuch

    img = dict_data["img"] #Nehmen Sie base64 heraus# str
    img = base64.b64decode(img) #Konvertieren Sie in base64 konvertierte Bilddaten in ursprüngliche Binärdaten# bytes
    img = BytesIO(img) # _io.Umgerüstet, um von BytesIO Kissen gehandhabt zu werden
    img = Image.open(img) 
    img_shape = img.size #Verarbeiten Sie das aufgenommene Bild entsprechend
    
    text = dict_data["text"] + "fuga" #Mit dem erfassten Text richtig verarbeiten

    #Geben Sie das Verarbeitungsergebnis an den Client zurück
    response = {
        "text":text,
        "img_shape":img_shape        
        }

    return jsonify(response)

if __name__ == "__main__":
    app.debug = True
    app.run()

Aus der Antwort des Servers wurde bestätigt, dass das Bild korrekt verarbeitet wurde.

Apropos base64.b64encode () hat Bytes als Eingabe und Bytes als Ausgabe. Die Eingabe von base64.b64decode () kann Bytes oder str sein, die Ausgabe sind jedoch Bytes.

Referenz

python --command --decode base64 von POST und verwende es in PIL

How to convert PIL Image.image object to base64 string? [duplicate]

Recommended Posts

POST das Bild mit json und erhalte es mit der Flasche
POST verschieden mit Python und empfange mit Flask
POST JSON mit Python und empfange mit PHP
Senden und Empfangen von Bilddaten als JSON in Python über das Netzwerk
POST das ausgewählte Bild auf der Website mit mehrteiligen / Formulardaten und speichere es in Amazon S3! !!
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Schaben Sie den Holojour ab und zeigen Sie ihn in der CLI an
Generieren und veröffentlichen Sie Dummy-Bilddaten mit Django
Beantworten Sie das verkleinerte Bild mit Flask und PILImage
Ich bin süchtig nach dem Unterschied, wie Flask und Django JSON-Daten empfangen
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
Erstellen Sie mit Azure Custom Vision explosionsartig ein Bildklassifizierungsmodell und implementieren Sie es mit Flask
CNN mit Keras Versuchen Sie es mit dem Bild, das Sie aufgenommen haben
Bildsegmentierung mit Scikit-Image und Scikit-Learn
Führen Sie die App mit Flask + Heroku aus
Gewähren Sie mit dem Befehl curl ein Zugriffstoken und POSTEN Sie die API
JSON-Codierung und -Decodierung mit Python
Basisauthentifizierung, Digest-Authentifizierung mit Flask
Nehmen Sie ein Bild mit Pepper auf und zeigen Sie es auf Ihrem Tablet an
[Python3] Speichern Sie die Mittelwert- und Kovarianzmatrix in json mit Pandas
Melden Sie sich mit PycURL an und erhalten Sie eine Antwort
Versuchen Sie, das Bild mit opencv2 zu verwischen
Beurteilen Sie die Erweiterung und laden Sie das Bild herunter
Post Bulletin Board Erstellung mit Flasche
Bild-Upload-Funktion mit Vue.js + Flask
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Fügen Sie Ihre eigenen Bilddaten in Deep Learning ein und spielen Sie damit
Scraping der veröffentlichten CSV mit Github Action und Veröffentlichung auf Github Pages
Extrahieren Sie das Ergebnis des TOP-Befehls mit USER und geben Sie es als CSV aus
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Ich habe den Akkord des Songs mit word2vec vektorisiert und mit t-SNE visualisiert
Konvertieren Sie eine Tabelle in CSV und laden Sie sie mit Cloud-Funktionen in den Cloud-Speicher hoch
Stellen Sie die PDF-Datei ab und stempeln Sie alle Seiten mit vertraulichen Stempeln (Bildern).
Starten Sie die Webkamera, machen Sie ein Standbild und speichern Sie es lokal
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
Gesichtsbildinferenz mit Flask und TensorFlow
Klicken Sie mit der rechten Maustaste auf das Bild → Realisieren Sie "Mit TinyPNG komprimieren"
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Suchen Sie es in der Warteschlange und bearbeiten Sie es
Fügen Sie dem Bild Linien und Text hinzu
(Für mich) Flask_3 (Formular, POST und GET)
Dispersion mit Pythons Standardbibliothek und Kissen Ermitteln Sie die RGB-Standardabweichung des Bildes und stellen Sie fest, ob es monochromatisch ist
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
Irgendwie hat der Code, den ich geschrieben habe, funktioniert und ich war beeindruckt, also werde ich ihn veröffentlichen
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern
Lesen Sie das von flask gepostete Bild, damit es von opencv verarbeitet werden kann
Es ist sehr schnell, wenn Sie das Notfall-Erdbeben-Bulletin auf dem starken Bewegungsmonitor erhalten und mit JSON bearbeiten
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Schneiden Sie das Bild mit Pythonista auf abgerundete Ecken
Bildtext und Post to Slack (Python Slackbot)
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Lesen Sie JSON mit Python und geben Sie CSV aus
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
Bestimmen Sie die Zahlen in dem mit der Webkamera aufgenommenen Bild
Erkennen Sie Ordner mit demselben Bild in ImageHash