偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

總結(jié)幾個(gè)簡單好用的Python人臉識別算法

人工智能 人臉識別
人臉識別的算法最核心的工作是從一張圖片中識別出人臉的位置。識別的算法可以說是多種多樣, 下面我就來為大家一一介紹下。

哈嘍,大家好。

今天給大家總結(jié)幾個(gè)簡單、好用的人臉識別算法。人臉識別是計(jì)算機(jī)視覺中比較常見的技術(shù),生活中,我們接觸最多的人臉識別場景是人臉考勤,我之前還專門寫過一篇人臉考勤的項(xiàng)目,感興趣的朋友可以看看。

人臉識別的算法最核心的工作是從一張圖片中識別出人臉的位置。識別的算法可以說是多種多樣, 下面我就來為大家一一介紹下。

1. HoG人臉檢測

該算法采用傳統(tǒng)的機(jī)器學(xué)習(xí)算法來識別人臉。傳統(tǒng)機(jī)器學(xué)習(xí)算法的特點(diǎn)是人工構(gòu)造特征,然后將構(gòu)造好的特征送入模型訓(xùn)練。

該算法用HoG?提取圖片中人臉特征,用SVM算法進(jìn)行分類。

HoG(Histogram of Oriented Gradient, 方向梯度直方圖)特征是一種在計(jì)算機(jī)視覺和圖像處理中用來進(jìn)行物體檢測的特征描述子,通過計(jì)算和統(tǒng)計(jì)圖像局部區(qū)域的梯度方向直方圖來構(gòu)成特征。

dlib庫中有該算法的實(shí)現(xiàn),下面我們看看核心代碼

import dlib
# 加載預(yù)訓(xùn)練的 HoG 人臉檢測器
hog_face_detector = dlib.get_frontal_face_detector()

# 對圖片進(jìn)行人臉檢測
results = hog_face_detector(imgRGB, 0)

for bbox in results:
x1 = bbox.left() # 人臉左上角x坐標(biāo)
y1 = bbox.top() # 人臉左上角y坐標(biāo)
x2 = bbox.right() # 人臉右下角x坐標(biāo)
y2 = bbox.bottom() # 人臉右下角y坐標(biāo)

results? 存放一張圖中檢測出來的多個(gè)人臉, 遍歷results可以得到每張人臉的矩形框。

檢測示例如下:

圖片

綠框框出來的就是算法檢測出來的人臉。

HoG 人臉檢測由于采用傳統(tǒng)機(jī)器學(xué)習(xí)算法,所以性能比較高,在CPU上運(yùn)行也可以比較快。但它無法檢測小于 80*80 的人臉,對旋轉(zhuǎn)人臉、非正面人臉,識別效果也不太好。

2. 深度學(xué)習(xí)人臉檢測

雖然傳統(tǒng)機(jī)器學(xué)習(xí)算法檢測更快,但準(zhǔn)確度卻有待提升。基于深度學(xué)習(xí)的人臉檢測算法往往會更加準(zhǔn)確。

這里介紹的是使用殘差網(wǎng)絡(luò)ResNet-10?通過網(wǎng)絡(luò)(模型)在圖像的單通道( Single Shot Detector,SSD)中檢測多個(gè)人臉。簡稱SSD算法。

首先,需要將原始圖片進(jìn)行blob預(yù)處理,然后直接送入模型,進(jìn)行檢測

cv2庫提供了該算法的實(shí)現(xiàn),核心代碼如下:

import cv2

# 加載預(yù)訓(xùn)練的 SSD 模型
opencv_dnn_model = cv2.dnn.readNetFromCaffe(
prototxt="models/deploy.prototxt"
, caffeModel="models/res10_300x300_ssd_iter_140000_fp16.caffemodel")

# 原始圖片 blob 處理
preprocessed_image = cv2.dnn.blobFromImage(image, scalefactor=1.0, size=(300, 300), mean=(104.0, 117.0, 123.0), swapRB=False, crop=False)

# blob 圖片送入模型
opencv_dnn_model.setInput(preprocessed_image)

# 模型推理,進(jìn)行人臉檢測
results = opencv_dnn_model.forward()

# 遍歷人臉
for face in results[0][0]:
# 置信度
face_confidence = face[2]

# 人臉邊框的左上角和右下角坐標(biāo)點(diǎn)
x1 = int(bbox[0] * image_width)
y1 = int(bbox[1] * image_height)
x2 = int(bbox[2] * image_width)
y2 = int(bbox[3] * image_height)

results[0][0]存放了檢測出來的多張人臉,每張人臉用數(shù)組表達(dá),數(shù)組的第3位存放置信度,可以通過閾值過濾不置信的人臉。數(shù)組的第4~7位存放檢測出來的人臉矩形框左上角和右下角的坐標(biāo)。

相比于 HoG? 人臉檢測,SSD 算法對遮擋、非正面人臉也能檢測出來。

圖片

3. 卷積神經(jīng)網(wǎng)絡(luò)人臉檢測

卷積就不多說了,了解計(jì)算機(jī)視覺的都知道。

dlib庫提供了卷積神經(jīng)網(wǎng)絡(luò)人臉檢測算法的實(shí)現(xiàn),用法跟之前類似

import dlib

# 記載預(yù)訓(xùn)練模型
cnn_face_detector = dlib.cnn_face_detection_model_v1("models/mmod_human_face_detector.dat")

# 人臉檢測
results = cnn_face_detector(imgRGB, 0)

# 遍歷每張人臉
for face in results:
# 人臉邊框
bbox = face.rect

# 人臉邊框的左上角和右下角坐標(biāo)點(diǎn)
x1 = int(bbox.left() * (width/new_width))
y1 = int(bbox.top() * (height/new_height))
x2 = int(bbox.right() * (width/new_width))
y2 = int(bbox.bottom() * (height/new_height))

results的解析跟上面類似,這里就不在贅述了。

采用卷積神經(jīng)網(wǎng)絡(luò)的人臉檢測算法優(yōu)勢很明顯,比前兩個(gè)更準(zhǔn)確和健壯,并且還能夠檢測遮擋下的人臉。

圖片

即便非正面、且光線暗的圖片,也能很好檢測出來

圖片

但該算法相應(yīng)的缺點(diǎn)也很明顯,檢測過程所花費(fèi)的時(shí)間非常長,無法在 CPU 上實(shí)時(shí)運(yùn)行。

4. BlazeFace

上面的算法要么精度高、速度慢,要么速度快,精度低。那有沒有一種檢測算法,既有高準(zhǔn)確率,又有高性能呢?

答案是肯定的,BlazeFace?是一種非常輕量級且高度準(zhǔn)確的人臉檢測器,號稱亞毫秒級的人臉檢測器。其靈感來自 Single Shot MultiBox Detector (SSD)? 和 MobileNetv2。

Mediapipe庫提供了該算法的實(shí)現(xiàn),核心代碼如下:

import mediapipe as mp

# 畫圖工具
mp_drawing = mp.solutions.drawing_utils

# 初始化人臉檢測模型
mp_face_detection = mp.solutions.face_detection
mp_face_detector = mp_face_detection.FaceDetection(min_detection_confidence=0.4)

results = mp_face_detector.process(imgRGB)

if results.detections:

# 變臉檢測出的人臉
for face_no, face in enumerate(results.detections):

# 畫人臉關(guān)鍵點(diǎn)
mp_drawing.draw_detection(image=output_image, detection=face, keypoint_drawing_spec=mp_drawing.DrawingSpec(color=(0,255,0),thickness=-1, circle_radius=image_width//115), bbox_drawing_spec=mp_drawing.DrawingSpec(color=(0,255,0),thickness=image_width//180))

# 畫人臉框
face_bbox = face.location_data.relative_bounding_box
x1 = int(face_bbox.xmin*image_width)
y1 = int(face_bbox.ymin*image_height)

cv2.rectangle(output_image, pt1=(x1, y1-image_width//20), pt2=(x1+image_width//16, y1), color=(0, 255, 0), thickness=-1)

效果如下:

圖片

可以看到,BlazeFace算法不光能檢測人臉,還能識別出人臉6個(gè)關(guān)鍵點(diǎn)(眼睛、鼻子、耳朵、嘴)。

上面就是今天分享的4個(gè)人臉識別的算法。

識別出人臉,我們再做人臉考勤就非常簡單了,把人臉Embedding成向量,計(jì)算向量的之間的距離即可。

責(zé)任編輯:武曉燕 來源: 渡碼
相關(guān)推薦

2021-07-01 08:42:39

人臉識別AI人工智能

2021-03-09 09:20:09

人臉識別人工智能智能手機(jī)

2020-07-29 17:15:19

Java人臉識別人工智能

2014-05-04 13:39:15

人臉識別算法

2020-08-19 09:25:32

Python人臉識別人工智能

2021-05-10 11:08:00

人工智能人臉識別

2021-10-08 15:55:52

Python模塊開發(fā)

2021-01-29 23:14:31

人臉識別軟件工具

2024-06-12 12:57:12

2020-05-15 15:20:38

指紋識別人臉識別手機(jī)

2021-05-16 15:32:34

人工智能人臉識別技術(shù)

2017-03-20 08:58:02

Python人臉識別AI

2022-10-20 09:33:35

2021-04-12 10:32:58

人臉識別人工智能數(shù)據(jù)

2019-12-27 16:20:35

人臉識別深度學(xué)習(xí)人工智能

2019-02-13 19:20:12

人臉識別深度學(xué)習(xí)人工智能

2018-05-11 14:10:17

Python人臉識別

2021-12-07 23:00:55

人臉識別安全技術(shù)

2021-04-07 22:31:51

人臉識別人工智能隱私

2022-06-16 21:01:32

人臉識別人工智能生物識別
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號