requests上传和flask接收OpenCV的图片数据

  • 方式一,从本地读取到图片或帧,上传到flask服务器
# 客户端发送
def image_post():
	data = {"type_code": type_code,
	        "area_id": area_id}
	# 以文件的格式上传,节省传输时间
	file = {"file": ("file_name.jpg",open("file_path", 'rb'), "image/jpg")}
	
	res = requests.post(url=post_url, files=file, data=data)

# flask服务器端接收
# 接收客服端发来的图片,以时间戳格式命名保存到服务器对应目录下
@recognize.route("/save_scene", methods=['post'])
def save_scene():
	# 以下一些参数根据实际情况而言,主要看获取图像和保存图像那里
	type_code = request.form.get("type_code")
	type_code = int(type_code)
	area_id = request.form.get("area_id")
	area_id = int(area_id)
	
	######## 获取图像
	scene_img = request.files["scene_img"]
	
	# 拼接保存路径和图像名
	dir_name = os.path.join(all_scene_picture_dir, type_code_d[type_code])
	scene_picture_name = str(t) + '.jpg'
	scene_picture_path = os.path.join(scene_picture_dir, scene_picture_name)
	
	####### 保存图片到服务器
	scene_img.save(scene_picture_path)
	return200
  • 方式二,从opencv图片或帧对象转换为二进制文件上传
# 客户端发送
def image_post():
	data = {"type_code": type_code,
	        "area_id": area_id}
	# 以文件的格式上传,节省传输时间
	# cv2.imencode(".jpg", frame)[1].tobytes()是将ndarray对象以jpg格式编码,再转换为二进制格式数据
	file = {"file": ("file_name.jpg", cv2.imencode(".jpg", frame)[1].tobytes(), "image/jpg")}
	
	res = requests.post(url=post_url, files=file, data=data)

# flask服务器端接收
# 接收客服端发来的图片,以时间戳格式命名保存到服务器对应目录下
@recognize.route("/save_scene", methods=['post'])
def save_scene():
	# 以下一些参数根据实际情况而言,主要看获取图像和保存图像那里
	type_code = request.form.get("type_code")
	type_code = int(type_code)
	area_id = request.form.get("area_id")
	area_id = int(area_id)
	
	######## 获取图像
	scene_img = request.files["scene_img"]
	
	# 拼接保存路径和图像名
	dir_name = os.path.join(all_scene_picture_dir, type_code_d[type_code])
	scene_picture_name = str(t) + '.jpg'
	scene_picture_path = os.path.join(scene_picture_dir, scene_picture_name)
	
	####### 保存图片到服务器
	scene_img.save(scene_picture_path)
	return200
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
感谢您的提问。根据您的需求,我给出的解决方案如下: 1. 在树莓派上使用OpenCV库捕获摄像头采集的图片,并使用Tflite模型进行图像识别。以下是示例代码: ```python import cv2 import numpy as np import tflite_runtime.interpreter as tflite # 加载Tflite模型和标签 interpreter = tflite.Interpreter(model_path="model.tflite") interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() # 打开摄像头并进行识别 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() # 对图片进行处理,使其符合模型输入要求 processed_frame = preprocess(frame) # 将处理后的图片送入Tflite模型进行预测 interpreter.set_tensor(input_details[0]['index'], processed_frame) interpreter.invoke() output_data = interpreter.get_tensor(output_details[0]['index']) # 对预测结果进行处理,得到识别结果 result = postprocess(output_data) # 将识别结果和系统信息通过post方法传回server post_result_to_server(result) cv2.imshow("frame", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 2. 在电脑端使用Flask建立服务器,并与浏览器和树莓派分别建立socket连接。以下是示例代码: ```python from flask import Flask, render_template from flask_socketio import SocketIO, emit app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app) # 客户端连接时向浏览器发送实时数据 @socketio.on('connect') def test_connect(): emit('my response', {'data': 'Connected'}) # 浏览器通知server图片已更新 @socketio.on('update image') def handle_update_image(): # 等待0.1s后,通知树莓派进行图像识别并开始计时 emit('start recognition', {'data': 'Start Recognition'}) # 接收树莓派传回的识别结果和系统信息 @socketio.on('result from pi') def handle_result_from_pi(result): # 计算用时、准确率和错误率 accuracy, error_rate, time = calculate(result) # 通知浏览器更新 emit('update result', {'accuracy': accuracy, 'error_rate': error_rate, 'time': time}) # 渲染网页 @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': socketio.run(app) ``` 3. 在树莓派上使用SocketIO建立socket连接,并通过socket发送识别结果和系统信息。以下是示例代码: ```python import socketio import requests sio = socketio.Client() # 建立socket连接 @sio.event def connect(): print('connection established') # 接收server传来的开始识别的信号 @sio.on('start recognition') def handle_start_recognition(): # 捕获图片并进行识别 result = recognize_image() # 将识别结果和系统信息通过post方法传回server post_result_to_server(result) # 将识别结果和系统信息通过post方法传回server def post_result_to_server(result): url = 'http://server_ip:server_port/result_from_pi' headers = {'Content-Type': 'application/json'} response = requests.post(url, headers=headers, json=result) print(response) sio.connect('http://server_ip:server_port') ``` 希望这些示例代码可以对您有所帮助。如果您有任何问题,请随时问我。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值