手把手教你使用pytorch+flask搭建草图检索系统(二)

手把手教你使用pytorch+flask搭建草图检索系统(二)



一、提要与预告

  • 准备工作 -> 链接
  • 后端搭建 -> 本篇内容
  • 前端搭建
  • 前后端交互
  • demo

上篇《手把手教你使用pytorch+flask搭建草图检索系统(一)》介绍了搭建系统的准备工作,以及本系统的检索原理,还有孪生网络SketchTriplet提取特征的过程,预训练好的模型、模型所使用的代码、数据集已经贴在了上篇节尾,大家可以去google drive或者百度云上下载。本篇将介绍检索系统的后端搭建过程,包括使用flask搭建服务器,以及使用pytorch载入模型。已经咕咕咕到了现在,一是学业二是工作,近期我会努力逐步更新的,在此向那些等了半年的同学们说声抱歉。

二. flask搭建服务器

网上教程极多,我看的是这个FLASK的官方中文文档,写得极其详细且易懂,从零到一应有尽有,为了快速上手,我这里就简单讲下我的理解,flask有点像MVC(Module, View, Controller)那一套,它拥有两个固定的文件夹:static, templatesstatic里面存放着静态网页所加载的资源(如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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章