CMAKE, Boost, Boost Python, G ++ et plus sont nécessaires avant d'installer dlib
Présentation d'OpenCV et de dlib sur Ubuntu
Recherche sélective à l'aide de dlib
Mettez OpenCV / scikit-image dans l'entrée / sortie du fichier image Cette fois, j'utilise OpenCV
Vous pouvez obtenir un score facial avec dlib On a l'impression qu'il détectera même s'il est légèrement incliné, donc même si vous le détectez en le faisant tourner, l'angle de rotation peut être d'environ 45 degrés chacun. J'ai essayé le dépistage avec un score un peu faible (valeur CUT_OFF) et j'ai pensé qu'il serait possible d'ajuster l'angle pour que le score soit élevé tout en faisant pivoter la zone rétrécie, mais cela prend trop de temps Le type qui apparaît dans le résultat de la détection semble correspondre au type de détecteur (que le visage soit de face ou de côté?) Lorsque vous commentez, 68 points caractéristiques sont extraits du visage détecté Si vous savez quels points correspondent aux yeux, au nez et au contour, vous pouvez l'améliorer un peu plus.
detect_face.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os, sys, imghdr, shutil, dlib, cv2
CWD = os.getcwd()
DIR_ORIGIN = CWD + '/images/'
DIR_DESTINATION = CWD + '/faces/'
CUT_OFF = -0.1
detector = dlib.get_frontal_face_detector()
# predictor = dlib.shape_predictor('./shape_predictor_68_face_landmarks.dat')
def getFaces(path_full):
results = []
image = cv2.imread(path_full)
height, width = image.shape[:2]
rects, scores, types = detector.run(image, 1, CUT_OFF)
for i, rect in enumerate(rects):
top, bottom, left, right = rect.top(), rect.bottom(), rect.left(), rect.right()
if min(top, height - bottom - 1, left, width - right - 1) < 0:
continue
results.append({
'image' : image[top : bottom, left : right],
'score' : scores[i],
'orientation' : types[i]
})
# shape = predictor(image, rect)
# for i in range(shape.num_parts):
# print(shape.part(i))
return results
count = 1
for path, subdirs, files in os.walk(DIR_ORIGIN):
for name in files:
path_full = os.path.join(path, name)
if imghdr.what(path_full) in ['jpeg']:
faces = getFaces(path_full)
for face in faces:
file_name = '{destination_dir}/{score}_{type}_{count}_dlib.jpg'.format(
destination_dir = DIR_DESTINATION,
score = face['score'],
type = int(face['orientation']),
count = count
)
cv2.imwrite(file_name, face['image'], [cv2.IMWRITE_JPEG_QUALITY, 100])
count += 1
print(path_full)
Programme de détection de visage qui relie OpenCV et dlib
Bibliothèque d'apprentissage automatique dlib
OpenFace 0.2.0: Higher accuracy and halved execution time
Résumé des résultats de la détection des visages avec OpenCV, Dlib et OpenFace
Recommended Posts