Вырезайте лица по порядку, а не хаотичноPython

Программы на Python
Anonymous
Вырезайте лица по порядку, а не хаотично

Сообщение Anonymous »

Я создал код Python, который распознает и обрезает лица. Но проблема в том, что лица обрезаются случайным образом, а не в том порядке, как в исходном изображении, содержащем все лица.
Что требуется, пожалуйста: код обрезает лица по порядку сверху вниз до тех пор, пока он достигает последнего лица.
Поместите код в папку с именем (Входные изображения), содержащую изображение, содержащее собранные лица.
И создайте папку с именем Выходные изображения, в которой будут храниться обрезанные лица.
С помощью XML-файла распознавания лиц с текстом haarcascade_frontalface_default.xml
Код:< /p>

Код: Выделить всё

import os
import cv2
import numpy as np
import os, os.path
# Load the cascade classifier
#download this here https://raw.githubusercontent.com/opencv/opencv/4.x/data/haarcascades/haarcascade_frontalface_default.xml just go there and ctrl + s
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

#rename a file
#for dirname in os.listdir("."):
#    if os.path.isdir(dirname):
#        for i, filename in enumerate(os.listdir(dirname)):
#            os.rename(dirname + "/" + filename, dirname + "/" + str(i) + ".jpg")

# Read the input image
img = cv2.imread("Input Images/image.jpg")
#let's double the size of our image
img_double=cv2.resize(img,None,fx=1,fy=1,interpolation=cv2.INTER_CUBIC)
# let's do the resizing by exact dimensions
image_resize=cv2.resize(img,(600,700),interpolation=cv2.INTER_AREA)

# Convert into grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Detect faces
faces = face_cascade.detectMultiScale( gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(150, 150), )

# loop over all detected faces
if len(faces) > 0:
for i, (x,y,w,h) in enumerate(faces):

#face = img[y:y+h, x:x+w]
face = img[y-65:y+h+40,x-40:x+w+55]

# cv2.imshow(f"Cropped Face {i}", face)

cv2.imwrite("Output Images/" f'0{i}.jpg', face)
print(f"0{i}.jpg is saved")

# concatenate image Vertically
#Verti = np.concatenate((img, img), axis=0)

# Number of all detected faces
print("[INFO] Found {0} Faces.".format(len(faces)))

# display the image with detected faces
cv2.imshow('scaling_exact',image_resize)
cv2.waitKey(0)
cv2.destroyAllWindows()
Исходное изображение
иллюстративный пример
Что требуется, пожалуйста: чтобы код обрезал лица по порядку сверху вниз пока не достигнет последней грани.
пример
[Исходное изображение]
(https://i.sstatic.net/mdTMAMpD.jpg)

Подробнее здесь: https://stackoverflow.com/questions/789 ... t-randomly

Вернуться в «Python»