程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[python] to FaceRecognizeSys [Doing...]

編輯:Python

文章目錄

  • 人臉識別系統
    • 項目技術棧
    • Face Rec
      • flash
      • SQLAlchemy
      • Falsk WTF
      • bootstrap快速渲染
      • Template
      • 常用Web 框架
      • 裝飾器
        • Router(路由)
        • flask_login
        • 異常
        • Manager
      • dlib (python庫)
        • hog 提取特征函數
        • cnn提取特征函數
      • python 基礎
        • 鴨子類型和多態
        • 抽象基類
        • python 函數
    • 准備:
    • 運行:

時間事件備注2022.06.21startJucwJucw

能成大事的人總會做出很暖心的舉動,比如給我點個贊

人臉識別系統

項目技術棧

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:[email protected]: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 只需要指定方法名,很多對象可以寫入很多魔法函數,可迭代的特性

itenext 可迭代類型

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


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved