Я ищу инструмент, который сделает групповое фото (с высоким разрешением), автоматически найдет все лица и извлечет их как отдельные снимки. Есть такой инструмент? Распознавание лиц довольно стандартно, но автоматическое извлечение их в виде отдельных файлов — это то, с чем я еще не сталкивался.
Я бы тоже не возражал, если бы инструмент был бесплатным/дешевым :)
Благодаря @StarGeek ( соответствующий пост на Reddit ) я смог написать для этого небольшой скрипт.
Чтобы настроить среду на Python 3 (на компьютере с Windows 10 с использованием Anaconda), я выполнил следующие шаги:
pip install opencv-python
facedetect
facedetect
вfacedetect.py
facedetect.py
отредактируйте строкуDATA_DIR = '/usr/share/opencv/'
на правильный путь. На моей Windows 10 это было:
DATA_DIR = 'C:/Anaconda3/Lib/site-packages/cv2/data/'
; если у вас установлен Python только для текущего пользователя, это может выглядеть примерно так
DATA_DIR = '%LOCALAPPDATA%/Programs/Python/Python37/Lib/site-packages/cv2/data/'
'HAAR_FRONTALFACE_ALT2': 'haarcascades/haarcascade_frontalface_alt2.xml'
к
'HAAR_FRONTALFACE_ALT2': 'haarcascade_frontalface_alt2.xml',
facedetect.py
import cv2
import facedetect
import glob
import os
facedetect.load_cascades(facedetect.DATA_DIR)
for file in glob.glob("*.jpg"):
original = cv2.imread(file)
im, faces = facedetect.face_detect_file(file)
if len(faces):
directory = os.path.splitext(os.path.split(file)[1])[0]
os.mkdir(directory)
for i, (x,y,w,h) in enumerate(faces):
face = original[y:y+h, x:x+w]
cv2.imwrite(os.path.join(directory, "{0:03}.jpg".format(i)), face)
Например, на этом изображении (Хейден Шифф (IagoQnsi, Wikimedia Commons ))
скрипт выдает следующий вывод:
Альберт
Тим Питцкер
СтарГик
Тим Питцкер
СтарГик
Тим Питцкер
pip install opencv-python
работала нормально.