parent
25def3cc34
commit
0d10c00026
1 changed files with 0 additions and 104 deletions
@ -1,104 +0,0 @@ |
|||||||
#!/usr/bin/env python3 |
|
||||||
import os |
|
||||||
|
|
||||||
from common.basedir import BASEDIR |
|
||||||
os.environ['BASEDIR'] = BASEDIR |
|
||||||
SCALE = float(os.getenv("SCALE", "1")) |
|
||||||
|
|
||||||
import argparse |
|
||||||
import pygame # pylint: disable=import-error |
|
||||||
import numpy as np |
|
||||||
import cv2 # pylint: disable=import-error |
|
||||||
import sys |
|
||||||
import cereal.messaging as messaging |
|
||||||
|
|
||||||
_BB_OFFSET = 0, 0 |
|
||||||
_BB_TO_FULL_FRAME = np.asarray([[1., 0., _BB_OFFSET[0]], [0., 1., _BB_OFFSET[1]], |
|
||||||
[0., 0., 1.]]) |
|
||||||
_FULL_FRAME_TO_BB = np.linalg.inv(_BB_TO_FULL_FRAME) |
|
||||||
_FULL_FRAME_SIZE = 1164, 874 |
|
||||||
|
|
||||||
|
|
||||||
def pygame_modules_have_loaded(): |
|
||||||
return pygame.display.get_init() and pygame.font.get_init() |
|
||||||
|
|
||||||
|
|
||||||
def ui_thread(addr, frame_address): |
|
||||||
pygame.init() |
|
||||||
pygame.font.init() |
|
||||||
assert pygame_modules_have_loaded() |
|
||||||
|
|
||||||
size = (int(_FULL_FRAME_SIZE[0] * SCALE), int(_FULL_FRAME_SIZE[1] * SCALE)) |
|
||||||
print(size) |
|
||||||
pygame.display.set_caption("comma one debug UI") |
|
||||||
screen = pygame.display.set_mode(size, pygame.DOUBLEBUF) |
|
||||||
|
|
||||||
camera_surface = pygame.surface.Surface((_FULL_FRAME_SIZE[0] * SCALE, _FULL_FRAME_SIZE[1] * SCALE), 0, 24).convert() |
|
||||||
|
|
||||||
frame = messaging.sub_sock('roadCameraState', conflate=True) |
|
||||||
|
|
||||||
img = np.zeros((_FULL_FRAME_SIZE[1], _FULL_FRAME_SIZE[0], 3), dtype='uint8') |
|
||||||
imgff = np.zeros((_FULL_FRAME_SIZE[1], _FULL_FRAME_SIZE[0], 3), dtype=np.uint8) |
|
||||||
|
|
||||||
while 1: |
|
||||||
list(pygame.event.get()) |
|
||||||
screen.fill((64, 64, 64)) |
|
||||||
|
|
||||||
# ***** frame ***** |
|
||||||
fpkt = messaging.recv_one(frame) |
|
||||||
yuv_img = fpkt.roadCameraState.image |
|
||||||
|
|
||||||
if fpkt.roadCameraState.transform: |
|
||||||
yuv_transform = np.array(fpkt.roadCameraState.transform).reshape(3, 3) |
|
||||||
else: |
|
||||||
# assume frame is flipped |
|
||||||
yuv_transform = np.array([[-1.0, 0.0, _FULL_FRAME_SIZE[0] - 1], |
|
||||||
[0.0, -1.0, _FULL_FRAME_SIZE[1] - 1], [0.0, 0.0, 1.0]]) |
|
||||||
|
|
||||||
if yuv_img and len(yuv_img) == _FULL_FRAME_SIZE[0] * _FULL_FRAME_SIZE[1] * 3 // 2: |
|
||||||
yuv_np = np.frombuffer( |
|
||||||
yuv_img, dtype=np.uint8).reshape(_FULL_FRAME_SIZE[1] * 3 // 2, -1) |
|
||||||
cv2.cvtColor(yuv_np, cv2.COLOR_YUV2RGB_I420, dst=imgff) |
|
||||||
cv2.warpAffine( |
|
||||||
imgff, |
|
||||||
np.dot(yuv_transform, _BB_TO_FULL_FRAME)[:2], (img.shape[1], img.shape[0]), |
|
||||||
dst=img, |
|
||||||
flags=cv2.WARP_INVERSE_MAP) |
|
||||||
else: |
|
||||||
# actually RGB |
|
||||||
if len(yuv_img) != 0: |
|
||||||
img = np.frombuffer(yuv_img, dtype=np.uint8).reshape((_FULL_FRAME_SIZE[1], _FULL_FRAME_SIZE[0], 3)) |
|
||||||
img = img[:, :, ::-1] # Convert BGR to RGB |
|
||||||
|
|
||||||
height, width = img.shape[:2] |
|
||||||
img_resized = cv2.resize( |
|
||||||
img, (int(SCALE * width), int(SCALE * height)), interpolation=cv2.INTER_CUBIC) |
|
||||||
# *** blits *** |
|
||||||
pygame.surfarray.blit_array(camera_surface, img_resized.swapaxes(0, 1)) |
|
||||||
screen.blit(camera_surface, (0, 0)) |
|
||||||
|
|
||||||
# this takes time...vsync or something |
|
||||||
pygame.display.flip() |
|
||||||
|
|
||||||
|
|
||||||
def get_arg_parser(): |
|
||||||
parser = argparse.ArgumentParser( |
|
||||||
description="Show replay data in a UI.", |
|
||||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
|
||||||
|
|
||||||
parser.add_argument( |
|
||||||
"ip_address", |
|
||||||
nargs="?", |
|
||||||
default="127.0.0.1", |
|
||||||
help="The ip address on which to receive zmq messages.") |
|
||||||
|
|
||||||
parser.add_argument( |
|
||||||
"--frame-address", |
|
||||||
default=None, |
|
||||||
help="The ip address on which to receive zmq messages.") |
|
||||||
return parser |
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__": |
|
||||||
args = get_arg_parser().parse_args(sys.argv[1:]) |
|
||||||
ui_thread(args.ip_address, args.frame_address) |
|
Loading…
Reference in new issue