Envoyer et recevoir des données d'image au format JSON en Python sur le réseau

introduction

J'ai écrit plusieurs fois un code pour envoyer l'image prise par la caméra Web à un autre serveur exécutant le modèle de détection de visage etc. via la communication HTTP, alors faites une note pour ne pas l'oublier. Dans l'exemple de code, l'image prise à partir de la caméra Web est envoyée au serveur à intervalles réguliers côté émission, le visage est détecté côté réception, une boîte est dessinée et le fichier image est enregistré localement.

Expéditeur

sender.py


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

def send_image(img):
  #Convertir l'image au format envoyable et la stocker en 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')
  
  #Envoyer une requête HTTP
  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

Receveur

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

#Créer un dossier pour enregistrer les images
image_dir = "./images"
if not os.path.isdir(image_dir):
  os.mkdir(image_dir)

def detect_face(img):
  #Modèle de détection de visage ('haarcascade_frontalface_default.xml') Peut être téléchargé à partir du lien ci-dessous
  # 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():
    #Processus de conversion des données
    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)

    #Détecter le visage et dessiner la boîte
    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)
    
    #Enregistrer le fichier image
    global count
    filename = "./images/image{}.png ".format(count)
    cv2.imwrite(filename, decimg)
    count += 1

    #Envoyer une réponse HTTP
    return Response(response=json.dumps({"message": "{} was saved".format(filename)}), status=200)

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

référence

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

Recommended Posts

Envoyer et recevoir des données d'image au format JSON en Python sur le réseau
POSTER l'image avec json et la recevoir avec flask
Lire JSON avec Python et générer un CSV
Envoyer et recevoir des données binaires via une communication série avec python3 (sur Mac)
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Lire des données json avec python
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Envoyez et recevez des données avec MQTT via Watson IoT Platform
Réseau neuronal avec OpenCV 3 et Python 3
Encodage et décodage JSON avec python
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
Envoyer l'image avec python et enregistrer avec php
[Python3] Enregistrez la matrice de moyenne et de covariance dans json avec les pandas
Construction de pipeline de données avec Python et Luigi
Recevoir des données textuelles de mysql avec python
mail html avec image à envoyer avec python
POSTER diversement avec Python et recevoir avec Flask
Convertir des données Excel en JSON avec python
Lire et écrire des fichiers JSON avec Python
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
[python] Envoyez l'image capturée de la caméra Web au serveur et enregistrez-la
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
J'ai essayé de "différencier" l'image avec Python + OpenCV
Recevoir et afficher les données de formulaire HTML en Python
Exécuter du SQL brut avec redash à l'aide de la source de données Python et afficher le résultat
Jouons avec Python Receive et enregistrez / affichez le texte du formulaire de saisie
J'ai essayé de "binariser" l'image avec Python + OpenCV
Je suis accro à la différence dans la façon dont Flask et Django reçoivent les données JSON
[Python3] Lecture et écriture avec isoformat datetime avec json
Résolution du modèle Lorenz 96 avec Julia et Python
Archivez et compressez tout le répertoire avec python
POST JSON avec Python et recevez avec PHP
Génération de configuration de réseau de modèles avec Python et Jinja2
Commencez la communication avec UDP et envoyez et recevez avec TCP
Afficher l'image après l'augmentation des données avec Pytorch
Acquérir les données de Mitsubishi UFJ International Investment Trust eMAXIS avec Python et créer un graphique avec le début du terme comme 100
Extraire le tableau des fichiers image avec OneDrive et Python
Recevez le formulaire en Python et faites diverses choses
Remarques sur le traitement d'images HDR et RAW avec Python
[Python] Obtenez les nombres dans l'image graphique avec OCR
Visualisez la gamme d'insertions internes et externes avec python
Convertissez l'image au format .zip en PDF avec Python
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Installez la dernière version stable de Python avec pyenv (à la fois 2 et 3)
Lire le fichier json avec Python, le formater et générer le json
Spécifiez MinGW comme compilateur utilisé dans Python
Étudiez l'échange de données Java et Python avec Apache Arrow
Analyse de données avec python 2
[Python] Utiliser JSON avec Python
Traitement d'image avec Python
Envoyer des e-mails par Python
Analyse de données avec Python
J'ai essayé la même analyse de données avec kaggle notebook (python) et PowerBI en même temps ②
J'ai essayé la même analyse de données avec kaggle notebook (python) et PowerBI en même temps ①
J'ai essayé de trouver l'entropie de l'image avec python