Skip to content

Create New Car Method to Show a GIF on the Car Screen #70

@IGardocki

Description

@IGardocki

I've been volunteering at the San Antonio Youth Code Jams for about 2 years. We had a request from a student at the Low Sensory Jam to display a GIF on the car's screen, and other students really enjoyed this as well. It would be cool if there was a car.show_gif(url) method that would take a url to a gif as a argument and display the gif on the car screen. Below is the code we used to make that work (this code displays a gif of a cat playing a piano). It also resizes gifs so that they fit on the AutoAuto car's screen.

import numpy as np
from PIL import Image, ImageSequence
import requests
from io import BytesIO
import car  # your display module

# === Configuration: use actual screen resolution
MAX_WIDTH = 480
MAX_HEIGHT = 320

def resize_frame_if_needed(pil_img, max_w=MAX_WIDTH, max_h=MAX_HEIGHT):
    w, h = pil_img.size
    if w <= max_w and h <= max_h:
        return pil_img
    scale = min(max_w / w, max_h / h)
    new_w = int(w * scale)
    new_h = int(h * scale)
    return pil_img.resize((new_w, new_h), Image.ANTIALIAS)

# === Example usage
url = "https://media.tenor.com/5D_DoIfRwFEAAAAM/cat-piano.gif"
response = requests.get(url)
gif = Image.open(BytesIO(response.content))

frames = []
for frame in ImageSequence.Iterator(gif):
    rgb = frame.convert("RGB")
    resized = resize_frame_if_needed(rgb, MAX_WIDTH, MAX_HEIGHT)
    arr = np.array(resized)
    frames.append(arr)

print(f"Extracted {len(frames)} frames, each with shape near {frames[0].shape}")

while True:
    for i, frame_array in enumerate(frames):
        print(f"Displaying frame {i}, shape {frame_array.shape}")
        car.plot(frame_array)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions