手把手教你使用pytorch+flask搭建草图检索系统(二)
一、提要与预告
- 准备工作 -> 链接
- 后端搭建 -> 本篇内容
- 前端搭建
- 前后端交互
- demo
上篇《手把手教你使用pytorch+flask搭建草图检索系统(一)》介绍了搭建系统的准备工作,以及本系统的检索原理,还有孪生网络SketchTriplet提取特征的过程,预训练好的模型、模型所使用的代码、数据集已经贴在了上篇节尾,大家可以去google drive或者百度云上下载。本篇将介绍检索系统的后端搭建过程,包括使用flask搭建服务器,以及使用pytorch载入模型。已经咕咕咕到了现在,一是学业二是工作,近期我会努力逐步更新的,在此向那些等了半年的同学们说声抱歉。
二. flask搭建服务器
网上教程极多,我看的是这个FLASK的官方中文文档,写得极其详细且易懂,从零到一应有尽有,为了快速上手,我这里就简单讲下我的理解,flask有点像MVC(Module, View, Controller)那一套,它拥有两个固定的文件夹:static
, templates
,static
里面存放着静态网页所加载的资源(如css、image、json等),所以针对某个静态端点static
所使用的图像img_0.png
,它的路径应该是:
url_for('static', filename='img_0.png')
而它在文件系统的位置应该是static/img_0.png
,我们如果要访问这张图像,应该在浏览器中键入127.0.0.1/img_0.png
。静态端点中可以有多个网页,保存在templates
中,因此这个templates
就有点像MVC中的V,而static
则是MVC中的M,根目录下的python文件则是MVC中的C。也就是说,在一个APP中,应该有如下的文件结构:
- base_folder
- static
- img
- css
...
- templates
- 0.html
- 1.html
...
- controller.py
注意,static
, templates
不一定绝对叫这个名字,在flask初始化的时候,你可以随意修改,修改方式如下:
app = Flask(__name__, template_folder='templates', static_folder='static')
2.1 Controller实现
首先,对于手绘检索系统,按照流程来看:首先得有个界面绘制草图,这是前端工作;然后将绘制的草图保存下来,上传到后端,这是前后端交互;接着,后端依据上传的草图进行检索,得到检索结果,这是后端工作;然后将检索结果返回给前端,着是前后端交互;最后将检索结果展示出来,这是前端工作。也就是说,我们需要两次前端、两次交互、一次后端。
按上面的思路,我们先给绘图界面留个坑,在根目录下新建controller.py
,按下面的代码,新建一个flask路由,使服务器能够正常运行、访问:
from flask import Flask, render_template
# 新建APP
app = Flask(__name__, template_folder='templates', static_folder='static')
# 设置静态文件缓存过期时间
app.send_file_max_age_default = timedelta(seconds=1)
# 新建路由,因为有上传、下载,所以要将POST/GET都打开
@app.route('/upload', methods=['POST', 'GET'])
# 定义上传的行为
def upload():
if request.method == 'POST':
# 渲染上传页面
return render_template('upload.html')
接着在./templates
文件夹内,新建upload.html
静态网页,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<h1>HELLO WORLD!</h1>
</head>
<body>