You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.1 KiB
79 lines
3.1 KiB
#!/usr/bin/env python3
|
|
import os
|
|
import argparse
|
|
import pygame # pylint: disable=import-error
|
|
import numpy as np
|
|
import cv2 # pylint: disable=import-error
|
|
|
|
from cereal import log
|
|
import cereal.messaging as messaging
|
|
|
|
from helpers import draw_pose
|
|
|
|
if __name__ == "__main__":
|
|
|
|
os.environ["ZMQ"] = "1"
|
|
|
|
parser = argparse.ArgumentParser(description='Sniff a communcation socket')
|
|
parser.add_argument('--addr', default='192.168.5.11')
|
|
args = parser.parse_args()
|
|
|
|
messaging.context = messaging.Context()
|
|
|
|
poller = messaging.Poller()
|
|
|
|
m = 'driverMonitoring'
|
|
messaging.sub_sock(m, poller, addr=args.addr)
|
|
|
|
pygame.init()
|
|
pygame.display.set_caption('livedm')
|
|
screen = pygame.display.set_mode((320,640), pygame.DOUBLEBUF)
|
|
camera_surface = pygame.surface.Surface((160,320), 0, 24).convert()
|
|
|
|
while 1:
|
|
polld = poller.poll(1000)
|
|
for sock in polld:
|
|
msg = sock.receive()
|
|
evt = log.Event.from_bytes(msg)
|
|
|
|
faceProb = np.array(evt.driverMonitoring.faceProb)
|
|
faceOrientation = np.array(evt.driverMonitoring.faceOrientation)
|
|
facePosition = np.array(evt.driverMonitoring.facePosition)
|
|
|
|
print(faceProb)
|
|
# print(faceOrientation)
|
|
# print(facePosition)
|
|
faceOrientation[1] *= -1
|
|
facePosition[0] *= -1
|
|
|
|
img = np.zeros((320,160,3))
|
|
if faceProb > 0.4:
|
|
cv2.putText(img, 'you', (int(facePosition[0]*160+40), int(facePosition[1]*320+110)), cv2.FONT_ITALIC, 0.5, (255,255,0))
|
|
cv2.rectangle(img, (int(facePosition[0]*160+40), int(facePosition[1]*320+120)),\
|
|
(int(facePosition[0]*160+120), int(facePosition[1]*320+200)), (255,255,0), 1)
|
|
|
|
not_blink = evt.driverMonitoring.leftBlinkProb + evt.driverMonitoring.rightBlinkProb < 1
|
|
|
|
if evt.driverMonitoring.leftEyeProb > 0.6:
|
|
cv2.line(img, (int(facePosition[0]*160+95), int(facePosition[1]*320+140)),\
|
|
(int(facePosition[0]*160+105), int(facePosition[1]*320+140)), (255,255,0), 2)
|
|
if not_blink:
|
|
cv2.line(img, (int(facePosition[0]*160+99), int(facePosition[1]*320+143)),\
|
|
(int(facePosition[0]*160+101), int(facePosition[1]*320+143)), (255,255,0), 2)
|
|
|
|
if evt.driverMonitoring.rightEyeProb > 0.6:
|
|
cv2.line(img, (int(facePosition[0]*160+55), int(facePosition[1]*320+140)),\
|
|
(int(facePosition[0]*160+65), int(facePosition[1]*320+140)), (255,255,0), 2)
|
|
if not_blink:
|
|
cv2.line(img, (int(facePosition[0]*160+59), int(facePosition[1]*320+143)),\
|
|
(int(facePosition[0]*160+61), int(facePosition[1]*320+143)), (255,255,0), 2)
|
|
|
|
else:
|
|
cv2.putText(img, 'you not found', (int(facePosition[0]*160+40), int(facePosition[1]*320+110)), cv2.FONT_ITALIC, 0.5, (64,64,64))
|
|
draw_pose(img, faceOrientation, facePosition,
|
|
W = 160, H = 320, xyoffset = (0, 0), faceprob=faceProb)
|
|
|
|
pygame.surfarray.blit_array(camera_surface, img.swapaxes(0,1))
|
|
camera_surface_2x = pygame.transform.scale2x(camera_surface)
|
|
screen.blit(camera_surface_2x, (0, 0))
|
|
pygame.display.flip()
|
|
|