importcv2ascvimportnumpyasnp# 0 for webcam feed ; add "path to file"# for detection in video filecapture=cv.VideoCapture(0)face_cascade=cv.CascadeClassifier('haarcascade_frontalface_default.xml')eye_cascade=cv.CascadeClassifier("haarcascade_eye.xml")whileTrue:ret,frame=capture.read()gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)faces=face_cascade.detectMultiScale(gray,1.1,5)x,y,w,h=0,0,0,0for(x,y,w,h)infaces:cv.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)cv.circle(frame,(x+int(w*0.5),y+int(h*0.5)),4,(0,255,0),-1)eyes=eye_cascade.detectMultiScale(gray[y:(y+h),x:(x+w)],1.1,4)index=0eye_1=[None,None,None,None]eye_2=[None,None,None,None]for(ex,ey,ew,eh)ineyes:ifindex==0:eye_1=[ex,ey,ew,eh]elifindex==1:eye_2=[ex,ey,ew,eh]cv.rectangle(frame[y:(y+h),x:(x+w)],(ex,ey),(ex+ew,ey+eh),(0,0,255),2)index=index+1if(eye_1[0]isnotNone)and(eye_2[0]isnotNone):ifeye_1[0]<eye_2[0]:left_eye=eye_1right_eye=eye_2else:left_eye=eye_2right_eye=eye_1left_eye_center=(int(left_eye[0]+(left_eye[2]/2)),int(left_eye[1]+(left_eye[3]/2)))right_eye_center=(int(right_eye[0]+(right_eye[2]/2)),int(right_eye[1]+(right_eye[3]/2)))left_eye_x=left_eye_center[0]left_eye_y=left_eye_center[1]right_eye_x=right_eye_center[0]right_eye_y=right_eye_center[1]delta_x=right_eye_x-left_eye_xdelta_y=right_eye_y-left_eye_y# Slope of line formulaangle=np.arctan(delta_y/delta_x)# Converting radians to degreesangle=(angle*180)/np.pi# Provided a margin of error of 10 degrees# (i.e, if the face tilts more than 10 degrees# on either side the program will classify as right or left tilt)ifangle>10:cv.putText(frame,'RIGHT TILT :'+str(int(angle))+' degrees',(20,30),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,0),2,cv.LINE_4)elifangle<-10:cv.putText(frame,'LEFT TILT :'+str(int(angle))+' degrees',(20,30),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,0),2,cv.LINE_4)else:cv.putText(frame,'STRAIGHT :',(20,30),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,0),2,cv.LINE_4)cv.imshow('Frame',frame)ifcv.waitKey(1)&0xFF==27:breakcapture.release()cv.destroyAllWindows()