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.
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:
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
Multiplayer case, img2:
Results:
About get_frontal_face_detector
using 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.