[python] to FaceRecognizeSys [Doing...]
Posted Jucway
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[python] to FaceRecognizeSys [Doing...]相关的知识,希望对你有一定的参考价值。
文章目录
时间⏲ | 事件🌍 | 备注🇳🇦 |
---|---|---|
2022.06.21 | start | Jucw |
Jucw |
能成大事的人总会做出很暖心的举动,比如给我点个赞
人脸识别系统
项目技术栈
Face Rec
技术栈
python
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 虚拟环境运行该项目
- 安装依赖的包:
pip install -r requirements.txt
运行:
-
更新数据库:
python app.py db upgrade
-
生成管理员用户:
python app.py init
-
运行:
python app.py runserver
以上是关于[python] to FaceRecognizeSys [Doing...]的主要内容,如果未能解决你的问题,请参考以下文章
3 Ways to Write Text to a File in Python
python 提示 :OverflowError: Python int too large to convert to C long
Python int too large to convert to C long
python [markdown_to_toc] make_markdown_to_html#toc #python_markdown