手把手教你使用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>