From 58d2f6f83c33fa15c2161f27d9ac3332b686ba02 Mon Sep 17 00:00:00 2001 From: Mateusz Tylka Date: Sun, 29 Jan 2023 15:17:39 +0100 Subject: [PATCH] find and crop face implementation --- UAM-Andrzej-Wójtowicz.jpg => UAM-Andre.jpg | Bin face0.jpg | Bin 30789 -> 0 bytes main.py | 10 ++- test.ipynb | 76 -------------------- 4 files changed, 7 insertions(+), 79 deletions(-) rename UAM-Andrzej-Wójtowicz.jpg => UAM-Andre.jpg (100%) delete mode 100644 face0.jpg delete mode 100644 test.ipynb diff --git a/UAM-Andrzej-Wójtowicz.jpg b/UAM-Andre.jpg similarity index 100% rename from UAM-Andrzej-Wójtowicz.jpg rename to UAM-Andre.jpg diff --git a/face0.jpg b/face0.jpg deleted file mode 100644 index 2083e077799efe4ea06a2fb9390b33b03ee7aa2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30789 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 ZE`(MS(dv1sO!-x+Gs7?)eei#a{{w$xpGN=y diff --git a/main.py b/main.py index 5664300..eac7a4c 100644 --- a/main.py +++ b/main.py @@ -8,13 +8,17 @@ import numpy as np from source.cartoonize import Cartoonizer - def load_source(filename: str) -> np.ndarray: return cv2.imread(filename)[...,::-1] def find_and_crop_face(data: np.ndarray) -> np.ndarray: - # TODO + data_gray = cv2.cvtColor(data, cv2.COLOR_BGR2GRAY) + face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml') + face = face_cascade.detectMultiScale(data_gray, 1.3, 4) + face = max(face, key=len) + (x, y, w, h) = face + face = data[y:y + h, x:x + w] return data @@ -23,7 +27,7 @@ def compare_with_anime_characters(data: np.ndarray) -> int: return 1 -def transfer_to_anime(ima: np.ndarray): +def transfer_to_anime(img: np.ndarray): algo = Cartoonizer(dataroot='damo/cv_unet_person-image-cartoon_compound-models') return algo.cartoonize(img) diff --git a/test.ipynb b/test.ipynb deleted file mode 100644 index 3de8c6b..0000000 --- a/test.ipynb +++ /dev/null @@ -1,76 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of detected faces: 1\n", - "face0.jpg is saved\n" - ] - } - ], - "source": [ - "# import required libraries\n", - "import cv2\n", - "\n", - "# read the input image\n", - "img = cv2.imread('data/UAM-Andrzej-Wójtowicz.jpg')\n", - "\n", - "# convert to grayscale of each frames\n", - "gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n", - "\n", - "# read the haarcascade to detect the faces in an image\n", - "face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')\n", - "\n", - "# detects faces in the input image\n", - "faces = face_cascade.detectMultiScale(gray, 1.3, 4)\n", - "print('Number of detected faces:', len(faces))\n", - "\n", - "# loop over all detected faces\n", - "if len(faces) > 0:\n", - " for i, (x, y, w, h) in enumerate(faces):\n", - " # To draw a rectangle in a face\n", - " cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 2)\n", - " face = img[y:y + h, x:x + w]\n", - " cv2.imshow(\"Cropped Face\", face)\n", - " cv2.imwrite(f'face{i}.jpg', face)\n", - " print(f\"face{i}.jpg is saved\")\n", - " \n", - "# display the image with detected faces\n", - "cv2.imshow(\"image\", img)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.10.8 64-bit", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.8" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "767d51c1340bd893661ea55ea3124f6de3c7a262a8b4abca0554b478b1e2ff90" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}