分別應用Opencv庫和Dlib庫進行人臉檢測的效果比較,附Python 完整代碼

一.應用opencv庫進行人臉檢測

import cv2#導入opencv庫

img=cv2.imread("/home/kd/PycharmProjects/python-pro/datasets/2.jpeg")


# 1、使用 opencv 檢測人臉
# 加載人臉檢測分類器,位於OpenCV的安裝目錄下
face_cascade=cv2.CascadeClassifier('/home/kd/anaconda3/envs/tensorflow/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
# 轉灰度圖
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 檢測人臉(可能有多張),返回人臉位置信息(x,y,w,h)
img_faces=face_cascade.detectMultiScale(img_gray)
length=len(img_faces)
print(len(img_faces))
print(img_faces)
for i in range(length):
    cv2.rectangle(img,(img_faces[i][0],img_faces[i][1]),(img_faces[i][0]+img_faces[i][2],img_faces[i][1]+img_faces[i][3]),(0,0,255))
cv2.imshow("pic",img)
cv2.waitKey(0)
face_cascade=cv2.CascadeClassifier("opencv的人臉檢測器的位置")

Opencv中自帶了人臉檢測其,基於Haar算法進行人臉檢測.Haar算法的基本思路是這樣的, 通過使用一些矩形模板對圖像進行掃描,例如下圖中的兩個矩形模板,中間一副在掃描到眼睛區域的顏色比周邊臉頰區域的顏色深,表示符合眼睛的特徵;右邊一副在掃描到鼻樑時發現鼻樑兩側比鼻樑的顏色要深,符合鼻樑的特徵.同樣地,在通過其他的矩形模板進行掃描,當發現具有眼睛,鼻樑,嘴巴等特徵超過一定的閾值時,則判定爲一張人臉.

二,應用Dlib進行人臉檢測

import sys
import os
import glob
import dlib
import numpy as np
import cv2
img=cv2.imread("/home/kd/PycharmProjects/python-pro/datasets/8.jpeg")
detector= dlib.get_frontal_face_detector()
#檢測出有幾張臉在圖片中
dets = detector(img, 1)
img_faces=[]
for i,face in enumerate(dets):
    x = dlib.rectangle.left(dets[i])
    y = dlib.rectangle.top(dets[i])
    h = dlib.rectangle.height(dets[i])
    w = dlib.rectangle.width(dets[i])
    img_faces.append([x, y, w, h])
    length = len(img_faces)
    for i in range(length):
        cv2.rectangle(img, (img_faces[i][0], img_faces[i][1]),
             (img_faces[i][0] + img_faces[i][2], img_faces[i][1] + img_faces[i][3]), (0, 0, 255))
cv2.waitKey(0)
detector = dlib.get_frontal_face_detector()
dets = detector(img, 1)

 上示代碼進行Dlib人臉檢測,detector返回的爲圖中臉的張數,可通過len(dets)得到.

for i,face in enumerate(dets):
    x = dlib.rectangle.left(dets[i])
    y = dlib.rectangle.top(dets[i])
    h = dlib.rectangle.height(dets[i])
    w = dlib.rectangle.width(dets[i])
    img_faces.append([x, y, w, h])
    length = len(img_faces)

 通過循環取得臉部矩形框的(x,y,w,h)

三.結果比較

通過實驗同一張圖片,Dlib的準確率更高.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章