Image / Stream
Display an image and continuously update it in real time.
import io
import time
import uuid
import cv2
from h2o_wave import app, Q, ui, main
import 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')