手把手教你使用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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章