人臉檢測

寫在前面

  • 態(tài)度決定高度!讓優(yōu)秀成為一種習(xí)慣!
  • 世界上沒有什么事兒是加一次班解決不了的,如果有,就加兩次?。? - -茂強(qiáng))

人臉識(shí)別一般步驟

  • 人臉檢測
  • 人臉特征提取
  • 人臉識(shí)別
    本文主要介紹人臉檢測

人臉檢測

人臉檢測就是從一張圖片中檢測出人臉的過程
這里主要看兩種檢測方式,一種是dlib一種是 mtcnn
文本對于其原理不再贅述,想了解原理的可以參考原論文,如果有時(shí)間,后邊會(huì)專門介紹原理

dlib

dlib是c++開發(fā)開源的的機(jī)器學(xué)習(xí)庫
廢話不多說,直接看下效果


face_detect
import dlib
import cv2
# 初始化dlib人臉檢測器
detector = dlib.get_frontal_face_detector()
#2.使用官方提供的模型構(gòu)建特征提取器
predictor = dlib.shape_predictor("/Users/songyaheng/Downloads/shape_predictor_68_face_landmarks.dat")
img = cv2.imread("/Users/songyaheng/Downloads/faces.JPG")
faces = detector(img,1)
for k,d in enumerate(faces):
    cv2.rectangle(img,(d.left(),d.top()),(d.right(),d.bottom()),(0,255,0),3)
cv2.imshow("capture", img)
cv2.imwrite("/Users/songyaheng/Downloads/faces2.JPG", img)
cv2.waitKey(0)

mtcnn

face_detect
import tensorflow as tf
import align.detect_face as detect_face
import cv2
gpu_memory_fraction=0.0
with tf.Graph().as_default():
    gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=gpu_memory_fraction)
    sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options, log_device_placement=False))
    with sess.as_default():
        pnet, rnet, onet = detect_face.create_mtcnn(sess, None)
#face detection parameters
minsize = 20 # minimum size of face
threshold = [ 0.6, 0.7, 0.7 ]  # three steps's threshold
factor = 0.709 # scale factor
img = cv2.imread("/Users/songyaheng/Downloads/faces.JPG")
bounding_boxes, _ = detect_face.detect_face(img, minsize, pnet, rnet, onet, threshold, factor)
for face_position in bounding_boxes:
    face_position=face_position.astype(int)
    cv2.rectangle(img, (face_position[0],
                          face_position[1]),
                  (face_position[2], face_position[3]),
                  (0, 255, 0), 2)
cv2.imwrite("/Users/songyaheng/Downloads/faces3.JPG", img)
cv2.waitKey(0)

另一組對比

原圖(圖片來自百度圖片)

這次我們從明暗程度對比


檢測對比

利用mtcnn是一個(gè)都沒能識(shí)別出來,所以對于一些背光的照片來說,還是利用dlib相對來說比較好一點(diǎn)
那么問題來了,在人臉識(shí)別中,不同明暗程度的人臉即使是一個(gè)人,所提取的人臉特征向量也是相差很大的,所以要想提高人臉識(shí)別的精準(zhǔn)度,對于人臉圖片的曝光度歸一化還是相當(dāng)重要的,我們?nèi)绾螝w一化這種背光度較高的臉呢?
我們可以先通過dlib把人臉提取出來,然后通過算法改變這個(gè)圖片的像素值,然后把人臉變亮,這樣我們就可以拿到歸一化的人臉了,所以難點(diǎn)就放在了我們?nèi)绾伟巡煌毓舛鹊娜四槡w一化到相對統(tǒng)一的人臉曝光度上呢?如下圖


轉(zhuǎn)換人臉亮度值

比較暗的就是上邊dlib提取的三個(gè)原始圖片的,
我們在看一組圖
對比圖

從該圖上可以看出,該算法能夠?qū)⒈容^暗的圖變得亮一點(diǎn),比較亮的圖變得暗一點(diǎn)。也就是又一個(gè)相對統(tǒng)一的亮度值
我們最終提取出來的人臉應(yīng)該是這樣的:


提取的人臉

提取的人臉

這些提取的人臉都基本擁有相對統(tǒng)一的曝光度,而且更接近于人的皮膚顏色。

算法

首先我們提取人臉區(qū)域,提取后的人臉我們首先計(jì)算平均的亮度值,然后基于人體膚色的RGB和平均的RGB值,我們采用一種歸一化方式,這種歸一化方式可以把輸入的人臉RGB值相對歸一化到該膚色RGB值上,其實(shí)就是一種映射關(guān)系

比較簡單的就是
映射公式

其中S(x)就是原始圖像空間,T(x)就是人體膚色空間

本文采用的就是該方法進(jìn)行映射計(jì)算的

到此我們的人臉檢測部分已經(jīng)基本結(jié)束
下期我們將介紹基于以上提取出來的人臉進(jìn)行特征提取,歡迎關(guān)注。

如果對人臉識(shí)別,圖像處理等方面有興趣,歡迎一塊學(xué)習(xí)
QQ:458798698
微信號(hào):songwindwind

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容