[python] to FaceRecognizeSys [Doing...]

本文档详细介绍了一个人脸识别系统的开发技术栈,包括使用Python的Flask框架、SQLAlchemy进行数据库操作、Flask-WTF处理表单验证、Bootstrap进行前端渲染。还涉及到dlib库的人脸检测、HOG和CNN特征提取。同时,文章涵盖了异常处理、路由装饰器、Flask-Login用户认证以及项目管理和数据库迁移。
摘要由CSDN通过智能技术生成

时间⏲事件🌍备注🇳🇦
2022.06.21startJucw
Jucw

能成大事的人总会做出很暖心的举动,比如给我点个赞

人脸识别系统

项目技术栈

Face Rec

技术栈

python

mysql

flash

flask.pocoo.org

中文文档:https://dormousehole.readthedocs.io/en/latest/quickstart.html

教程:

https://flask.net.cn/tutorial/index.html

轻量级框架
Flask通常被称为微框架,因为核心功能包括基于Werkzeug的WSGI和路由以及基于Jinja2的模板引擎。 此外,Flask框架还支持cookie和会话以及Web助手,如JSON,静态文件等。显然,这对于开发完整的Web应用程序来说还不够。 这是为什么还要Flask扩展插件。 Flask扩展为Flask框架提供了可扩展性
//更多请阅读:https://www.yiibai.com/flask/flask_extensions.html#article-start

SQLAlchemy

https://zhuanlan.zhihu.com/p/27400862
OMR对象关系映射https://www.cnblogs.com/huanhang/p/6054908.html
SQLAlchemy 是一个功能强大的Python ORM 工具包,口碑不错

数据库的连接

数据库操作逻辑

编辑用户
根据id找到对应的用户,对用户的数据进行更新

user = User.query.get_404(id) #  如果id为none,返回404,否则返回调用

删除用户

添加角色:

db.session.add(role)

db.session.commit() 提交到数据库

添加用户:

在调用添加用户函数的时候,生成一个默认的管理员账户,

engine = create_engine('dialect+driver://username:password@host:port/database')
dialect:数据库类型
driver:数据库驱动选择
username:数据库用户名
password: 用户密码
host:服务器地址
port:端口
database:数据库

操作

session(会话)的概念,可以看成一个管理数据库持久连接的对象,在此下面是完全透明得连接池和事务等东西

get_session底下configure可以控制auto_commit参数,= False时写操作默认都不放在事务里,SQLAlchemy默认为True

session.add函数将会把Model加入当前的持久空间(可以从session.dirty看到),直到commit时更新

Falsk WTF

wtf form 保护表单免受跨站脚本攻击

继承Form 类或者子类

验证器validator 都有message参数;

Required代表是必填

表单验证

Required() , validators

判读用户是否存在

User.query.filter_by(number=field.data).first()

继承父类

super(EditForm, self).__init__(*args, **kargs) 单个参数和多参数

bootstrap快速渲染

使用bootstrap 预先定义好的表单样式渲染整个Flask-WTF表单,

wtf.quick_form() 函数的参数为 Flask-WTF 表单对象

Bootstrap

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的

列的定义

https://blog.csdn.net/liyang_nash/article/details/81163782

{% import "bootstrap/wtf.html" as wtf %}
<form class="form" method="POST">
    {{ form.hidden_tag() }}
    {{ wtf.form_field(form.title) }} % 使用bootstrap 使用form.title form.body form.submit 使用默认进行渲染
    {{ wtf.form_field(form.body) }}
    {{ wtf.form_field(form.submit) }}
</form>

使用表单地默认样式进行渲染

{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

Template

Base.html

基类

{% extends "bootstrap/base.html" %} 继承boostrap中的基类

form.hidden_tag()

模板参数将被替换为一个隐藏字段,用来是实现在配置中激活的 CSRF 保护。如果你已经激活了 CSRF,这个字段需要出现在你所有的表单中。

表单登录

StringField , PasswordField , BooleanField, SubmitField, IntegerField, FileField,

https://www.yiibai.com/flask/flask_wtf.html

常用Web 框架

Django

装饰器

Router(路由)

@app.route('/',methods=['Get','POST'])

flask_login

@login_required

装饰器,判读用户是否登录,只有登录的用户才能访问请求

和django 是一样的属性

异常

捕捉函数抛出异常,同Vue语法类似

@app.errorhandler(404) # 
Manager

在终端可以使用指令来操作程序

command装饰器后的作用,自定义命令

使用场景:创建一些敏感数据(后台管理员),批量添加测试数据

dlib (python库)

机器学习开源库,,包含很多算法C++技术编写的跨平台通用库

dlib.get_frontal_face_detector函数实现人脸检测可视化

hog 提取特征函数

1.1. 基于 HOG 特征和线性分类器的人脸检测 下面是采用经典的 HOG(Histogram of Oriented Gradients) 特征 结合线性分类器、图像金字塔(image pyramid) 及滑窗检测机制(sliding window detection scheme)实现的人脸检测器.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import dlib

detector = dlib.get_frontal_face_detector()

def face_detect(imgfile):
    win = dlib.image_window()

    print("Processing file: {}".format(imgfile))
    img = dlib.load_rgb_image(imgfile)

    # 人脸检测
    dets = detector(img, 1)

    # len(dets) 即为检测到的人脸个数
    print("Number of faces detected: {}".format(len(dets)))

    # 遍历所有检测到人脸的坐标
    # left:人脸左边距离图片左边界的距离
    # right:人脸右边距离图片左边界的距离
    # top:人脸上边距离图片上边界的距离
    # bottom:人脸下边距离图片上边界的距离
    for i, d in enumerate(dets):
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
            i, d.left(), d.top(), d.right(), d.bottom()))

    win.clear_overlay()
    win.set_image(img)
    win.add_overlay(dets)
    dlib.hit_enter_to_continue()


def face_detect_with_scores(imgfile):
    win = dlib.image_window()

    # 如果要进一步得到更全面的检测信息,如每个检测结果的分数(score).
    # score 值越大,则检测的可信度越高.
    img = dlib.load_rgb_image(imgfile)

    # 第三个参数 -1 用于设置调整检测阈值;
    # 如果该参数值为负数,则返回更多的结果;
    # 如果该参数值为正数,则返回较少的结果.
    dets, scores, idx = detector.run(img, 1, -1)
    for i, d in enumerate(dets):
        print("Detection {}, score: {}, face_type:{}".format(
            d, scores[i], idx[i]))

    win.clear_overlay()
    win.set_image(img)
    win.add_overlay(dets)
    dlib.hit_enter_to_continue()


if __name__ == '__main__':
    imgfile = "test.jpg"
    face_detect(imgfile)
    face_detect_with_scores(imgfile)
    
    
cnn提取特征函数

采用预训练的 CNN 模型进行图片中的人脸检测.

基于 CNN 模型比基于 HOG 特征模型的人脸检测准确度更高. 但是需要更多的计算资源,即在 GPU 上运行才可有较好的运行速率.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import dlib


# 加载预训练人脸检测CNN模型
cnn_face_model = "mmod_human_face_detector.dat"
cnn_face_detector = dlib.cnn_face_detection_model_v1(cnn_face_model)

def cnn_face_detect(imgfile):
    win = dlib.image_window()

    print("Processing file: {}".format(imgfile))
    img = dlib.load_rgb_image(imgfile)

    # CNN 人脸检测器
    # 检测器返回 mmod_rectangles object,其包含 mmod_rectangle objects 列表.
    # mmod_rectangle object 包含两个变量:
    #     [1]. dlib.rectangle object
    #     [2]. confidence score
    dets = cnn_face_detector(img, 1)

    # 批量检测图片
    # dets = cnn_face_detector([image list], upsample_num, batch_size = 128)

    # len(dets) 即为检测到的人脸个数
    print("Number of faces detected: {}".format(len(dets)))
    for i, d in enumerate(dets):
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {} Confidence: {}".format(
            i, d.rect.left(), d.rect.top(), d.rect.right(), d.rect.bottom(), d.confidence))

    rects = dlib.rectangles()
    rects.extend([d.rect for d in dets])

    win.clear_overlay()
    win.set_image(img)
    win.add_overlay(rects)
    dlib.hit_enter_to_continue()


if __name__ == '__main__':
    imgfile = "test.jpg"
    cnn_face_detect(imgfile)

https://cloud.tencent.com/developer/article/1401153

视频:马士兵

python 基础

python 基础

鸭子类型和多态

内置类型,getitems 只需要指定方法名,很多对象可以写入很多魔法函数,可迭代的特性

ite next 可迭代类型

call 可调用类型

抽象基类

动态语言,本身就是支持多态语言,无需指明类型,运行时候才能知道错误

无需继承指定的类,鸭子类型是动态语言设计的一种理念;

hasattr(com,"_len__") # 判断是否含有该属性(方法)
某些情况需要判定某个对象类型,需要抽象基类
强制某个子类必须实现某些方法

定义一个抽象基类,用户后期使用根据自己的需求,实现自己的方法,
子类自己实现基类的方法
abs 
collections.abc
两个不同的基类
使用装饰器 @abc.abstractmethod 
初始化的时候如果没有子类没有实现,这个时候会抛出异常,需要子类实现抽象基类;
模板函数 __class__
isinstance() 实例判断 内部函数,接口的强制规定

isinstance and type

isinstance 检查类型是否一致,返回True或者False,会根据继承关系找到

is 和 == 符号区别

type(b) is B # 比较的是id 是否相同,

== 符号是判读值是否相同

类变量和对象变量(实例变量)

类里面的变量称为类变量

初始化参数,self.变量是对象变量:先查找实例变量,找不到将向上查找类变量

对于类变量不会去找实例变量;

class A:
    aa = 0
    def __init__(self,x,y):
        self.x = x
        self.y = y
a = A()
A.aa = 11
a.aa = 100 # 这里使用实例修改类变量会不会覆盖类变量
print(a.aa) # 100 首先会在实例中查找aa的值
print(A.aa) # 11
python 函数

__repr__()

内置函数通过重写,来打印需要显示的字符

准备:

使用conda 虚拟环境运行该项目

  1. 安装依赖的包:
    pip install -r requirements.txt

运行:

  1. 更新数据库:python app.py db upgrade

  2. 生成管理员用户:python app.py init

  3. 运行:python app.py runserver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jucway

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值