一次性筷子网站建设,网站设计方案公司,php做简单网站 多久,html5网站怎么做用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 整篇内容都已上传至我的csdn资源中#xff0c;想用的请移步。
流程 多任务级联卷积神经网络(Multi-task Cascaded Convolutional Networks, MTCNN)算法进行人脸检测
普通人脸检测
单人人脸检测 图1 单人人… 用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 整篇内容都已上传至我的csdn资源中想用的请移步。
流程 多任务级联卷积神经网络(Multi-task Cascaded Convolutional Networks, MTCNN)算法进行人脸检测
普通人脸检测
单人人脸检测 图1 单人人脸检测 分析可以看出在单人人脸检测时MTCNN方法很好的画出了人脸的检测框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点实现效果很好。
双人人脸检测 图2 双人人脸检测 分析可以看出在双人人脸检测时MTCNN方法很好的画出了人脸的检测框以及不管是张嘴还是闭嘴都很准确的检测出了眼睛、笔尖、嘴角的一共五个点实现效果很好。
多人人脸检测 图3 多人人脸检测 分析可以看出在多人人脸检测时MTCNN方法依然能很好的画出了人脸的检测框以及准确的检测出了眼睛、笔尖、嘴角的一共五个点实现效果很好。
特殊情况的人脸检测
侧拍 图4 侧拍角度人脸检测 分析可以看出在即使在侧拍角度五官的位置相较于普通情况很不一样MTCNN方法还是可以很好的画出了人脸的检测框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点实现效果很好。 在侧拍照片中由于人脸的姿态发生了变化传统的基于Haar或者HOG特征的人脸检测算法可能无法准确地检测出人脸区域而MTCNN可以通过多尺度的滑动窗口搜索技术在不同尺度下对人脸进行全局检测。同时MTCNN中的关键点回归模块可以通过学习人脸形态学信息准确地预测出人脸的五个关键点位置即左眼、右眼、鼻子、左嘴角和右嘴角。 因此即使是在侧拍照片中MTCNN也可以通过深度神经网络的强大表征能力和多任务学习的方法实现对人脸区域的准确检测和关键点的精确定位。
有遮挡 图5 有遮挡人脸检测 分析可以看出在即使在眼睛戴墨镜有遮挡的情况下MTCNN方法还是可以很好的画出了人脸的检测框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点实现效果很好。 可能原因是虽然戴着眼镜的人脸与不戴眼镜的人脸在外观上存在差异但是这些关键点位置通常是比较稳定的并且MTCNN在训练过程中已经学习到了戴眼镜人脸的特征所以在实际应用中MTCNN可以很好地检测带眼镜的人脸关键点。
类人生物 图6 复杂情况人脸检测 分析可以看出在即使在有闭眼、出现猪鼻子的情况下MTCNN方法还是可以很好的画出了人脸的框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点实现效果很好。 可能原因虽然猪鼻子和人的鼻子的人脸以及睁眼和闭眼在外观上存在差异但是这些关键点位置通常是比较稳定的并且MTCNN在训练过程中已经学习到了戴眼镜人脸的特征所以在实际应用中MTCNN可以很好地检测带眼镜的人脸关键点。
人脸对齐问题 图7 人脸检测对齐结果 分析以上是两组人脸对齐的实验结果可以看出通过将检测到的人脸关键点与参考关键点进行比较的方法可以很好的进行人脸对齐。 图8 人脸检测对齐异常结果 分析以上是一组人脸对齐的实验结果可以看出通过将检测到的人脸关键点与参考关键点进行比较的方法可以很好的进行人脸对齐只是对齐结果的图片顶部出现不明黑色区域。出现原因是人脸对齐的框的大小是实现给定的固定值当人脸对齐的结果在边缘这里在顶部且小于给定值时会用黑色填充空白区域。
更多面部特征点提取问题 图9 dlip更多面部特征点提取结果 分析以上是dlip更多面部特征点提取结果左边是单人的面部特征点提取结果右边是多人的面部特征点提取结果。可以看出与MTCNN相比DLIP确实可以检测更多的面部特征点而且实现效果好。
代码
主函数
import cv2
from mtcnn import MTCNNdetector MTCNN()image cv2.cvtColor(cv2.imread(12.jpg), cv2.COLOR_BGR2RGB)
result detector.detect_faces(image)# Result is an array with all the bounding boxes detected. We know that for ivan.jpg there is only one.
for person in result:bounding_box person[box]keypoints person[keypoints]cv2.rectangle(image,(bounding_box[0], bounding_box[1]),(bounding_box[0]bounding_box[2], bounding_box[1] bounding_box[3]),(0,155,255),2)cv2.circle(image,(keypoints[left_eye]), 2, (0,155,255), 2)cv2.circle(image,(keypoints[right_eye]), 2, (0,155,255), 2)cv2.circle(image,(keypoints[nose]), 2, (0,155,255), 2)cv2.circle(image,(keypoints[mouth_left]), 2, (0,155,255), 2)cv2.circle(image,(keypoints[mouth_right]), 2, (0,155,255), 2)cv2.imwrite(12_draw.jpg, cv2.cvtColor(image, cv2.COLOR_RGB2BGR))print(result)
人脸对齐
import cv2
import numpy as np
from mtcnn import MTCNN# Define the reference landmarks that the face will be aligned to
ref_landmarks np.array([[30.2946, 51.6963],[65.5318, 51.5014],[48.0252, 71.7366],[33.5493, 92.3655],[62.7299, 92.2041]
], dtypenp.float32)def align_face(img, landmarks):# Convert landmarks to a NumPy arraylandmarks np.array([list(landmarks.values())], dtypenp.float32)# Calculate the transformation matrix using the reference and detected landmarksM, _ cv2.estimateAffinePartial2D(landmarks, ref_landmarks)# Apply the transformation matrix to the imagealigned_img cv2.warpAffine(img, M, (96, 112), flagscv2.INTER_CUBIC)return aligned_img# Load the input image
img cv2.imread(3.jpg)# Initialize MTCNN
detector MTCNN()# Detect faces using MTCNN
faces detector.detect_faces(img)# For each detected face, align the face and save the result
for face in faces:landmarks face[keypoints]aligned_face align_face(img, landmarks)cv2.imwrite(3_aligned_face.jpg, aligned_face)
更多面部特征点提取问题
import cv2
import dlib
# 读取图片
img_path 1.jpg
img cv2.imread(img_path)
# 转换为灰阶图片
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 正向人脸检测器
detector dlib.get_frontal_face_detector()
# 使用训练完成的68个特征点模型
predictor_path shape_predictor_68_face_landmarks.dat
predictor dlib.shape_predictor(predictor_path)
# 使用检测器来检测图像中的人脸
faces detector(gray, 1)
for i, face in enumerate(faces):# 获取人脸特征点shape predictor(img, face)# 遍历所有点for pt in shape.parts():# 绘制特征点pt_pos (pt.x, pt.y)cv2.circle(img, pt_pos, 1, (255,0, 0), 2)
cv2.imshow(opencv_face_laowang,img) # 显示图片
cv2.waitKey(0) # 等待用户关闭图片窗口
cv2.destroyAllWindows()# 关闭窗口
编写不易求个点赞
“你是谁”“一个看帖子的人。”“看帖子不点赞啊”“你点赞吗”“当然点了。”“我也会点。”“谁会把经验写在帖子里。”“写在帖子里的那能叫经验贴”“上流”
cheer