diff --git a/.idea/Filteristic.iml b/.idea/Filteristic.iml index d9e6024..858c4d5 100644 --- a/.idea/Filteristic.iml +++ b/.idea/Filteristic.iml @@ -1,7 +1,9 @@ - + + + diff --git a/README.md b/README.md index 66e5c0a..976d4c9 100644 --- a/README.md +++ b/README.md @@ -51,4 +51,4 @@ Featured task: different filter names must appear to the user

Domain Modeling

-[white board](https://miro.com/app/board/o9J_lgjUC2c=/) +[white board ](https://miro.com/app/board/o9J_lgjUC2c=/) diff --git a/assest/10-2-moustache-free-png-image.png b/assest/10-2-moustache-free-png-image.png new file mode 100644 index 0000000..c26900e Binary files /dev/null and b/assest/10-2-moustache-free-png-image.png differ diff --git a/assest/flower-crown-png-42606.png b/assest/flower-crown-png-42606.png new file mode 100644 index 0000000..d2b454b Binary files /dev/null and b/assest/flower-crown-png-42606.png differ diff --git a/assest/mustach.png b/assest/mustach.png new file mode 100644 index 0000000..95dff4e Binary files /dev/null and b/assest/mustach.png differ diff --git a/assest/sunglasses2.png b/assest/sunglasses2.png new file mode 100644 index 0000000..cd50c32 Binary files /dev/null and b/assest/sunglasses2.png differ diff --git a/filters/__pycache__/filter1.cpython-39.pyc b/filters/__pycache__/filter1.cpython-39.pyc index 3d23894..dfa6a86 100644 Binary files a/filters/__pycache__/filter1.cpython-39.pyc and b/filters/__pycache__/filter1.cpython-39.pyc differ diff --git a/filters/__pycache__/glasses_black.cpython-39.pyc b/filters/__pycache__/glasses_black.cpython-39.pyc new file mode 100644 index 0000000..aff36c7 Binary files /dev/null and b/filters/__pycache__/glasses_black.cpython-39.pyc differ diff --git a/filters/__pycache__/gost.cpython-39.pyc b/filters/__pycache__/gost.cpython-39.pyc new file mode 100644 index 0000000..ce4d03b Binary files /dev/null and b/filters/__pycache__/gost.cpython-39.pyc differ diff --git a/filters/__pycache__/mustache_filter.cpython-39.pyc b/filters/__pycache__/mustache_filter.cpython-39.pyc new file mode 100644 index 0000000..8cdfbd3 Binary files /dev/null and b/filters/__pycache__/mustache_filter.cpython-39.pyc differ diff --git a/filters/__pycache__/mustache_filter_2.cpython-39.pyc b/filters/__pycache__/mustache_filter_2.cpython-39.pyc new file mode 100644 index 0000000..4289c9b Binary files /dev/null and b/filters/__pycache__/mustache_filter_2.cpython-39.pyc differ diff --git a/filters/face_filter_crown.py b/filters/face_filter_crown.py new file mode 100644 index 0000000..d2ca543 --- /dev/null +++ b/filters/face_filter_crown.py @@ -0,0 +1,52 @@ +# import cv2 +# import numpy as np +# import dlib +# from math import hypot +# filter_image = cv2.imread("../assest/flower-crown-png-42606.png") +# +# # Loading Face detector +# detector = dlib.get_frontal_face_detector() +# predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") +# +# cap = cv2.VideoCapture(0) +# +# while True : +# _, frame = cap.read() +# gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) +# faces = detector(frame) +# for face in faces : +# landmarks = predictor(gray_frame, face) +# top_glasses = (landmarks.part(24).x , landmarks.part(24).y) +# left_glasses = (landmarks.part(0).x , landmarks.part(0).y) +# right_glasses = (landmarks.part(16).x , landmarks.part(16).y) +# center_glasses = (landmarks.part(27).x , landmarks.part(27).y) +# +# glasses_width = int (hypot(left_glasses[0] -right_glasses[0], +# left_glasses[1] - right_glasses[1])) +# +# glasses_height = int(glasses_width * 0.6) +# +# # positios +# upper_left = (int(center_glasses[0] - glasses_width/2 ), +# int(center_glasses[1] - glasses_height/2)) +# lower_right = (int(center_glasses[0] + glasses_width / 2), +# int(center_glasses[1] + glasses_height / 2)) +# +# # Adding the glasses in the correct position +# glasses = cv2.resize(filter_image,(glasses_width , glasses_height)) +# gray_glasses = cv2.cvtColor(glasses, cv2.COLOR_BGR2GRAY) +# +# +# _, glasses_mask = cv2.threshold(gray_glasses,120, 225, cv2.THRESH_BINARY_INV) +# glasses_area = frame[upper_left[1] : upper_left[1]+glasses_height , upper_left[0]:upper_left[0]+glasses_width] +# glasses_ares_no_glasses = cv2.bitwise_and(glasses_area , glasses_area,mask= glasses_mask) +# final_glasses = cv2.add(glasses_ares_no_glasses, glasses) +# frame[upper_left[1]: upper_left[1] + glasses_height, upper_left[0]:upper_left[0] + glasses_width] = final_glasses +# +# cv2.imshow("Frame",frame) +# +# +# +# key = cv2.waitKey(1) +# if key ==27 : +# break \ No newline at end of file diff --git a/filters/glasses_black.py b/filters/glasses_black.py new file mode 100644 index 0000000..ba38ef4 --- /dev/null +++ b/filters/glasses_black.py @@ -0,0 +1,62 @@ +import cv2 +import numpy as np +import dlib +from math import hypot +filter_image = cv2.imread("assest/sunglasses2.png") + +# Loading Face detector +detector = dlib.get_frontal_face_detector() +predictor = dlib.shape_predictor("assest\shape_predictor_68_face_landmarks.dat") + +def filteringmouse(cap,rows, cols): + filter1 = np.zeros((rows, cols), np.uint8) + _, frame = cap.read() + filter1.fill(0) + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + faces = detector(frame) + + # if faces: + try: + filter(frame,gray_frame,faces,filter_image,27,27,1,0.35) + # filter(frame, gray_frame, faces, filter_image3,27,27,1.5,2,25) + except: + _, frame_f = cap.read() + cv2.imshow("Frame", frame_f) + # else: + # _, frame_f = cap.read() + # cv2.imshow("Frame", frame_f) +def filter(frame,gray_frame,faces,filter_image1,X,Y,width,height,above=0,left=0): + for face in faces: + landmarks = predictor(gray_frame, face) + + # filter coordinates + # top_filter = (landmarks.part(27).x+10, landmarks.part(24).y+10) + center_filter = (landmarks.part(X).x-left, landmarks.part(Y).y-above) + left_filter = (landmarks.part(0).x, landmarks.part(0).y) + right_filter = (landmarks.part(16).x, landmarks.part(16).y) + + filter_width = int(hypot(left_filter[0] - right_filter[0], + left_filter[1] - right_filter[1]) * width) + filter_height = int(filter_width * height) + + # New filter position + top_left = (int(center_filter[0] - filter_width / 2), + int(center_filter[1] - filter_height /2 )) + bottom_right = (int(center_filter[0] + filter_width / 2), + int(center_filter[1] + filter_height / 2)) + + # Adding the new filter + # coloring + filtery = cv2.resize(filter_image1, (filter_width, filter_height)) + filtery_gray = cv2.cvtColor(filtery, cv2.COLOR_BGR2GRAY) + _, filter1 = cv2.threshold(filtery_gray, 125, 225, cv2.THRESH_BINARY) + + filter_area = frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width] + filter_area_no_filter = cv2.bitwise_and(filter_area, filter_area, mask=filter1) + # final_filter = cv2.add(filter_area_no_filter, filtery) + + frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width,:] = filter_area_no_filter + + cv2.imshow("Frame", frame) \ No newline at end of file diff --git a/filters/gost.py b/filters/gost.py new file mode 100644 index 0000000..02e84a6 --- /dev/null +++ b/filters/gost.py @@ -0,0 +1,30 @@ +import cv2 +import numpy as np +import dlib +from math import hypot +filter_image = cv2.imread("assest/10-2-moustache-free-png-image.png") + +# Loading Face detector +detector = dlib.get_frontal_face_detector() +predictor = dlib.shape_predictor("assest\shape_predictor_68_face_landmarks.dat") + +def filteringmouse(cap,rows, cols): + filter1 = np.zeros((rows, cols), np.uint8) + _, frame = cap.read() + filter1.fill(0) + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + faces = detector(frame) + + # if faces: + try: + filter(frame) + # filter(frame, gray_frame, faces, filter_image3,27,27,1.5,2,25) + except: + _, frame_f = cap.read() + cv2.imshow("Frame", frame_f) + # else: + # _, frame_f = cap.read() + # cv2.imshow("Frame", frame_f) +def filter(frame): + invert = cv2.bitwise_not(frame) + cv2.imshow("Frame", invert) \ No newline at end of file diff --git a/filters/head_crown.py b/filters/head_crown.py new file mode 100644 index 0000000..4bf6fa2 --- /dev/null +++ b/filters/head_crown.py @@ -0,0 +1,62 @@ +import cv2 +import numpy as np +import dlib +from math import hypot +filter_image = cv2.imread("assest/flower-crown-png-42606.png") + +# Loading Face detector +detector = dlib.get_frontal_face_detector() +predictor = dlib.shape_predictor("assest\shape_predictor_68_face_landmarks.dat") + +def filteringmouse(cap,rows, cols): + filter1 = np.zeros((rows, cols), np.uint8) + _, frame = cap.read() + filter1.fill(0) + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + faces = detector(frame) + + # if faces: + try: + filter(frame,gray_frame,faces,filter_image,27,27,1.2,0.6,20) + # filter(frame, gray_frame, faces, filter_image3,27,27,1.5,2,25) + except: + _, frame_f = cap.read() + cv2.imshow("Frame", frame_f) + # else: + # _, frame_f = cap.read() + # cv2.imshow("Frame", frame_f) +def filter(frame,gray_frame,faces,filter_image1,X,Y,width,height,above=0,left=0): + for face in faces: + landmarks = predictor(gray_frame, face) + + # filter coordinates + # top_filter = (landmarks.part(27).x+10, landmarks.part(24).y+10) + center_filter = (landmarks.part(X).x-left, landmarks.part(Y).y-above) + left_filter = (landmarks.part(4).x, landmarks.part(4).y) + right_filter = (landmarks.part(14).x, landmarks.part(14).y) + + filter_width = int(hypot(left_filter[0] - right_filter[0], + left_filter[1] - right_filter[1]) * width) + filter_height = int(filter_width * height) + + # New filter position + top_left = (int(center_filter[0] - filter_width / 2), + int(center_filter[1] - filter_height )) + bottom_right = (int(center_filter[0] + filter_width / 2), + int(center_filter[1] + filter_height / 2)) + + # Adding the new filter + # coloring + filtery = cv2.resize(filter_image1, (filter_width, filter_height)) + filtery_gray = cv2.cvtColor(filtery, cv2.COLOR_BGR2GRAY) + _, filter1 = cv2.threshold(filtery_gray, 25, 255, cv2.THRESH_BINARY_INV) + + filter_area = frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width] + filter_area_no_filter = cv2.bitwise_and(filter_area, filter_area, mask=filter1) + final_filter = cv2.add(filter_area_no_filter, filtery) + + frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width,:] = final_filter + + cv2.imshow("Frame", frame) \ No newline at end of file diff --git a/filters/mustache_filter.py b/filters/mustache_filter.py new file mode 100644 index 0000000..fb91c80 --- /dev/null +++ b/filters/mustache_filter.py @@ -0,0 +1,62 @@ +import cv2 +import numpy as np +import dlib +from math import hypot +filter_image = cv2.imread("assest/mustach.png") + +# Loading Face detector +detector = dlib.get_frontal_face_detector() +predictor = dlib.shape_predictor("assest\shape_predictor_68_face_landmarks.dat") + +def filteringmouse(cap,rows, cols): + filter1 = np.zeros((rows, cols), np.uint8) + _, frame = cap.read() + filter1.fill(0) + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + faces = detector(frame) + + # if faces: + try: + filter(frame,gray_frame,faces,filter_image,57,57,1,1) + # filter(frame, gray_frame, faces, filter_image3,27,27,1.5,2,25) + except: + _, frame_f = cap.read() + cv2.imshow("Frame", frame_f) + # else: + # _, frame_f = cap.read() + # cv2.imshow("Frame", frame_f) +def filter(frame,gray_frame,faces,filter_image1,X,Y,width,height,above=0,left=0): + for face in faces: + landmarks = predictor(gray_frame, face) + + # filter coordinates + # top_filter = (landmarks.part(27).x+10, landmarks.part(24).y+10) + center_filter = (landmarks.part(X).x-left, landmarks.part(Y).y-above) + left_filter = (landmarks.part(4).x, landmarks.part(4).y) + right_filter = (landmarks.part(12).x, landmarks.part(12).y) + + filter_width = int(hypot(left_filter[0] - right_filter[0], + left_filter[1] - right_filter[1]) * width) + filter_height = int(filter_width * height) + + # New filter position + top_left = (int(center_filter[0] - filter_width / 2), + int(center_filter[1] - filter_height /2 )) + bottom_right = (int(center_filter[0] + filter_width / 2), + int(center_filter[1] + filter_height / 2)) + + # Adding the new filter + # coloring + filtery = cv2.resize(filter_image1, (filter_width, filter_height)) + filtery_gray = cv2.cvtColor(filtery, cv2.COLOR_BGR2GRAY) + _, filter1 = cv2.threshold(filtery_gray, 125, 225, cv2.THRESH_BINARY) + + filter_area = frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width] + filter_area_no_filter = cv2.bitwise_and(filter_area, filter_area, mask=filter1) + # final_filter = cv2.add(filter_area_no_filter, filtery) + + frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width,:] = filter_area_no_filter + + cv2.imshow("Frame", frame) \ No newline at end of file diff --git a/filters/mustache_filter_2.py b/filters/mustache_filter_2.py new file mode 100644 index 0000000..130ea16 --- /dev/null +++ b/filters/mustache_filter_2.py @@ -0,0 +1,62 @@ +import cv2 +import numpy as np +import dlib +from math import hypot +filter_image = cv2.imread("assest/10-2-moustache-free-png-image.png") + +# Loading Face detector +detector = dlib.get_frontal_face_detector() +predictor = dlib.shape_predictor("assest\shape_predictor_68_face_landmarks.dat") + +def filteringmouse(cap,rows, cols): + filter1 = np.zeros((rows, cols), np.uint8) + _, frame = cap.read() + filter1.fill(0) + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + faces = detector(frame) + + # if faces: + try: + filter(frame,gray_frame,faces,filter_image,51,51,1,0.5,1,-3) + # filter(frame, gray_frame, faces, filter_image3,27,27,1.5,2,25) + except: + _, frame_f = cap.read() + cv2.imshow("Frame", frame_f) + # else: + # _, frame_f = cap.read() + # cv2.imshow("Frame", frame_f) +def filter(frame,gray_frame,faces,filter_image1,X,Y,width,height,above=0,left=0): + for face in faces: + landmarks = predictor(gray_frame, face) + + # filter coordinates + # top_filter = (landmarks.part(27).x+10, landmarks.part(24).y+10) + center_filter = (landmarks.part(X).x-left, landmarks.part(Y).y-above) + left_filter = (landmarks.part(4).x, landmarks.part(4).y) + right_filter = (landmarks.part(12).x, landmarks.part(12).y) + + filter_width = int(hypot(left_filter[0] - right_filter[0], + left_filter[1] - right_filter[1]) * width) + filter_height = int(filter_width * height) + + # New filter position + top_left = (int(center_filter[0] - filter_width / 2), + int(center_filter[1] - filter_height /2 )) + bottom_right = (int(center_filter[0] + filter_width / 2), + int(center_filter[1] + filter_height / 2)) + + # Adding the new filter + # coloring + filtery = cv2.resize(filter_image1, (filter_width, filter_height)) + filtery_gray = cv2.cvtColor(filtery, cv2.COLOR_BGR2GRAY) + _, filter1 = cv2.threshold(filtery_gray, 25, 225, cv2.THRESH_BINARY_INV) + + filter_area = frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width] + filter_area_no_filter = cv2.bitwise_and(filter_area, filter_area, mask=filter1) + final_filter = cv2.add(filter_area_no_filter, filtery) + + frame[top_left[1]: top_left[1] + filter_height, + top_left[0]: top_left[0] + filter_width,:] = final_filter + + cv2.imshow("Frame", frame) \ No newline at end of file diff --git a/filters/shape_predictor_68_face_landmarks.dat b/filters/shape_predictor_68_face_landmarks.dat new file mode 100644 index 0000000..e0ec20d Binary files /dev/null and b/filters/shape_predictor_68_face_landmarks.dat differ diff --git a/sunglasses.png b/sunglasses.png new file mode 100644 index 0000000..cd50c32 Binary files /dev/null and b/sunglasses.png differ