Skip to main content

Image / Stream

Display an image and continuously update it in real time.

import ioimport timeimport uuid
import cv2from h2o_wave import app, Q, ui, mainimport numpy as np
frame_count = 256

def create_random_image():    frame = (np.random.rand(100, 100, 3) * 255).astype(np.uint8)    _, img = cv2.imencode('.jpg', frame)    return io.BytesIO(img)

@app('/demo')async def serve(q: Q):    # Mint a unique name for our image stream    stream_name = f'stream/demo/{uuid.uuid4()}.jpeg'
    # Send image    endpoint = await q.site.uplink(stream_name, 'image/jpeg', create_random_image())
    # Display image    q.page['qux'] = ui.form_card(box='1 1 5 5', items=[ui.image('Image Stream', path=endpoint)])    await q.page.save()
    t0 = time.time()    # Update image in a loop    for i in range(frame_count):        # Send image (use stream name as before).        await q.site.uplink(stream_name, 'image/jpeg', create_random_image())
    await q.site.unlink(stream_name)
    print(f'{frame_count / (time.time() - t0)}fps')