Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存

简介: 关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。

1.什么是Flask

  • Flask是一个基于python开发并依赖于 jinja2 模板和 werkzeug WSGI 服务器的一个微型框架。
  • 而werkzeug本质上是一个 socket 服务端,用于接收浏览器发送过来的请求,并进行预处理,然后再触发flask,这个时候我们就通过flask给我们提供的功能去对浏览器发送的请求做一个处理,当要处理的文件相对比较复杂时,则需要通过jinja2模板来处理,也就是我们常说的 渲染 ,之后再把处理过的数据返回给浏览器

学习链接

2.通过Flask上传图片到服务器端(以原名保存)

server.py

from flask import request
from flask import Flask
import json
import numpy as np

import cv2
import base64
from gevent.pywsgi import WSGIServer

app = Flask(__name__)

# 定义路由
@app.route("/photo", methods=['POST'])
def get_frame():
    # 接收图片
    # upload_file = json.loads(request.json)
    # print(upload_file['file'])
    # upload_file=request.form['file']
    filename=request.get_json()
    print(filename)
    # print(type(filename)=='str')

    if (isinstance(filename,str)):
        filname1=json.loads(filename)
        tmp=filname1['file']
        name=filname1['name']
        img = base64.b64decode(str(tmp))
        image_data = np.fromstring(img, np.uint8)
        image_data = cv2.imdecode(image_data, cv2.IMREAD_COLOR)
        cv2.imwrite('F:/pycharm/feature_match/face_result/{}'.format(name), image_data)
    else:
        tmp=filename['file']
        img = base64.b64decode(str(tmp))
        image_data = np.fromstring(img, np.uint8)
        image_data = cv2.imdecode(image_data, cv2.IMREAD_COLOR)
        cv2.imwrite('F:/pycharm/feature_match/face_result/1.jpg', image_data)
    # fff=json.load(filename)
    # print(upload_file)
    # img=cv2.imread(tmp)
    # cv2.imwrite("222.jpg",img)
    # print(className,prob)
    json_info = json.dumps(dic, ensure_ascii=False)
    return json_info

if __name__ == "__main__":
    dic = {}
    app.run(host='10.16.55.26',port=9000)
    ## Serve the app with gevent
    # http_server = WSGIServer(('0.0.0.1',5000),app)
    # http_server.serve_forever()

client.py

import requests
import base64,glob
import json,cv2,os
import numpy as np
# API地址
url = "http://10.16.55.26:9000/photo"

# opencv读取出来的图片相当于numpy数组
def cv2_to_base64(image):
    image1 = cv2.imencode('.jpg', image)[1]
    image_code = str(base64.b64encode(image1))[2:-1]
    return image_code

def base64_to_cv2(image_code):
    #解码
    img_data=base64.b64decode(image_code)
    #转为numpy
    img_array=np.fromstring(img_data,np.uint8)
    #转成opencv可用格式
    img=cv2.imdecode(img_array,cv2.COLOR_RGB2BGR)
    return img
# with open(r'D:\pycharm\car_fee_system\images\result\2.jpg', 'rb') as f:
#     img = base64.b64encode(f.read()).decode()
path=r'D:\pycharm\car_fee_system\images\result/'
images_paths = glob.glob(os.path.join(path + '*.jpg')) #*.jpg中的*,表示能匹配多个字符
for images_path in images_paths:
    a,b= os.path.splitext(os.path.split(images_path)[1])
    name=str(a)+str(b)
    print(name)
    image=cv2.imread(images_path)
    image_code=cv2_to_base64(image)
    image = []
    image.append(image_code)
    # 拼接参数
    files = {'file': image,'name': name}
    fff=json.dumps(files, ensure_ascii=False)
    # 发送post请求到服务器端json.dumps(files, ensure_ascii=False)
    # r = requests.post(url, json=json.dumps(files, ensure_ascii=False))
    r = requests.post(url, json=fff)
    print(r.status_code)
    print(r.content)
    print(type(json.dumps(files, ensure_ascii=False)))

client_camera.py

import requests
import base64,glob
import json,cv2,os
import numpy as np
# API地址
url = "http://10.16.55.26:9000/photo"

# opencv读取出来的图片相当于numpy数组
def cv2_to_base64(image):
    image1 = cv2.imencode('.jpg', image)[1]
    image_code = str(base64.b64encode(image1))[2:-1]
    return image_code

def base64_to_cv2(image_code):
    #解码
    img_data=base64.b64decode(image_code)
    #转为numpy
    img_array=np.fromstring(img_data,np.uint8)
    #转成opencv可用格式
    img=cv2.imdecode(img_array,cv2.COLOR_RGB2BGR)
    return img
# with open(r'D:\pycharm\car_fee_system\images\result\2.jpg', 'rb') as f:
#     img = base64.b64encode(f.read()).decode()
# frame 就是每一帧图像,是个三维矩阵
# 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
capture = cv2.VideoCapture(0)
ret, frame = capture.read()
a='cemare1'
b=1
while ret:
    b+=1
    if b%5==0:
        ret, frame = capture.read()
        name=str(a)+'-'+str(b)
        image_code=cv2_to_base64(frame)
        image = []
        image.append(image_code)
        # 拼接参数
        files = {'file': image,'name': name}
        fff=json.dumps(files, ensure_ascii=False)
        # 发送post请求到服务器端json.dumps(files, ensure_ascii=False)
        # r = requests.post(url, json=json.dumps(files, ensure_ascii=False))
        r = requests.post(url, json=fff)
        print('200为成功 500为失败',r.status_code)
        print('正在上传第{}张图片,图片名为{}'.format(b,name))
    # print(r.content)
    # print(type(json.dumps(files, ensure_ascii=False)))
目录
相关文章
|
1天前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
16 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1天前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
10 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1天前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
6 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
3天前
|
JSON 测试技术 数据库
Python的Flask框架
【10月更文挑战第4天】Python的Flask框架
|
3天前
|
存储 安全 数据库
Flask框架中,如何实现用户身份验证和会话管理?
【10月更文挑战第4天】Flask框架中,如何实现用户身份验证和会话管理?
|
5天前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
19 1
|
弹性计算 运维 安全
阿里云云服务器ECS介绍 学习笔记
阿里云云服务器ECS介绍 学习笔记
172 0
|
1天前
|
存储 机器学习/深度学习 应用服务中间件
阿里云倚天云服务器实例:计算型c8y、通用型g8y、内存型r8y实例介绍
阿里云倚天云服务器是基于阿里云自研的倚天710 ARM架构CPU打造的高性能计算产品系列,它依托先进的第四代神龙架构,旨在为用户提供稳定可预期的超高效能体验。倚天云服务器在存储、网络性能及计算稳定性方面实现了显著提升,主要得益于其芯片级的快速路径加速技术。本文将深度解析阿里云倚天云服务器的计算型c8y、通用型g8y、内存型r8y实例,探讨其优势及适用场景,以供选择参考。
|
2天前
|
网络协议 应用服务中间件 网络安全
阿里云轻量应用服务器的使用限制
阿里云轻量应用服务器的使用限制
|
4天前
阿里云国际版购买了服务器后如何下载发票?
阿里云国际版购买了服务器后如何下载发票?