Pytorch检测人脸和基础版opencv检测人脸对比
import cv2 as cv
import mediapipe as mp
import numpy as np
from tqdm import tqdm
import time
import matplotlib.pyplot as plt
# 定义可视化图像函数
def look_img(img):
img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)
plt.imshow(img_RGB)
plt.show()
# 导入三维人脸关键点检测模型
mp_face_mesh=mp.solutions.face_mesh
# help(mp_face_mesh.FaceMesh)
model=mp_face_mesh.FaceMesh(
static_image_mode=True,#TRUE:静态图片/False:摄像头实时读取
# refine_landmarks=True,#使用Attention Mesh模型
max_num_faces=40,
min_detection_confidence=0.2, #置信度阈值,越接近1越准
min_tracking_confidence=0.5,#追踪阈值
)
# 导入可视化函数和可视化样式
mp_drawing=mp.solutions.drawing_utils
# mp_drawing_styles=mp.solutions.drawing_styles
draw_spec=mp_drawing.DrawingSpec(thickness=2,circle_radius=1,color=[223,155,6])
# 读取图像
img=cv.imread('../face import detection/img.png')
# width=img1.shape[1]
# height=img1.shape[0]
# img=cv.resize(img1,(width*10,height*10))
# look_img(img)
# 将图像模型输入,获取预测结果
# BGR转RGB
img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)
# 将RGB图像输入模型,获取预测结果
results=model.process(img_RGB)
# # 预测人人脸个数
# len(results.multi_face_landmarks)
#
# print(len(results.multi_face_landmarks))
if results.multi_face_landmarks:
for face_landmarks in results.multi_face_landmarks:
mp_drawing.draw_landmarks(
image=img,
landmark_list=face_landmarks,
connections=mp_face_mesh.FACEMESH_CONTOURS,
landmark_drawing_spec=draw_spec,
connection_drawing_spec=draw_spec
)
else:
print('未检测出人脸')
look_img(img)
mp_drawing.plot_landmarks(results.multi_face_landmarks[0],mp_face_mesh.FACEMESH_TESSELATION)
mp_drawing.plot_landmarks(results.multi_face_landmarks[1],mp_face_mesh.FACEMESH_CONTOURS)
mp_drawing.plot_landmarks(results.multi_face_landmarks[1],mp_face_mesh.FACEMESH_IRISES)
import cv2 as cv
def fac_detect_demo():
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# pathf = 'C:\\Users\\余佳琪\\Downloads\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml'
# face_detector.load('haarcascade_frontalface_default.xml')
face_detector = cv.CascadeClassifier('D:\\Anaconda\\bin\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml')
# face_detector.load('D:\\Anaconda\\bin\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml')
faces = face_detector.detectMultiScale(gray, 1.1, 5, 0, (100,100))
# 第一个是放入图像 第二个遍历之后缩放的倍数 3 检测几次 4 填0 5minsize maxsize最大最小人脸范围
for x,y,w,h in faces:
cv.rectangle(img, (x, y), (x+w, y+h), color=(0, 255, 0), thickness=2)
cv.imshow('img', cv.resize(img, dsize=(1000, 1000)))
img = cv.imread('1.jpg')
fac_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()
(这张图是学校的领导,并没有冒犯的意思......)