こんにちは。
ご覧頂きありがとうございます。
現在、1台のパソコンとソケット通信を用いて、画像を送受信するプログラムを作成しています。
これは、1台のパソコンの中で、クライアント側とサーバー側で通信を行い、画像を送受信するというプログラムを作成しています。
ですが、サーバー側のプログラムの方でエラーが出ており、対処法がわからずに困っています。
ですので、ご指摘やアドバイスお願いできないでしょうか。
[server.py] import numpy as np from PIL import Image import cv2 import time import json import base64 import requests import os import shutil def send_image(img): encimg = cv2.imencode(".png", img) img_byte = base64.b64encode(img_str).decode("utf-8") img_json = json.dumps({'image': img_byte}).encode('utf-8') img_str = encimg.tostring() ponse = 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) print('cap return value = ',cap) cap.set(cv2.CAP_PROP_FPS, 30) i = 0 while True: img = cap.read() if i % 5 == 0: send_image(img) i += 1
error
1
cap return value = <VideoCapture 000001E1C8476E30>
Traceback (most recent call last):
File "send.py", line 27, in <module>
send_image(img)
File "send.py", line 12, in send_image
encimg = cv2.imencode(".png", img)
TypeError: Expected Ptrcv::UMat for argument '%s'
[client.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
image_dir = "./images"
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
def detect_face(img):
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():
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) 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) global count filename = "./images/image{}.png".format(count) cv2.imwrite(filename, decimg) count += 1 return Response(response=json.dumps({"message": "{} was saved".format(filename)}), status=200)
if name == 'main':
app.run(host='0.0.0.0', port=8080)
[実行結果]
- Serving Flask app "client" (lazy loading)
- Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead. - Debug mode: off
- Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/08 05:54
2020/06/08 06:11
2020/06/08 06:23
2020/06/08 06:44