|
| 1 | +import cv2 |
| 2 | +import dlib |
| 3 | +import numpy as np |
| 4 | + |
| 5 | + |
| 6 | +camera = True |
| 7 | +cap = cv2.VideoCapture(0) |
| 8 | + |
| 9 | +def empty(a): |
| 10 | + pass |
| 11 | +cv2.namedWindow("BGR") |
| 12 | +cv2.resizeWindow("BGR",640,240) |
| 13 | +cv2.createTrackbar("Blue","BGR",0,255,empty) |
| 14 | +cv2.createTrackbar("Green","BGR",0,255,empty) |
| 15 | +cv2.createTrackbar("Red","BGR",0,255,empty) |
| 16 | +def create(img, points,masked = False, cropped = True): |
| 17 | + if masked: |
| 18 | + mask = np.zeros_like(img) |
| 19 | + mask = cv2.fillPoly(mask,[points],(255,255,255)) |
| 20 | + # cv2.imshow("mask",mask) |
| 21 | + img = cv2.bitwise_and(img,mask) |
| 22 | + if cropped: |
| 23 | + b = cv2.boundingRect(points) |
| 24 | + x,y,w,h = b |
| 25 | + imgCrop = img[y:y+h,x:x+w] |
| 26 | + imgCrop = cv2.resize(imgCrop,(0,0),None,5,5) |
| 27 | + return imgCrop |
| 28 | + else: |
| 29 | + return mask |
| 30 | +detector = dlib.get_frontal_face_detector() |
| 31 | +predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") |
| 32 | +while True: |
| 33 | + if camera: success , img = cap.read() |
| 34 | + else: print("Camera not working") |
| 35 | + img = cv2.resize(img,(0,0), None,1,1) |
| 36 | + imgOriginal = img.copy() |
| 37 | + imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) |
| 38 | + faces = detector(imgGray) |
| 39 | + for face in faces: |
| 40 | + x1,y1 = face.left(),face.top() |
| 41 | + x2,y2 = face.right(),face.bottom() |
| 42 | + # imgOri = cv2.rectangle(imgOriginal,(x1,y1),(x2,y2),(0,255,0),1) |
| 43 | + landmarks = predictor(imgGray,face) |
| 44 | + mypoints = [] |
| 45 | + for n in range(0,68): |
| 46 | + x = landmarks.part(n).x |
| 47 | + y = landmarks.part(n).y |
| 48 | + mypoints.append([x,y]) |
| 49 | + # cv2.circle(imgOriginal,(x,y),2,(0,0,255),3) |
| 50 | + # cv2.putText(imgOriginal,str(n),(x,y-10),cv2.FONT_HERSHEY_COMPLEX,0.5,(0,255,0),1) |
| 51 | + mypoints = np.array(mypoints) |
| 52 | + lips = create(img,mypoints[48:61],masked=True,cropped=False) |
| 53 | + # cv2.imshow("Lip",lips) |
| 54 | + imgColor = np.zeros_like(lips) |
| 55 | + a = cv2.getTrackbarPos("Blue","BGR") |
| 56 | + q = cv2.getTrackbarPos("Green","BGR") |
| 57 | + w = cv2.getTrackbarPos("Red","BGR") |
| 58 | + imgColor[:] = a,q,w |
| 59 | + # cv2.imshow("Color",imgColor) |
| 60 | + imgColor = cv2.bitwise_and(lips,imgColor) |
| 61 | + imgColor = cv2.GaussianBlur(imgColor,(7,7),10) |
| 62 | + # imgOriginal_Image = cv2.cvtColor(imgOriginal,cv2.COLOR_BGR2GRAY) |
| 63 | + # imgOriginal_Image = cv2.cvtColor(imgOriginal_Image,cv2.COLOR_GRAY2BGR) |
| 64 | + imgColor =cv2.addWeighted(imgOriginal,1,imgColor,0.4,0) |
| 65 | + cv2.imshow("BGR",imgColor) |
| 66 | + # cv2.imshow("Image",imgOriginal) |
| 67 | + key = cv2.waitKey(1) |
| 68 | + if key == ord("q"): |
| 69 | + break |
| 70 | +cv2.destroyAllWindows() |
0 commit comments