You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.5 KiB

import os, sys, random
import argparse
from datetime import date
from time import strftime
from pathlib import Path
import cv2
from PIL import Image, ImageDraw
parser = argparse.ArgumentParser(description='Process an image uploaded to the server.')
parser.add_argument('filename', action='store',
help='Filename of photo to process')
parser.add_argument('city', action='store',
help='City of the visitor')
parser.add_argument('school', action='store',
help='School of the visitor')
parser.add_argument('age', action='store',
help='Age of the visitor')
args = parser.parse_args()
image = cv2.imread(args.filename)
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier("./data/haarcascade_frontalface_default.xml")
faces = face_cascade.detectMultiScale(image_gray)
if (len(faces) != 1):
print(f"Error: {len(faces)} faces detected in the image.")
sys.exit(1)
im = Image.open(args.filename)
draw = ImageDraw.Draw(im)
randomFile = random.choice(os.listdir("./data/circles"))
circle = Image.open(f"./data/circles/{randomFile}")
for x, y, width, height in faces:
circle = circle.resize((width * 2, height * 2), Image.ANTIALIAS)
im.paste(circle, (x - width // 2, y - height // 2 ), circle)
date = date.today()
time = strftime("%H-%M-%S")
Path(f"./processed/{date}/").mkdir(parents=True,exist_ok=True)
im.save(f"./processed/{date}/{time}.jpg")
sys.exit(0);