hf-similarity-check / imageSegmentation.py
Mitul Mohammad Abdullah Al Mukit
first commit
1f72938
raw
history blame
1.83 kB
# This program is designed to auto crop the face on a given image
# It is required to change the image into gray format to satisfy the pre-trained model requirement
import cv2
import numpy as np
import os
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
import cv2
from pathlib import Path
# auto crop the image in the given dir
base_options = python.BaseOptions(model_asset_path='blaze_face_short_range.tflite')
options = vision.FaceDetectorOptions(base_options=base_options)
detector = vision.FaceDetector.create_from_options(options)
def crop(
image,
detection_result
) -> np.ndarray :
annotated_image = image.copy()
height, width, _ = image.shape
# Here assume we only detect one face
for detection in detection_result.detections:
# Crop detected face
bbox = detection.bounding_box
cropped_img = image[bbox.origin_y - 90: bbox.origin_y + bbox.height + 30, bbox.origin_x - 80:bbox.origin_x + bbox.width + 35]
return cropped_img
def auto_cropping(dir):
files = os.listdir(dir) # list of files in directory
for file in files:
file_dir = Path(dir + "/" + file)
abs_path = file_dir.resolve()
img = mp.Image.create_from_file(str(abs_path))
detection_result = detector.detect(img)
save_path = 'saved'
image_copy = np.copy(img.numpy_view())
annotated_image = crop(image_copy, detection_result)
rgb_annotated_image = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)
return rgb_annotated_image
# auto_cropping("image") # <----------- !!!!change address here!!!! ------------------> #
# The current problem (6/2/2023) is that the model may recognize some cartoon face as human face,
# my idea is to use another model to classify if the cropped image is real human face