diff --git a/.idea/Filteristic.iml b/.idea/Filteristic.iml
index d9e6024..fdc701d 100644
--- a/.idea/Filteristic.iml
+++ b/.idea/Filteristic.iml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 8d93904..67debe4 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/assest/people_faces.jpg b/assest/people_faces.jpg
new file mode 100644
index 0000000..aae71cf
Binary files /dev/null and b/assest/people_faces.jpg differ
diff --git a/assest/shape_predictor_68_face_landmarks.dat:Zone.Identifier b/assest/shape_predictor_68_face_landmarks.dat:Zone.Identifier
new file mode 100644
index 0000000..65f3fa5
--- /dev/null
+++ b/assest/shape_predictor_68_face_landmarks.dat:Zone.Identifier
@@ -0,0 +1,4 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=https://github.com/JeffTrain/selfie/blob/master/shape_predictor_68_face_landmarks.dat
+HostUrl=https://raw.githubusercontent.com/JeffTrain/selfie/master/shape_predictor_68_face_landmarks.dat
diff --git a/filters/__pycache__/dogfilter.cpython-39.pyc b/filters/__pycache__/dogfilter.cpython-39.pyc
index 7d42965..f26d396 100644
Binary files a/filters/__pycache__/dogfilter.cpython-39.pyc and b/filters/__pycache__/dogfilter.cpython-39.pyc differ
diff --git a/filters/__pycache__/filter1.cpython-39.pyc b/filters/__pycache__/filter1.cpython-39.pyc
index 3d23894..ce2cc11 100644
Binary files a/filters/__pycache__/filter1.cpython-39.pyc and b/filters/__pycache__/filter1.cpython-39.pyc differ
diff --git a/filters/__pycache__/rainbow.cpython-39.pyc b/filters/__pycache__/rainbow.cpython-39.pyc
new file mode 100644
index 0000000..736d17e
Binary files /dev/null and b/filters/__pycache__/rainbow.cpython-39.pyc differ
diff --git a/filters/rainbow.py b/filters/rainbow.py
new file mode 100644
index 0000000..f180e2a
--- /dev/null
+++ b/filters/rainbow.py
@@ -0,0 +1,60 @@
+import cv2
+import numpy as np
+import dlib
+from math import hypot
+path = r"assest\snapchat-filters-png-4068.png"
+filter_image = cv2.imread(path)
+# Loading Face detector
+detector = dlib.get_frontal_face_detector()
+predictor_path = r"assest\shape_predictor_68_face_landmarks.dat"
+predictor = dlib.shape_predictor(predictor_path)
+
+
+def rainbow_filtering(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:
+
+ for face in faces:
+ landmarks = predictor(gray_frame, face)
+
+ # filter coordinates
+ # top_filter = (landmarks.part(27).x, landmarks.part(24).y)
+ center_filter = (landmarks.part(57).x, landmarks.part(57).y)
+ left_filter = (landmarks.part(2).x, landmarks.part(2).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]) * 0.9)
+ filter_height = int(filter_width * 1.3)
+
+ # New filter position
+ top_left = (int(center_filter[0] - filter_width / 2),
+ int(center_filter[1] - filter_height / 2 + 20))
+ 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_image, (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)
+ except:
+ _, frame_f = cap.read()
+ cv2.imshow("Frame", frame_f)
+ # else:
+ # _, frame_f = cap.read()
+ # cv2.imshow("Frame", frame_f)
diff --git a/helpers/faces.jpg b/helpers/faces.jpg
new file mode 100644
index 0000000..1fbf48d
Binary files /dev/null and b/helpers/faces.jpg differ
diff --git a/helpers/faces.jpg:Zone.Identifier b/helpers/faces.jpg:Zone.Identifier
new file mode 100644
index 0000000..1f94afa
--- /dev/null
+++ b/helpers/faces.jpg:Zone.Identifier
@@ -0,0 +1,4 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=https://www.google.jo/
+HostUrl=https://thumbs.dreamstime.com/z/set-people-faces-smiling-face-collection-group-79112820.jpg
diff --git a/helpers/faces2.jpg b/helpers/faces2.jpg
new file mode 100644
index 0000000..c33fb78
Binary files /dev/null and b/helpers/faces2.jpg differ
diff --git a/helpers/faces2.jpg:Zone.Identifier b/helpers/faces2.jpg:Zone.Identifier
new file mode 100644
index 0000000..73296cd
--- /dev/null
+++ b/helpers/faces2.jpg:Zone.Identifier
@@ -0,0 +1,4 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=https://www.google.jo/
+HostUrl=https://image.shutterstock.com/shutterstock/photos/498141919/display_1500/stock-photo-set-of-people-faces-498141919.jpg
diff --git a/helpers/faces2.png:Zone.Identifier b/helpers/faces2.png:Zone.Identifier
new file mode 100644
index 0000000..8041cbb
--- /dev/null
+++ b/helpers/faces2.png:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+LastWriterPackageFamilyName=Microsoft.ScreenSketch_8wekyb3d8bbwe
+ZoneId=3
diff --git a/helpers/import_image.py b/helpers/import_image.py
new file mode 100644
index 0000000..822906b
--- /dev/null
+++ b/helpers/import_image.py
@@ -0,0 +1,53 @@
+import cv2
+import dlib
+from math import hypot
+
+path = r"snapchat-filters-png-4068.png"
+filter_image = cv2.imread(path)
+# Loading Face detector
+detector = dlib.get_frontal_face_detector()
+predictor_path = r"shape_predictor_68_face_landmarks.dat"
+predictor = dlib.shape_predictor(predictor_path)
+image = cv2.imread('faces2.jpg')
+gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+faces = detector(image)
+
+for face in faces:
+ landmarks = predictor(gray, face)
+
+ # filter coordinates
+ # top_filter = (landmarks.part(27).x, landmarks.part(24).y)
+ center_filter = (landmarks.part(57).x, landmarks.part(57).y)
+ left_filter = (landmarks.part(2).x, landmarks.part(2).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]) * 0.9)
+ filter_height = int(filter_width * 1.3)
+
+ # New filter position
+ top_left = (int(center_filter[0] - filter_width / 2),
+ int(center_filter[1] - filter_height / 2 + 25))
+ 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_image, (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 = image[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)
+
+ image[top_left[1]: top_left[1] + filter_height,
+ top_left[0]: top_left[0] + filter_width] = final_filter
+
+cv2.imshow("Frame", image)
+cv2.waitKey(0)
+
+
+
+
+
diff --git a/helpers/one_face.jpg b/helpers/one_face.jpg
new file mode 100644
index 0000000..98903ab
Binary files /dev/null and b/helpers/one_face.jpg differ
diff --git a/helpers/people_faces.jpg:Zone.Identifier b/helpers/people_faces.jpg:Zone.Identifier
new file mode 100644
index 0000000..9f6c585
--- /dev/null
+++ b/helpers/people_faces.jpg:Zone.Identifier
@@ -0,0 +1,4 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=https://www.google.jo/
+HostUrl=https://i.pinimg.com/originals/97/e4/2a/97e42a82fc7911961d3ca55f54d1372c.jpg
diff --git a/helpers/pngfind.com-pilgrim-hat-png-41504.png b/helpers/pngfind.com-pilgrim-hat-png-41504.png
new file mode 100644
index 0000000..040e657
Binary files /dev/null and b/helpers/pngfind.com-pilgrim-hat-png-41504.png differ
diff --git a/helpers/pngfind.com-pilgrim-hat-png-41504.png:Zone.Identifier b/helpers/pngfind.com-pilgrim-hat-png-41504.png:Zone.Identifier
new file mode 100644
index 0000000..e0353ac
--- /dev/null
+++ b/helpers/pngfind.com-pilgrim-hat-png-41504.png:Zone.Identifier
@@ -0,0 +1,4 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=https://www.pngfind.com/download/hmboo_black-pilgrim-hat-picture-clip-art-pilgrim-hat/
+HostUrl=https://www.pngfind.com/pngs/b/4-41504_pilgrim-hat-png.png
diff --git a/helpers/shape_predictor_68_face_landmarks.dat b/helpers/shape_predictor_68_face_landmarks.dat
new file mode 100644
index 0000000..e0ec20d
Binary files /dev/null and b/helpers/shape_predictor_68_face_landmarks.dat differ
diff --git a/helpers/snapchat-filters-png-4068.png b/helpers/snapchat-filters-png-4068.png
new file mode 100644
index 0000000..70eca2e
Binary files /dev/null and b/helpers/snapchat-filters-png-4068.png differ
diff --git a/main.py b/main.py
index 8abb01a..345238a 100644
--- a/main.py
+++ b/main.py
@@ -1,8 +1,9 @@
import cv2
import numpy as np
import dlib
-from filters.filter1 import filtering
-from filters.dogfilter import filteringdog
+# from filters.filter1 import filtering
+# from filters.dogfilter import filteringdog
+from filters.rainbow import rainbow_filtering
# Loading Camera and Nose image and Creating mask
cap = cv2.VideoCapture(0)
_, frame = cap.read()
@@ -10,7 +11,7 @@
rows, cols, _ = frame.shape
filter1 = np.zeros((rows, cols), np.uint8)
while True:
- filteringdog(cap,rows, cols)
+ rainbow_filtering(cap,rows, cols)
key = cv2.waitKey(1)
if key == 27:
break
\ No newline at end of file