opencv: Use dlib face detection

Face Detection

With the recognition, face payments, and other services such as the outbreak of face transplant, and more people will be looking on the research aspects of the human face. It can be said, face detection is one of the most fully all the problems currently target detection sub-direction studied it in the security surveillance, human-computer interaction, financial payments, social and entertainment aspects of a strong value, but also the entire the first step in face recognition algorithm.

Problem Description

Face detection goal is to find all positions corresponding to the face from the image, the algorithm outputs the result of which is the human face in the image coordinates. Some algorithms will have some other information, such as gender, age, facial emotions. Details of the development of the Internet has a lot of references, here without too much introduction.
Here Insert Picture Description

Dlib

DLIB containing machine learning algorithms and tools, a modern C ++ toolkit. It is used in industry and academia is very extensive, including robotics, embedded devices, mobile phones, and high-performance computing environments. DLIB open-source license, and therefore free to use in any application.
Details: http://dlib.net/python/index.html
realize there are a lot of features:
Here Insert Picture Description
use is relatively simple, first installation:

pip install dlib
pip install opencv-python

About Face detection function of this is get_frontal_face_detector
to write a test script:

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

Under single case, image1:
!Here insert a picture describing
the results:

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

Here Insert Picture Description
Multiplayer case, img2:
Here Insert Picture Description
Results:
Here Insert Picture Description

About get_frontal_face_detectorusing parameters may look official examples:

#!/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]))

Highlighting the second parameter set to 1 once the sampling, the sampling of the original for amplification, so that the detector can be detected more human face. May also be set to other values, such as 2, it represents the sampled twice.

reference

Published 82 original articles · won praise 82 · views 240 000 +

Guess you like

Origin blog.csdn.net/uncle_ll/article/details/103507986