diff --git a/.idea/Filteristic.iml b/.idea/Filteristic.iml
index d28d420..8aeb520 100644
--- a/.idea/Filteristic.iml
+++ b/.idea/Filteristic.iml
@@ -2,11 +2,10 @@
-
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b534b89..8d93904 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/__pycache__/main.cpython-38.pyc b/__pycache__/main.cpython-38.pyc
deleted file mode 100644
index cae4fd6..0000000
Binary files a/__pycache__/main.cpython-38.pyc and /dev/null differ
diff --git a/assest/eye1.png b/assest/eye1.png
new file mode 100644
index 0000000..c6fb1a0
Binary files /dev/null and b/assest/eye1.png differ
diff --git a/assest/eye2.png b/assest/eye2.png
new file mode 100644
index 0000000..e53e72f
Binary files /dev/null and b/assest/eye2.png differ
diff --git a/assest/ghoul2.png b/assest/ghoul2.png
new file mode 100644
index 0000000..8b4ca39
Binary files /dev/null and b/assest/ghoul2.png differ
diff --git a/assest/hair9.png b/assest/hair9.png
new file mode 100644
index 0000000..b835895
Binary files /dev/null and b/assest/hair9.png differ
diff --git a/filters/__pycache__/beardfilter.cpython-39.pyc b/filters/__pycache__/beardfilter.cpython-39.pyc
new file mode 100644
index 0000000..9458e5e
Binary files /dev/null and b/filters/__pycache__/beardfilter.cpython-39.pyc differ
diff --git a/filters/__pycache__/change_filter.cpython-39.pyc b/filters/__pycache__/change_filter.cpython-39.pyc
new file mode 100644
index 0000000..33bce6b
Binary files /dev/null and b/filters/__pycache__/change_filter.cpython-39.pyc differ
diff --git a/filters/__pycache__/video_filtering_face.cpython-39.pyc b/filters/__pycache__/video_filtering_face.cpython-39.pyc
new file mode 100644
index 0000000..02cfcd9
Binary files /dev/null and b/filters/__pycache__/video_filtering_face.cpython-39.pyc differ
diff --git a/filters/beardfilter.py b/filters/beardfilter.py
index ccec66c..cc820ca 100644
--- a/filters/beardfilter.py
+++ b/filters/beardfilter.py
@@ -2,66 +2,92 @@
import numpy as np
import dlib
from math import hypot
+from change_filter import change_filter
+# change_filter =[{'filter':['../assest/hair9.png','../assest/ghoul2.png'],'center':[27,66],'width':[1.5,1],'height':[1,1],'up':[100,20],'left':[0,0]}]
+cap = cv2.VideoCapture(0)
+_, frame = cap.read()
+rows, cols, _ = frame.shape
+filter1 = np.zeros((rows, cols), np.uint8)
+detector = dlib.get_frontal_face_detector()
+predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
+counte=0
+def video_filtering_face(path,center,width,height,up,left,counte=0):
+
+ filter_image = []
+ for i in path:
+ filter_image.append(cv2.imread(i))
+
-def video_filtering_face(path,center,width,height,up=0,left=0,yahia = False):
- filter_path = path
- filter_image = cv2.imread(filter_path)
- detector = dlib.get_frontal_face_detector()
- predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
- cap = cv2.VideoCapture(0)
- _, frame = cap.read()
- rows, cols, _ = frame.shape
- filter1 = np.zeros((rows, cols), np.uint8)
while cap.isOpened():
+ 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:
+ for i in range(len(path)):
+ filter(frame,gray_frame,faces,filter_image[i],center[i],width[i],height[i],up[i],left[i])
+ except:
+ _, frame_f = cap.read()
+ cv2.imshow("Frame", frame_f)
+ else:
+ _, frame_f = cap.read()
+ cv2.imshow("Frame", frame_f)
+ key = cv2.waitKey(1)
+ if key == ord('n'):
+ # print('first : ' ,i)
+ change_image(counte)
+ # print('second : ', i)
- for face in faces:
- landmarks = predictor(gray_frame, face)
- # filter coordinates
- if yahia:
- up = (landmarks.part(8).y - landmarks.part(62).y)*3
- center_filter = (landmarks.part(center).x-left, landmarks.part(center).y-up)
- left_filter = (landmarks.part(3).x, landmarks.part(3).y)
- right_filter = (landmarks.part(13).x, landmarks.part(13).y)
- filter_width = int(hypot(left_filter[0] - right_filter[0],
- left_filter[1] - right_filter[1]) * width)
- filter_height = int(filter_width *height)
+def filter(frame,gray_frame,faces,filter_image1,center,width,height,up=0,left=0):
+ for face in faces:
+ landmarks = predictor(gray_frame, face)
- # 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))
+ # filter coordinates
+ # top_filter = (landmarks.part(27).x+10, landmarks.part(24).y+10)
+ # if yahia:
+ # up = (landmarks.part(8).y - landmarks.part(62).y) * 3
+ center_filter = (landmarks.part(center).x-left, landmarks.part(center).y-up)
+ left_filter = (landmarks.part(4).x, landmarks.part(4).y)
+ right_filter = (landmarks.part(14).x, landmarks.part(14).y)
- # Adding the new filter
- # coloring
- filtery = cv2.resize(filter_image, (filter_width, filter_height))
- filtery_gray = cv2.cvtColor(filtery, cv2.COLOR_BGR2GRAY)
+ filter_width = int(hypot(left_filter[0] - right_filter[0],
+ left_filter[1] - right_filter[1]) * width)
+ filter_height = int(filter_width * height)
- _, filter1 = cv2.threshold(filtery_gray, 25, 255, cv2.THRESH_BINARY_INV)
+ # 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))
- 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)
+ # 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)
- frame[top_left[1]: top_left[1] + filter_height,
- top_left[0]: top_left[0] + filter_width] = final_filter
+ 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)
- cv2.imshow("Frame", frame)
- except:
- _, frame_f = cap.read()
- cv2.imshow("Frame", frame_f)
- else:
- _, frame_f = cap.read()
- cv2.imshow("Frame", frame_f)
- key = cv2.waitKey(1)
- if key == 27:
- break
\ No newline at end of file
+ frame[top_left[1]: top_left[1] + filter_height,
+ top_left[0]: top_left[0] + filter_width,:] = final_filter
+
+ cv2.imshow("Frame", frame)
+
+def change_image(i):
+ video_filtering_face(
+ change_filter[i]['filter'],
+ change_filter[i]['center'],
+ change_filter[i]['width'],
+ change_filter[i]['height'],
+ change_filter[i]['up'],
+ change_filter[i]['left'],
+ change_filter[i]['counte']
+ )
diff --git a/filters/change_filter.py b/filters/change_filter.py
new file mode 100644
index 0000000..c3ecd0d
--- /dev/null
+++ b/filters/change_filter.py
@@ -0,0 +1,62 @@
+
+
+change_filter =[{'filter':['../assest/hair9.png','../assest/ghoul2.png','../assest/eye1.png','../assest/eye2.png'],
+ 'center':[27,66,40,46],
+ 'width':[1.5,1,0.2,0.2],
+ 'height':[1,1,0.4,0.4],
+ 'up':[100,20,5,5],
+ 'left':[0,0,0,0],
+ 'counte':1},
+ {'filter': ["../assest/birthday-hat.png"],
+ 'center': [27],
+ 'width': [1.3],
+ 'height': [1],
+ 'up': [120],
+ 'left': [0],
+ 'counte':2},
+ {'filter': ["../assest/gold-crown.png"],
+ 'center': [27],
+ 'width': [1.3],
+ 'height': [1],
+ 'up': [120],
+ 'left': [0],
+ 'counte':3},
+ {'filter': ["../assest/queens-crown.png"],
+ 'center': [27],
+ 'width': [1.3],
+ 'height': [1],
+ 'up': [120],
+ 'left': [0],
+ 'counte':4},
+ {'filter': ["../assest/flower-crown.png"],
+ 'center': [27],
+ 'width': [1.3],
+ 'height': [1],
+ 'up': [80],
+ 'left': [0],
+ 'counte': 5},
+ {'filter': ["../assest/funny-sunglass.png"],
+ 'center': [27],
+ 'width': [1.05],
+ 'height': [0.33],
+ 'up': [0],
+ 'left': [0],
+ 'counte': 6},
+ {'filter': ['../assest/moustache2.png'],
+ 'center': [51],
+ 'width': [1],
+ 'height': [0.5],
+ 'up': [1],
+ 'left': [-3],
+ 'counte': 7},
+ {'filter': ["../assest/tongue.png"],
+ 'center': [57],
+ 'width': [0.6],
+ 'height': [1.2],
+ 'up': [-25],
+ 'left': [0],
+ 'counte': 0},
+
+
+ ]
+
diff --git a/filters/fliter_face.json b/filters/fliter_face.json
new file mode 100644
index 0000000..e6c7b90
--- /dev/null
+++ b/filters/fliter_face.json
@@ -0,0 +1,6 @@
+change_filter =[{'filter':['../assest/hair9.png','../assest/ghoul2.png'],
+ 'center':[27,66],
+ 'width':[1.5,1],
+ 'height':[1,1],
+ 'up':[100,20],
+ 'left':[0,0]}]
diff --git a/filters/video_filtering_face.py b/filters/video_filtering_face.py
index 85995d4..09ebfb5 100644
--- a/filters/video_filtering_face.py
+++ b/filters/video_filtering_face.py
@@ -2,11 +2,11 @@
# video_filtering_face("beard.png",8,1.1,1.5)
-# video_filtering_face("../assest/birthday-hat.png",27,1.3,1.2,yahia=True)
-# video_filtering_face("../assest/gold-crown.png",29,1.5,0.5, yahia = True)
-# video_filtering_face("../assest/queens-crown.png",29,1.5,0.5, yahia = True)
-# video_filtering_face("../assest/flower-crown.png",27,1.5,0.5,90)
+
# video_filtering_face("../assest/sunglasses2.png",27,1,0.35) ## not working
# video_filtering_face("../assest/funny-sunglass.png",27,1.05,0.33)
-# video_filtering_face("../assest/moustache2.png",51,1,0.5,1,-3)
-video_filtering_face("../assest/tongue.png",57,0.6,1.2,-25)
\ No newline at end of file
+# video_filtering_face(['../assest/moustache2.png'],[51],[1],[0.5],[1],[-3])
+video_filtering_face(["../assest/tongue.png"],[57],[0.6],[1.2],[-25],[0])
+# video_filtering_face(['../assest/hair9.png','../assest/ghoul2.png','../assest/eye1.png','../assest/eye2.png'],
+# [27,66,40,46],[1.5,1,0.2,0.2],[1,1,0.4,0.4],[100,20,5,5],[0,0,0,0])
+