Example #1
0
    def test_framereader(self):
        with tempfile.NamedTemporaryFile(suffix=".hevc") as fp:
            r = requests.get(
                "https://github.com/commaai/comma2k19/blob/master/Example_1/b0c9d2329ad1606b%7C2018-08-02--08-34-47/40/video.hevc?raw=true"
            )
            fp.write(r.content)
            fp.flush()

            f = FrameReader(fp.name)

            self.assertEqual(f.frame_count, 1200)
            self.assertEqual(f.w, 1164)
            self.assertEqual(f.h, 874)

            frame_first_30 = f.get(0, 30)
            self.assertEqual(len(frame_first_30), 30)

            print(frame_first_30[15])

            print("frame_0")
            frame_0 = f.get(0, 1)
            frame_15 = f.get(15, 1)

            print(frame_15[0])

        assert np.all(frame_first_30[0] == frame_0[0])
        assert np.all(frame_first_30[15] == frame_15[0])
Example #2
0
class CommaDataset(Dataset):
    def __init__(self, main_dir, transform=None):
        self.main_dir = main_dir
        self.frame_reader = FrameReader(main_dir + 'video.hevc')

        self.gps_times = np.load(main_dir + 'global_pose/frame_gps_times')
        self.orientations = np.load(main_dir +
                                    'global_pose/frame_orientations')
        self.positions = np.load(main_dir + 'global_pose/frame_positions')
        self.times = np.load(main_dir + 'global_pose/frame_times')
        self.velocities = np.load(main_dir + 'global_pose/frame_velocities')

        self.transform = transform

    def __len__(self):
        return len(self.velocities)

    def __getitem__(self, idx):
        image = np.array(self.frame_reader.get(idx, pix_fmt='rgb24')[0],
                         dtype=np.float64)

        sample = {
            'image': image,
            'gps_times': self.gps_times,
            'orientations': self.orientations,
            'positions': self.positions,
            'times': self.times,
            'velocities': self.velocities[idx]
        }

        if self.transform:
            sample = self.transform(sample)

        return sample
Example #3
0
from common.transformations.camera import transform_img, eon_intrinsics
from common.transformations.model import medmodel_intrinsics
import numpy as np
from tqdm import tqdm
from tools.lib.framereader import FrameReader
import matplotlib
import matplotlib.pyplot as plt
# imgs just a list of images as in YUV format
fr = FrameReader("leon.hevc")

imgs = []
for i in tqdm(range(100)):
    imgs.append(fr.get(i, pix_fmt='yuv420p')[0].reshape((874 * 3 // 2, 1164)))


def frames_to_tensor(frames):
    H = (frames.shape[1] * 2) // 3
    W = frames.shape[2]
    in_img1 = np.zeros((frames.shape[0], 6, H // 2, W // 2), dtype=np.uint8)

    in_img1[:, 0] = frames[:, 0:H:2, 0::2]
    in_img1[:, 1] = frames[:, 1:H:2, 0::2]
    in_img1[:, 2] = frames[:, 0:H:2, 1::2]
    in_img1[:, 3] = frames[:, 1:H:2, 1::2]
    in_img1[:, 4] = frames[:, H:H + H // 4].reshape((-1, H // 2, W // 2))
    in_img1[:, 5] = frames[:, H + H // 4:H + H // 2].reshape(
        (-1, H // 2, W // 2))
    return in_img1


imgs_med_model = np.zeros((len(imgs), 384, 512), dtype=np.uint8)
Example #4
0
def replay(route, loop):
  route = route.replace('|', '/')

  lr = LogReader(f"cd:/{route}/rlog.bz2")
  fr = FrameReader(f"cd:/{route}/fcamera.hevc", readahead=True)

  # Build mapping from frameId to segmentId from roadEncodeIdx, type == fullHEVC
  msgs = [m for m in lr if m.which() not in IGNORE]
  msgs = sorted(msgs, key=lambda m: m.logMonoTime)
  times = [m.logMonoTime for m in msgs]
  frame_idx = {m.roadEncodeIdx.frameId: m.roadEncodeIdx.segmentId for m in msgs if m.which() == 'roadEncodeIdx' and m.roadEncodeIdx.type == 'fullHEVC'}

  socks = {}
  lag = 0
  i = 0
  max_i = len(msgs) - 2

  while True:
    msg = msgs[i].as_builder()
    next_msg = msgs[i + 1]

    start_time = time.time()
    w = msg.which()

    if w == 'roadCameraState':
      try:
        img = fr.get(frame_idx[msg.roadCameraState.frameId], pix_fmt="rgb24")
        img = img[0][:, :, ::-1]  # Convert RGB to BGR, which is what the camera outputs
        msg.roadCameraState.image = img.flatten().tobytes()
      except (KeyError, ValueError):
        pass

    if w not in socks:
      socks[w] = messaging.pub_sock(w)

    try:
      if socks[w]:
        socks[w].send(msg.to_bytes())
    except messaging.messaging_pyx.MultiplePublishersError:
      socks[w] = None

    lag += (next_msg.logMonoTime - msg.logMonoTime) / 1e9
    lag -= time.time() - start_time

    dt = max(lag, 0)
    lag -= dt
    time.sleep(dt)

    if lag < -1.0 and i % 1000 == 0:
      print(f"{-lag:.2f} s behind")

    if input_ready():
      key = sys.stdin.read(1)

      # Handle pause
      if key == " ":
        while True:
          if input_ready() and sys.stdin.read(1) == " ":
            break
          time.sleep(0.01)

      # Handle seek
      dt = defaultdict(int, s=10, S=-10)[key]
      new_time = msgs[i].logMonoTime + dt * 1e9
      i = bisect.bisect_left(times, new_time)

    i = (i + 1) % max_i if loop else min(i + 1, max_i)
Example #5
0
import requests
from PIL import Image
from tools.lib.auth_config import get_token
from tools.lib.framereader import FrameReader

jwt = get_token()

route = sys.argv[1]
segment = int(sys.argv[2])
frame = int(sys.argv[3])

url = 'https://api.commadotai.com/v1/route/'+sys.argv[1]+"/files"
r = requests.get(url, headers={"Authorization": "JWT "+jwt})
assert r.status_code == 200
print("got api response")

cameras = r.json()['cameras']
if segment >= len(cameras):
  raise Exception("segment %d not found, got %d segments" % (segment, len(cameras)))

fr = FrameReader(cameras[segment])
if frame >= fr.frame_count:
  raise Exception("frame %d not found, got %d frames" % (frame, fr.frame_count))

im = Image.fromarray(fr.get(frame, count=1, pix_fmt="rgb24")[0])
fn = "uxxx_"+route.replace("|", "_")+"_%d_%d.png" % (segment, frame)
im.save(fn)
print(f"saved {fn}")