计算机视觉——OpenCV对象检测(人脸检测dlib,CascadeClassifier等)以及换脸小魔术

本文介绍了使用OpenCV进行人脸检测的方法,包括dlib和CascadeClassifier,并展示了如何利用dlib的68个关键点进行精细的人脸部位识别。文章还详细讲解了如何实现换脸效果,通过定义关键点、图像掩码等步骤,实现无缝衔接的换脸结果。
摘要由CSDN通过智能技术生成

人脸识别的前提肯定是先得找到图像中的人脸,再经过其它方法进行人脸的识别,这篇就来总结下如何进行人脸的检测。

本章代码以图片为例,如果想要实现视频人脸实时检测追踪,只需加入读入视频,然后检测帧图片即可。

本章代码有参考和引用,但是不记得原博了,原谅啦~~

(文中有帅哥!!!哈哈哈哈  我是个小花痴,鉴定完毕! )

1. dlib

如果你了解过一点点人脸检测,那dlib肯定就不陌生了。具体不介绍,只需要在环境中安装dlib(pip install dlib),这种安装一定不陌生啦~~

直接上运用代码:

# -*- coding: utf-8 -*-
import sys
import dlib
import cv2
 
faces_path = "./data/ma2.jpg"
 
detector = dlib.get_frontal_face_detector() #人脸分类器
 
predictor_path = "./data/shape_predictor_68_face_landmarks.dat" #别忘记下载这里导入的文件
predictor = dlib.shape_predictor(predictor_path)  #特征提取器
 
# opencv 读取图片,并显示
img = cv2.imread(faces_path, cv2.IMREAD_COLOR)
 
b, g, r = cv2.split(img)    # 分离三个颜色通道
img2 = cv2.merge([r, g, b])   # 融合三个颜色通道生成新图片
 
dets = detector(img, 1) #使用detector进行人脸检测 dets为返回的结果
print("Number of faces detected: {}".format(len(dets)))  
 
sp = img2.shape
height=sp[0]
width=sp[1]
 
for index, face in enumerate(dets):
    
    shape = predictor(img, face) #使用predictor进行人脸关键点识别
 
    miny=height
    maxy=0
    middleX=shape.part(30).x  #鼻子中心点
    for i in range(0,68):
        print("第%d个点: x=%d  y=%d\r\n"%(i,shape.part(i).x,shape.part(i).y))
        if shape.part(i).y<miny:
            miny=shape.part(i).y
        if shape.part(i).y>maxy:
            maxy=shape.part(i).y
 
 
    #计算人脸外框
    deltaY=maxy-miny;
    deltaY1=0.9*deltaY
    deltaY2=0.5*0.9*deltaY
 
    deltaX=(deltaY+deltaY1+deltaY2)*3/8
    left = int(middleX-deltaX)    
    right=int(middleX+deltaX)
    top=int(miny-deltaY1)+10
    bottom=int(maxy+deltaY2)+10
 
    # 在图片中标注人脸显示
    cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3)
    cv2.namedWindow(faces_path, cv2.WINDOW_AUTOSIZE)
    cv2.imshow(faces_path, img)
 

cv2.waitKey(0)
cv2.destroyAllWind
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值