#!/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()