Ich habe den Code geändert, der das Gesicht im Bild erkennt und in einen quadratischen Rahmen einschließt, und einen Code erstellt, der als Datei ausgeschnitten wird.
Importieren Sie Bibliotheken wie OpenCV und Pillow.
import os
import subprocess
from PIL import Image
import cv2 as cv
dir0 = 'org'
dir1 = 'png'
dir2 = 'png_resize'
dir3 = 'face'
Legen Sie das Originalbild (JPG, Größe 500 x 334 Pixel) in den Organisationsordner. Konvertieren Sie dies in eine PNG-Datei, passen Sie die Größenbreite auf 600 Pixel an und speichern Sie sie im Ordner png_resize.
files0 = os.listdir(dir0)
files0.sort()
for file in files0:
if '.jpg' in file:
command = 'sips --setProperty format png ' + dir0 +'/' + file + ' --out ' + dir1 +'/' + file.replace('.jpg','.png')
subprocess.call(command, shell=True)
print(file)
files1 = os.listdir(dir1)
files1.sort()
# aaa.jpg
for file in files1:
if '.png' in file:
img0 = os.path.join(dir1, file)
img0_img = Image.open(img0)
h = img0_img.height
w = img0_img.width
img1_img = img0_img.resize((600,round(600*h/w)))
img1 = os.path.join(dir2, file)
img1_img.save(img1)
print(file)
# aaa.png
files2 = os.listdir(dir2)
files2.sort()
Gesichtsklassifizierer sind unter [hier] verfügbar (https://github.com/opencv/opencv/blob/master/data/haarcascades/ "hier").
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
#face_cascade = cv.CascadeClassifier('haarcascade_profileface.xml')
Schneiden Sie das Gesichtsbild aus. Der Ausschnittbereich ist 10px breiter nach oben, unten, links und rechts als der Erfassungsbereich.
for file in files2:
if '.png' in file:
dirfile = os.path.join(dir2, file)
img = cv.imread(dirfile)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
face = img[y-10:y+h+10, x-10:x+w+10]
face_name = str(file.strip('.png'))+'_'+str(x)+'_'+str(y)+'.png'
dirface = os.path.join(dir3,face_name)
facefile = cv.imwrite(dirface, face)
#cv.rectangle(img,(x-10,y-10),(x+w+10,y+h+10),(255,0,0),2)
print(face_name)
# aaa_152_22.png
# aaa_11_70.png
# aaa_438_41.png
# aaa_79_106.png
# aaa_385_140.png
# aaa_190_175.png
# aaa_269_171.png
# aaa_76_206.png
# aaa_527_257.png
# aaa_91_277.png
# aaa_254_330.png
# aaa_446_348.png
Aus den obigen Bildern wurden insgesamt 12 Gesichtsbilder ausgeschnitten. Wenn Sie den größten Teil des Gesichts sehen können, wissen Sie, dass der Ausschnitt erfolgreich war.
Es scheint, dass es verwendet werden kann, wenn eine Liste mit einem Foto aus einem Gruppenfoto erstellt wird. Es wäre für jeden praktisch, den trainierten Klassifikator zu verwenden, wenn er als Kaskadendatei veröffentlicht würde.
https://docs.opencv.org/4.1.0/d7/d8b/tutorial_py_face_detection.html https://github.com/opencv/opencv/tree/master/data/haarcascades
Recommended Posts