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

5 years ago
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);