Senden und Empfangen von Bilddaten als JSON in Python über das Netzwerk

Einführung

Ich habe den Code mehrmals geschrieben, um das von der Webkamera aufgenommene Bild über HTTP-Kommunikation an einen anderen Server zu senden, auf dem das Gesichtserkennungsmodell usw. ausgeführt wird. Machen Sie sich also eine Notiz, damit Sie es nicht vergessen. Im Beispielcode wird das von der Webkamera aufgenommene Bild in regelmäßigen Abständen auf der sendenden Seite an den Server gesendet, das Gesicht auf der empfangenden Seite erkannt, ein Kästchen gezeichnet und die Bilddatei lokal gespeichert.

Absender

sender.py


import numpy as np
import cv2
import time
import json
import base64
import requests

def send_image(img):
  #Konvertieren Sie das Bild in das sendbare Format und speichern Sie es in JSON
  _, encimg = cv2.imencode(".png ", img)
  img_str = encimg.tostring()
  img_byte = base64.b64encode(img_str).decode("utf-8")
  img_json = json.dumps({'image': img_byte}).encode('utf-8')
  
  #HTTP-Anfrage senden
  response = requests.post("http://localhost:8080/save", data=img_json)
  print('{0} {1}'.format(response.status_code, json.loads(response.text)["message"]))

if __name__ == '__main__':
  cap = cv2.VideoCapture(0)
  cap.set(cv2.CAP_PROP_FPS, 30)
  i = 0
  while True:
    _, img = cap.read()
    if i % 5 == 0:
      send_image(img)
    i += 1

Empfänger

receiver.py


import os
import json
import cv2
import base64
import numpy as np
from datetime import datetime
from flask import Flask, request, Response
app = Flask(__name__)
count = 0

#Erstellen Sie einen Ordner zum Speichern von Bildern
image_dir = "./images"
if not os.path.isdir(image_dir):
  os.mkdir(image_dir)

def detect_face(img):
  #Gesichtserkennungsmodell ('haarcascade_frontalface_default.xml') Kann über den unten stehenden Link heruntergeladen werden
  # https://github.com/opencv/opencv/tree/master/data/haarcascades
  face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  faces = face_cascade.detectMultiScale(img, 1.3, 5)
  return faces

@app.route('/save', methods=['POST'])
def save_image():
    #Datenkonvertierungsprozess
    data = request.data.decode('utf-8')
    data_json = json.loads(data)
    image = data_json['image']
    image_dec = base64.b64decode(image)
    data_np = np.fromstring(image_dec, dtype='uint8')
    decimg = cv2.imdecode(data_np, 1)

    #Gesicht erkennen und Box zeichnen
    gray_img = cv2.cvtColor(decimg, cv2.COLOR_BGR2GRAY)
    faces = detect_face(gray_img)
    for (x,y,w,h) in faces:
      decimg = cv2.rectangle(decimg,(x,y),(x+w,y+h),(255,0,0),2)
    
    #Bilddatei speichern
    global count
    filename = "./images/image{}.png ".format(count)
    cv2.imwrite(filename, decimg)
    count += 1

    #HTTP-Antwort senden
    return Response(response=json.dumps({"message": "{} was saved".format(filename)}), status=200)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Referenz

http://edosha.hatenablog.jp/entry/2017/09/05/174453 https://ysss.hateblo.jp/entry/2018/07/31/053507

Recommended Posts

Senden und Empfangen von Bilddaten als JSON in Python über das Netzwerk
POST das Bild mit json und erhalte es mit der Flasche
Lesen Sie JSON mit Python und geben Sie CSV aus
Senden und Empfangen von Binärdaten über serielle Kommunikation mit Python3 (auf Mac)
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Lesen von JSON-Daten mit Python
Löse das Spiralbuch (Algorithmus und Datenstruktur) mit Python!
Senden und Empfangen von Daten mit MQTT über die Watson IoT Platform
Neuronales Netzwerk mit OpenCV 3 und Python 3
JSON-Codierung und -Decodierung mit Python
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Sende Bild mit Python und speichere mit PHP
[Python3] Speichern Sie die Mittelwert- und Kovarianzmatrix in json mit Pandas
Datenpipeline-Aufbau mit Python und Luigi
Empfangen Sie Textdaten von MySQL mit Python
HTML-Mail mit Bild zum Senden mit Python
POST verschieden mit Python und empfange mit Flask
Konvertieren Sie Excel-Daten mit Python in JSON
Lesen und Schreiben von JSON-Dateien mit Python
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Empfangen und Anzeigen von HTML-Formulardaten in Python
Führen Sie Raw SQL mit Redash unter Verwendung der Python-Datenquelle aus und zeigen Sie das Ergebnis an
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich bin süchtig nach dem Unterschied, wie Flask und Django JSON-Daten empfangen
[Python3] Lesen und Schreiben mit datetime isoformat mit json
Lösen des Lorenz 96-Modells mit Julia und Python
Archivieren und komprimieren Sie das gesamte Verzeichnis mit Python
POST JSON mit Python und empfange mit PHP
Generierung der Vorlagen-Netzwerkkonfiguration mit Python und Jinja2
Starten Sie die Kommunikation mit UDP und senden und empfangen Sie mit TCP
Zeigen Sie das Bild nach der Datenerweiterung mit Pytorch an
Erfassen Sie mit Python Daten von Mitsubishi UFJ International Investment Trust eMAXIS und erstellen Sie ein Diagramm mit dem Beginn der Laufzeit als 100
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Erhalten Sie das Formular in Python und führen Sie verschiedene Aktionen aus
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Installieren Sie die neueste stabile Version von Python mit pyenv (sowohl 2 als auch 3).
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
Geben Sie MinGW als den in Python verwendeten Compiler an
Untersuchen Sie den Java- und Python-Datenaustausch mit Apache Arrow
Datenanalyse mit Python 2
[Python] Verwenden Sie JSON mit Python
Bildverarbeitung mit Python
Mail per Python senden
Datenanalyse mit Python
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ②
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ①
Ich habe versucht, die Entropie des Bildes mit Python zu finden