小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 山峰云繞 2022-07-18 發(fā)布于貴州

https://m.toutiao.com/is/2Sqf4LD/?=總結(jié)幾個(gè)簡單好用的Python人臉識(shí)別算法 


哈嘍,大家好。

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

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

1. HoG人臉檢測(cè)

該算法采用傳統(tǒng)的機(jī)器學(xué)習(xí)算法來識(shí)別人臉。傳統(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)行物體檢測(cè)的特征描述子,通過計(jì)算和統(tǒng)計(jì)圖像局部區(qū)域的梯度方向直方圖來構(gòu)成特征。

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

import dlib# 加載預(yù)訓(xùn)練的 HoG 人臉檢測(cè)器hog_face_detector = dlib.get_frontal_face_detector()# 對(duì)圖片進(jìn)行人臉檢測(cè)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 存放一張圖中檢測(cè)出來的多個(gè)人臉, 遍歷results可以得到每張人臉的矩形框。

檢測(cè)示例如下:

綠框框出來的就是算法檢測(cè)出來的人臉。

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

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

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

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

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

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

相比于 HoG 人臉檢測(cè),SSD 算法對(duì)遮擋、非正面人臉也能檢測(cè)出來。

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

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

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

import dlib# 記載預(yù)訓(xùn)練模型cnn_face_detector = dlib.cnn_face_detection_model_v1('models/mmod_human_face_detector.dat')# 人臉檢測(cè)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ò)的人臉檢測(cè)算法優(yōu)勢(shì)很明顯,比前兩個(gè)更準(zhǔn)確和健壯,并且還能夠檢測(cè)遮擋下的人臉。

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

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

4. BlazeFace

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

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

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

import mediapipe as mp# 畫圖工具mp_drawing = mp.solutions.drawing_utils# 初始化人臉檢測(cè)模型mp_face_detection = mp.solutions.face_detectionmp_face_detector = mp_face_detection.FaceDetection(min_detection_confidence=0.4)results = mp_face_detector.process(imgRGB)if results.detections:  # 變臉檢測(cè)出的人臉  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算法不光能檢測(cè)人臉,還能識(shí)別出人臉6個(gè)關(guān)鍵點(diǎn)(眼睛、鼻子、耳朵、嘴)。

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

識(shí)別出人臉,我們?cè)僮鋈四樋记诰头浅:唵瘟?,把人?/span>Embedding成向量,計(jì)算向量的之間的距離即可。

文章來自
https://www.cnblogs.com/duma/p/16487643.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多