您好,登錄后才能下訂單哦!
這篇文章給大家介紹Python中怎么實(shí)現(xiàn)一個(gè)面部識(shí)別功能,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
使用Haar人臉特征分類器
用以下圖像為例:
來看看識(shí)別這張圖片中的人臉代碼:
import cv2 group_of_people_image = cv2.imread('images/image7.jpg') frontal_face_classifier = cv2.CascadeClassifier('classifier/haarcascade_frontalface_default.xml') image_in_gray_scale = cv2.cvtColor(group_of_people_image,cv2.COLOR_BGR2GRAY) faces = frontal_face_classifier.detectMultiScale(image=image_in_gray_scale,scaleFactor=1.3, minNeighbors=6) for (x_axis, y_axis, weight,height) in faces: cv2.rectangle(group_of_people_image,(x_axis, y_axis), (x_axis + weight, y_axis + height), (255, 0, 0), 2)
該算法將圖像轉(zhuǎn)換為灰度圖像,如前所述,這是分類器操作的一個(gè)基本步驟,然后我們使用dectedMultiScale函數(shù)搜索圖像中的人臉,并通過繪制矩形來顯示圖像的位置,當(dāng)定位人臉時(shí)結(jié)果如下:
我們能夠準(zhǔn)確地分析兩張出現(xiàn)的臉(采用矩形的方式將人臉框起來),有兩個(gè)人完全正面地露出他們的臉,人臉完全顯現(xiàn),所以我們可以清楚地看到他的臉;另一個(gè)人只露出了面部的一部分,所以我們沒有得到準(zhǔn)確的信息來確認(rèn)這是一張完整的人臉。
面部特征檢測(cè)
Dlib是一個(gè)擁有一些分類器的庫(kù),可以幫助我們檢測(cè)人臉的某些部分,例如:眼睛、眉毛、鼻子和洋娃娃的區(qū)域。以下圖為例:
現(xiàn)在,使用算法來識(shí)別圖像中的面部特征點(diǎn):
import cv2 import dlib import numpy as np initial_image = cv2.imread('images/image9.jpg') initial_image_in_rgb = cv2.cvtColor(initial_image,cv2.COLOR_BGR2RGB) reference_image = initial_image_in_rgb.copy() classifier_path = dlib.shape_predictor('classifier/shape_predictor_68_face_landmarks.dat') frontal_face_detector = dlib.get_frontal_face_detector() rectangles =frontal_face_detector(initial_image,1) for k, d inenumerate(rectangles): cv2.rectangle(reference_image,(d.left(), d.top()), (d.right(), d.bottom()), (255, 255, 0), 2) landmarks = [] for rectangle in rectangles: landmarks.append(np.matrix([[p.x, p.y] for p inclassifier_path(reference_image,rectangle).parts()])) for landmark in landmarks: for index, point inenumerate(landmark): point_center = (point[0, 0], point[0, 1]) cv2.circle(reference_image,point_center, 3, (255, 255, 0), -1) cv2.putText(reference_image,str(index), point_center, cv2.FONT_HERSHEY_COMPLEX, 3, (255, 255, 255), 2)
我們使用的是人臉68個(gè)特征分類器,它試圖更精確地理解點(diǎn)面,這給了我們更多的選擇去分析結(jié)果,其缺點(diǎn)是速度有點(diǎn)慢。所以必須劃定一個(gè)矩形來確定我們的臉可能在哪里,特征是我們可以識(shí)別的人臉特征,包括臉、嘴、眼睛、眉毛。
一旦用矩形的方式框出了臉,就可以使用功能部件將這些特征返回,最后將得到一些可視化的東西去生成一個(gè)帶有面部點(diǎn)的圖像。結(jié)果是:
這些點(diǎn)對(duì)于幫助識(shí)別表情很重要,例如我們可以識(shí)別出這個(gè)男孩睜著眼睛,閉著嘴巴。把這看作是一種情緒的表現(xiàn),可以說這個(gè)男孩很焦慮。當(dāng)一個(gè)人微笑時(shí),它可以幫助理解這種情緒可能表達(dá)的是幸福。
關(guān)于Python中怎么實(shí)現(xiàn)一個(gè)面部識(shí)別功能就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。