C'est un peu gênant, alors reportez-vous à ce qui suit
Install OpenCV 3.0 and Python 2.7+ on Ubuntu
Install OpenCV 3.0 and Python 2.7+ on OSX
Utilisation d'OpenCV et de python sur Mac
Installer l'environnement Python
L'emplacement du classificateur est modifié en fonction de l'environnement
which python
Et
which python3
Quand j'ai recherché l'emplacement de python, j'ai pensé que s'il était installé, il pourrait être à proximité.
detect_face.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import cv2, os, sys, imghdr, shutil
CLASSIFIERS = (
'haarcascade_frontalcatface_extended.xml',
'haarcascade_frontalcatface.xml',
'haarcascade_frontalface_alt_tree.xml',
'haarcascade_frontalface_alt.xml',
'haarcascade_frontalface_alt2.xml',
'haarcascade_frontalface_default.xml',
)
PATH_CLASSIFIER = '{python_dir}/{classifier_dir}/{classifier}'.format(
python_dir = os.path.split(sys.executable)[0],
classifier_dir = '../share/OpenCV/haarcascades',
classifier = CLASSIFIERS[4]
)
CWD = os.getcwd()
DIR_ORIGIN = CWD + '/images/'
DIR_DONE = CWD + '/done/'
DIR_NONE = CWD + '/none/'
DIR_DESTINATION = CWD + '/faces/'
classifier = cv2.CascadeClassifier(PATH_CLASSIFIER)
def mkdir(path):
dirs = path.split('/')
current = ''
for d in dirs:
current += d + '/'
if not os.path.exists(current):
os.mkdir(current)
def moveFile(origin_path, dest_dir):
mkdir(dest_dir)
shutil.move(origin_path, dest_dir)
def getFaces(path_full):
image = cv2.imread(path_full)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = classifier.detectMultiScale(gray)
path, name = os.path.split(path_full)
path_destination = path.replace(DIR_ORIGIN, DIR_DESTINATION)
dir_done = path.replace(DIR_ORIGIN, DIR_DONE)
dir_none = path.replace(DIR_ORIGIN, DIR_NONE)
base_name = os.path.join(path_destination, name[:name.rfind('.')])
count = len(faces)
for i in range(count):
x, y , w, h = faces[i]
crop = image[y : y + h, x : x + w]
file_name = base_name
file_name += ('_' + str(i + 1)) if count > 1 else ''
file_name += '.jpg'
mkdir(path_destination)
cv2.imwrite(file_name, crop, [cv2.IMWRITE_JPEG_QUALITY, 100])
if count:
moveFile(path_full, dir_done)
else:
moveFile(path_full, dir_none)
return count
def isEmpty(dir_):
return True if not os.listdir(dir_) else False
count = 0
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']:
count = getFaces(path_full)
if count:
if isEmpty(path):
os.rmdir(path)
count = 0
Recommended Posts