dlib 人脸检测原理

找了半天终于找到一篇blog里面说了dlib内部使用的算法
https://talengu.github.io/public/2018/11/12/cv/FaceDetectionComparison/
发现其实是把dlib的examples说了一下

dlib github部分源码
https://github.com/davisking/dlib-models

dlib官方文档
http://dlib.net/python/index.html#dlib.mmod_rectangles

dlib的HOG人脸检测检测不出来下面这张图
在这里插入图片描述

换成CNN方法就可以检测出来了

import dlib
import cv2

PREDICTOR_PATH = r'shape_predictor_5_face_landmarks.dat'
DETECTOR_PATH = r'mmod_human_face_detector.dat'

detector = dlib.cnn_face_detection_model_v1(DETECTOR_PATH)
predictor = dlib.shape_predictor(PREDICTOR_PATH)
output_path = "OUTPUT"

def get_landmarks(im, fname):
    #gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    print('start detecting')
    dets = detector(im, 1)
    #print(rects)
    if len(dets) == 0:
        print('no face')
        return
    print(dets[0].rect.left(), dets[0].rect.top(), dets[0].rect.right(), dets[0].rect.bottom())
    cv2.rectangle(im, (dets[0].rect.left(), dets[0].rect.top()), (dets[0].rect.right(), dets[0].rect.bottom()), (0,255,0), 2)
    
    print('start predicting')
    rects = dlib.rectangles()
    rects.extend([d.rect for d in dets])
    res = predictor(im, rects[0]).parts()
    print('end predicting')
    for re in res:
        cv2.circle(im, (re.x, re.y), 10, (0,0, 255), -1)
    
    print(os.path.join(output_path, fname))
    cv2.imwrite(os.path.join(output_path, fname), im)

im = cv2.imread('jinsha.jpg')
get_landmarks(im, 'jinsha.jpg')

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值