栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Flask入门第一次实验

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask入门第一次实验

Flask是一个基于Python的Web应用开发框架,它非常小,但具备丰富的功能。因为它从开发开始就被设计为可扩展的框架,本身只具备一个包含基本服务的强健核心,其他功能则可通过扩展实现。

Flask的两个主要依赖分别是:由Werkzeug提供路由、调试和Web服务器网关接口;由Jinjia2提供模板系统。

我在实验中使用的是pycharm,通过文件->设置->项目:xx->python解释器->"+"可安装Flask

在使用flask时,需要先创建一个程序实例,把接受自客户端的所有请求进行处理。

from flask import Flask
app=Flask(__name__)

接下来是定义路由,它是用来处理url和函数之间的关系 ,这个函数被称为视图函数,它返回对url的响应,可以是简单的HTML字符串,也可以是表单等。因为作业的要求,我在视图函数中用到了

flask中的render_template(),对已经写好的HTML文件进行渲染,高效灵活生成HTML。

#路由
@app.route("/",methods=['GET', 'POST'])
#视图函数
def index():
    return render_template("index.html")

html等文件放置也有要求,在项目创建的时候,要在 项目下新建static、templates文件夹,static里面放置的是图片、css等静态文件,templates放置的是html文件。

最后需要启动服务器

if __name__=='__main__':
    #启动方法
    app.run(debug=True)

点击运行的网址就可以看到实验结果。 

以上是我对flask最最基本的了解。接下来是我的实验:

在本次实验中,我链接了MySQL数据库进行四级英语词汇的读取,并将他以表单形式进行输出;以及使用了pytorch进行人脸检测与比对。

点击下面两个链接可以分别跳转到对应实验结果。

 

 

人脸特征向量太多,就草草截图了。

(具体html就不放上来了,写得很简单)以下是FLASK程序代码,包含数据库的链接使用。

from flask import Flask, render_template
from face import  Face
import pymysql
import torch
from facenet_pytorch import MTCNN, InceptionResnetV1
from torch import device
db=pymysql.connect(host='localhost',user='root',password='123456',database='data2022',charset='utf8')

#创建实例
app=Flask(__name__)

#路由
@app.route("/",methods=['GET', 'POST'])
#视图函数
def index():
    return render_template("index.html")

@app.route('/word',methods=['GET', 'POST'])
def word():
    with db.cursor() as cursor:
        sql = 'select * from map_enword;'
        cursor.execute(sql)
        result = cursor.fetchall()
        result = list(result)
        cursor.close()
        db.close()
    return render_template("word.html", result=result)

@app.route('/face_recognition',methods=['GET', 'POST'])
def face_recognition():
    import cv2
    import numpy as np
    import torch
    from facenet_pytorch import MTCNN, InceptionResnetV1

    # 获得人脸特征向量
    def load_known_faces(dstImgPath, savePath, mtcnn, resnet):
        aligned = []
        knownImg = cv2.imread(dstImgPath)  # 读取图片
        face = mtcnn(knownImg)  # 使用mtcnn检测人脸,返回【人脸数组】
        # 新增人脸检测
        from torchvision.transforms import ToPILImage
        show = ToPILImage()  # 可以把Tensor转成Image,方便可视化
        #show(face[0]).show()
        show(face[0]).save(savePath)

        if face is not None:
            aligned.append(face[0])
        aligned = torch.stack(aligned).to(device)
        with torch.no_grad():
            known_faces_emb = resnet(aligned).detach().cpu()  # 使用resnet模型获取人脸对应的特征向量
        return known_faces_emb, knownImg

    # 计算人脸特征向量间的欧氏距离,设置阈值,判断是否为同一个人脸
    def match_faces(faces_emb, known_faces_emb, threshold):
        isExistDst = False
        distance = (known_faces_emb[0] - faces_emb[0]).norm().item()
        print("距离:", round(distance, 2))
        print("人脸特征向量n", known_faces_emb[0], faces_emb[0])
        if (distance < threshold):
            isExistDst = True
        return isExistDst, distance

    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    # mtcnn模型加载【设置网络参数,进行人脸检测】
    mtcnn = MTCNN(min_face_size=12, thresholds=[0.2, 0.2, 0.3], keep_all=True, device=device)
    # InceptionResnetV1模型加载【用于获取人脸特征向量】
    resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)
    MatchThreshold = 0.8  # 人脸特征向量匹配阈值设置

    known_faces_emb, _ = load_known_faces('static/huge1.jpg', 'static/new_huge1.jpg', mtcnn, resnet)  # 已知人物图
    # bFaceThin.png  lyf2.jpg
    faces_emb, img = load_known_faces('static/huge2.jpg', 'static/new_huge2.jpg', mtcnn, resnet)  # 待检测人物图
    isExistDst ,distance= match_faces(faces_emb, known_faces_emb, MatchThreshold)  # 人脸匹配
    if isExistDst:
        boxes, prob, landmarks = mtcnn.detect(img, landmarks=True)  # 返回人脸框,概率,5个人脸关键点
        result = '匹配'
    else:
        result = '不匹配'

    return render_template("face_recognition.html", result=result, known_faces_emb=known_faces_emb, faces_emb=faces_emb, distance=distance)
if __name__=='__main__':
    #启动方法
    app.run(debug=True)

# if __name__ == '__main__':
#     from gevent import pywsgi
#
#     server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)
#     server.serve_forever()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/915860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号