fetch_image_from_route.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env python3
  2. import sys
  3. if len(sys.argv) < 4:
  4. print(f"{sys.argv[0]} <route> <segment> <frame number> [front|wide|driver]")
  5. print('example: ./fetch_image_from_route.py "02c45f73a2e5c6e9|2020-06-01--18-03-08" 3 500 driver')
  6. exit(0)
  7. cameras = {
  8. "front": "cameras",
  9. "wide": "ecameras",
  10. "driver": "dcameras"
  11. }
  12. import requests
  13. from PIL import Image
  14. from openpilot.tools.lib.auth_config import get_token
  15. from openpilot.tools.lib.framereader import FrameReader
  16. jwt = get_token()
  17. route = sys.argv[1]
  18. segment = int(sys.argv[2])
  19. frame = int(sys.argv[3])
  20. camera = cameras[sys.argv[4]] if len(sys.argv) > 4 and sys.argv[4] in cameras else "cameras"
  21. url = f'https://api.commadotai.com/v1/route/{route}/files'
  22. r = requests.get(url, headers={"Authorization": f"JWT {jwt}"}, timeout=10)
  23. assert r.status_code == 200
  24. print("got api response")
  25. segments = r.json()[camera]
  26. if segment >= len(segments):
  27. raise Exception("segment %d not found, got %d segments" % (segment, len(segments)))
  28. fr = FrameReader(segments[segment])
  29. if frame >= fr.frame_count:
  30. raise Exception("frame %d not found, got %d frames" % (frame, fr.frame_count))
  31. im = Image.fromarray(fr.get(frame, count=1, pix_fmt="rgb24")[0])
  32. fn = f"uxxx_{route.replace('|', '_')}_{segment}_{frame}.png"
  33. im.save(fn)
  34. print(f"saved {fn}")