OpenCV:使用dlib进行人脸检测 您所在的位置:网站首页 人脸3d模型下载 OpenCV:使用dlib进行人脸检测

OpenCV:使用dlib进行人脸检测

2023-07-03 13:16| 来源: 网络整理| 查看: 265

人脸检测

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

问题描述

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

Dlib

DLIB是包含机器学习算法和工具,一个现代化的C ++工具包。它在工业界和学术界使用非常广泛,包括机器人,嵌入式设备,移动电话,和高性能的计算环境。 DLIB有开源许可,因此可以在任何应用程序中免费使用。 详细介绍: dlib.net/python/inde… 实现的功能有很多: 在这里插入图片描述 使用起来也是比较简单的,首先进行安装:

pip install dlib pip install opencv-python

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

import cv2 import sys import dlib detector = dlib.get_frontal_face_detector() # init detector img_file = sys.argv[1] img = cv2.imread(img_file) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # convert to gray img to speed faces = detector(img_gray, 1) # detect input img, para 1 means 1 times upsamle for 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) python test.py image1

单人情况下,image1: !在这里插入图片描述 结果:

[(161, 247) (546, 632)] 161 546 632 247

在这里插入图片描述 多人情况下,img2: 在这里插入图片描述 结果: 在这里插入图片描述

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

#!/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 numpy import sys import 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,表示进行两次上采样。

参考 人脸检测算法综述 人脸检测背景介绍和发展现状 dlib github


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有