import
cv2 as cv
import
numpy as np
capture
=
cv.VideoCapture(
0
)
face_cascade
=
cv.CascadeClassifier(
'haarcascade_frontalface_default.xml'
)
eye_cascade
=
cv.CascadeClassifier(
"haarcascade_eye.xml"
)
while
True
:
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
,
0
for
(x, y, w, h)
in
faces:
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
=
0
eye_1
=
[
None
,
None
,
None
,
None
]
eye_2
=
[
None
,
None
,
None
,
None
]
for
(ex, ey, ew, eh)
in
eyes:
if
index
=
=
0
:
eye_1
=
[ex, ey, ew, eh]
elif
index
=
=
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
+
1
if
(eye_1[
0
]
is
not
None
)
and
(eye_2[
0
]
is
not
None
):
if
eye_1[
0
] < eye_2[
0
]:
left_eye
=
eye_1
right_eye
=
eye_2
else
:
left_eye
=
eye_2
right_eye
=
eye_1
left_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_x
delta_y
=
right_eye_y
-
left_eye_y
angle
=
np.arctan(delta_y
/
delta_x)
angle
=
(angle
*
180
)
/
np.pi
if
angle >
10
:
cv.putText(frame,
'RIGHT TILT :'
+
str
(
int
(angle))
+
' degrees'
,
(
20
,
30
), cv.FONT_HERSHEY_SIMPLEX,
1
,
(
0
,
0
,
0
),
2
, cv.LINE_4)
elif
angle <
-
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)
if
cv.waitKey(
1
) &
0xFF
=
=
27
:
break
capture.release()
cv.destroyAllWindows()