前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >opencv:使用dlib进行人脸检测

opencv:使用dlib进行人脸检测

作者头像
用户3578099
发布2019-12-19 14:21:00
1.2K0
发布2019-12-19 14:21:00
举报
文章被收录于专栏:AI科技时讯AI科技时讯

人脸检测

随着人脸识别,人脸支付,换脸等业务等爆发,多的人都将目光放在人脸方面的研究上。可以说,人脸检测是目前所有目标检测子方向中被研究的最充分的问题之一,它在安防监控,人机交互,金融支付,社交和娱乐等方面有很强的应用价值,也是整个人脸识别算法的第一步。

问题描述

人脸检测的目标就是从图像中找到所有的人脸对应的位置,算法结果输出的是人脸在图像中所处的坐标。有些算法还会有其它的一些信息,比如性别,年龄,面部情绪等。详细的发展过程网上有很多的参考资料,这里不作过多的介绍。

Dlib

DLIB是包含机器学习算法和工具,一个现代化的C ++工具包。它在工业界和学术界使用非常广泛,包括机器人,嵌入式设备,移动电话,和高性能的计算环境。DLIB有开源许可,因此可以在任何应用程序中免费使用。 详细介绍:http://dlib.net/python/index.html 实现的功能有很多:

使用起来也是比较简单的,首先进行安装:

代码语言:javascript
复制
pip install dlib
pip install opencv-python

关于人脸检测这块的函数是get_frontal_face_detector 写一个测试脚本:

代码语言:javascript
复制
import cv2import sysimport dlib

detector = dlib.get_frontal_face_detector()  # init detectorimg_file = sys.argv[1]
img = cv2.imread(img_file)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # convert to gray img to speedfaces = detector(img_gray, 1)  # detect input img, para 1 means 1 times upsamlefor face in faces:  # may be many faces in one image
    print(face)
    y1 = face.bottom()  # detect box bottom y value
    y2 = face.top()  # top y value
    x1 = face.left()  # left x value
    x2 = face.right()  # right x value
    print(x1, x2, y1, y2)    # add detect box in image
    cv2.rectangle(img,(int(x1),int(y1)),(int(x2),int(y2)),(0,255,0),3)
    
cv2.imshow('new.jpg', img)
cv2.waitKey(0)
代码语言:javascript
复制
python test.py image1

单人情况下,image1:

在这里插入图片描述 结果:

代码语言:javascript
复制
[(161, 247) (546, 632)]161 546 632 247

多人情况下,img2:

结果:

关于get_frontal_face_detector的使用参数可以看下官方例子:

代码语言:javascript
复制
#!/usr/bin/python# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt##   This example program shows how to find frontal human faces in an image.  In#   particular, it shows how you can take a list of images from the command#   line and display each on the screen with red boxes overlaid on each human#   face.##   The examples/faces folder contains some jpg images of people.  You can run#   this program on them and see the detections by executing the#   following command:#       ./face_detector.py ../examples/faces/*.jpg##   This face detector is made using the now classic Histogram of Oriented#   Gradients (HOG) feature combined with a linear classifier, an image#   pyramid, and sliding window detection scheme.  This type of object detector#   is fairly general and capable of detecting many types of semi-rigid objects#   in addition to human faces.  Therefore, if you are interested in making#   your own object detectors then read the train_object_detector.py example#   program.  ### COMPILING/INSTALLING THE DLIB PYTHON INTERFACE#   You can install dlib using the command:#       pip install dlib##   Alternatively, if you want to compile dlib yourself then go into the dlib#   root folder and run:#       python setup.py install##   Compiling dlib should work on any operating system so long as you have#   CMake installed.  On Ubuntu, this can be done easily by running the#   command:#       sudo apt-get install cmake##   Also note that this example requires Numpy which can be installed#   via the command:#       pip install numpyimport sysimport dlib

detector = dlib.get_frontal_face_detector()
win = dlib.image_window()for f in sys.argv[1:]:
    print("Processing file: {}".format(f))
    img = dlib.load_rgb_image(f)    # The 1 in the second argument indicates that we should upsample the image
    # 1 time.  This will make everything bigger and allow us to detect more
    # faces.
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))    for i, d in enumerate(dets):
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
            i, d.left(), d.top(), d.right(), d.bottom()))

    win.clear_overlay()
    win.set_image(img)
    win.add_overlay(dets)
    dlib.hit_enter_to_continue()# Finally, if you really want to you can ask the detector to tell you the score# for each detection.  The score is bigger for more confident detections.# The third argument to run is an optional adjustment to the detection threshold,# where a negative value will return more detections and a positive value fewer.# Also, the idx tells you which of the face sub-detectors matched.  This can be# used to broadly identify faces in different orientations.if (len(sys.argv[1:]) > 0):
    img = dlib.load_rgb_image(sys.argv[1])
    dets, scores, idx = detector.run(img, 1, -1)    for i, d in enumerate(dets):
        print("Detection {}, score: {}, face_type:{}".format(
            d, scores[i], idx[i]))

重点说明第二个参数,设置为1表示一次上采样,对原图进行上采样放大,能够使得检测器检测出更多的人脸。也可以设置为其它值,比如2,表示进行两次上采样。

参考

  • 人脸检测算法综述: https://zhuanlan.zhihu.com/p/36621308?spm=a2c4e.100239.0.0.630f6fadaf5Dje
  • 人脸检测背景介绍和发展现状 : https://zhuanlan.zhihu.com/p/32702868?spm=a2c4e.100239.0.0.630f6fadaf5Dje
  • dlib github: https://github.com/davisking/dlib?spm=a2c4e.100239.0.0.630f6fadaf5Dje
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技时讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 人脸检测
    • 问题描述
      • Dlib
        • 参考
        相关产品与服务
        人脸识别
        腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档