Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/Filteristic.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added assest/people_faces.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions assest/shape_predictor_68_face_landmarks.dat:Zone.Identifier
Original file line number Diff line number Diff line change
@@ -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
Binary file modified filters/__pycache__/dogfilter.cpython-39.pyc
Binary file not shown.
Binary file modified filters/__pycache__/filter1.cpython-39.pyc
Binary file not shown.
Binary file added filters/__pycache__/rainbow.cpython-39.pyc
Binary file not shown.
60 changes: 60 additions & 0 deletions filters/rainbow.py
Original file line number Diff line number Diff line change
@@ -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)
Binary file added helpers/faces.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions helpers/faces.jpg:Zone.Identifier
Original file line number Diff line number Diff line change
@@ -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
Binary file added helpers/faces2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions helpers/faces2.jpg:Zone.Identifier
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions helpers/faces2.png:Zone.Identifier
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[ZoneTransfer]
LastWriterPackageFamilyName=Microsoft.ScreenSketch_8wekyb3d8bbwe
ZoneId=3
53 changes: 53 additions & 0 deletions helpers/import_image.py
Original file line number Diff line number Diff line change
@@ -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)





Binary file added helpers/one_face.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions helpers/people_faces.jpg:Zone.Identifier
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://www.google.jo/
HostUrl=https://i.pinimg.com/originals/97/e4/2a/97e42a82fc7911961d3ca55f54d1372c.jpg
Binary file added helpers/pngfind.com-pilgrim-hat-png-41504.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions helpers/pngfind.com-pilgrim-hat-png-41504.png:Zone.Identifier
Original file line number Diff line number Diff line change
@@ -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
Binary file added helpers/shape_predictor_68_face_landmarks.dat
Binary file not shown.
Binary file added helpers/snapchat-filters-png-4068.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 4 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
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()
# print(frame)
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