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.
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
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)
http://edosha.hatenablog.jp/entry/2017/09/05/174453 https://ysss.hateblo.jp/entry/2018/07/31/053507
Recommended Posts