分别应用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的准确率更高.

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python人脸识别是一种应用广泛的技术,可以用于各种领域,如安全监控、人脸识别门禁、人脸识别支付等。本文将介绍如何使用OpenCVdlib进行Python人脸识别。 1. 安装OpenCVdlib 在终端中输入以下命令安装OpenCVdlib: ``` pip install opencv-python pip install dlib ``` 2. 导入Python代码中导入OpenCVdlib: ```python import cv2 import dlib ``` 3. 加载人脸检测器 使用dlib中的人脸检测器,加载预训练模型: ```python detector = dlib.get_frontal_face_detector() ``` 4. 加载人脸识别模型 使用dlib中的人脸识别模型,加载预训练模型: ```python predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat") ``` 5. 加载测试图片 使用OpenCV加载测试图片: ```python img = cv2.imread("test.jpg") ``` 6. 人脸检测 使用人脸检测器检测图片中的人脸: ```python dets = detector(img, 1) ``` 7. 人脸识别 对于每个检测到的人脸,使用人脸识别模型提取特征并进行比对: ```python for i, d in enumerate(dets): shape = predictor(img, d) face_descriptor = facerec.compute_face_descriptor(img, shape) # 进行比对 ``` 8. 显示结果 使用OpenCV显示结果: ```python cv2.imshow("result", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 完整代码: ```python import cv2 import dlib # 加载人脸检测器 detector = dlib.get_frontal_face_detector() # 加载人脸识别模型 predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat") # 加载测试图片 img = cv2.imread("test.jpg") # 人脸检测 dets = detector(img, 1) # 人脸识别 for i, d in enumerate(dets): shape = predictor(img, d) face_descriptor = facerec.compute_face_descriptor(img, shape) # 进行比对 # 显示结果 cv2.imshow("result", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 注意:本文只提供了Python人脸识别的基本流程,具体实现需要结合实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值