Advertisement

AI展示框架(7):基于dlib实现人脸检测及关键点检测

阅读量:

dlib是一种广泛应用于人脸识别及人脸特征关键点提取的专业库。近期完成了将此库整合至展示框架的相关实验研究。

目前dlib通常可获取到68个关键点;此外还有5个关键点和81个关键点(其中包含额头部位)。从而开发了一个通用的小函数如下:

该函数可通过设定参数num_landmarks来获取不同数量的关键点。这些关键点包括68、5以及81等数值,并返回一个名为facebbox(人脸框)的对象。根据该脸框的数量可推断出人体的数量。最后将这些关键点绘制在图像中。

复制代码
  
    
 def DetectFacePoints(model_dir,data_dir,num_landmarks,filename,frame):    
    
     detector = dlib.get_frontal_face_detector()
    
     predictor = dlib.shape_predictor('%s/cv/face/dlib/shape_predictor_%d_face_landmarks.dat' % (model_dir,num_landmarks))
    
    
    
     dets = detector(frame, 1)
    
     facebbox = []
    
     # 对每个人脸进行处理
    
     for k, d in enumerate(dets):
    
     shape = predictor(frame, d)
    
     # 绘制人脸矩形框
    
     facebbox.append([d.left(), d.top(),d.right(), d.bottom()])
    
     cv2.rectangle(frame,(d.left(), d.top()), (d.right(), d.bottom()),(55,255,155),2)
    
     #landmarks = np.matrix([[p.x, p.y] for p in shape.parts()])
    
     #绘制人脸关键点
    
     for num in range(shape.num_parts):
    
         cv2.circle(frame, (shape.parts()[num].x, shape.parts()[num].y), 1, (255,255,255), -1)
    
     #cv2.imshow('frame', frame)
    
     cv2.imwrite(filename, frame)
    
     return facebbox
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/JNjYbpx8BuUGMVlrzZtE59TKgOsF.png)

实验结果:

(1) 68个关键点的情况

(2) 5个关键点的检测结果

(3) 81个关键点的检测结果。

不过从图上可以看出,dlib主要应用于人脸识别技术,并难以识别足够多的脸;尤其是那些位于远处的小尺寸人脸,则无法被识别出来。

附:上图只是百度上搜索获得检测的图片,只用于实验。

全部评论 (0)

还没有任何评论哟~